BioNotes.Org

ML, vim, biology, math, and more

Log

  • 2/18/2023 - Found good reasoning and explanation of syntax highlights for vim here
  • 2/25/2023 - Great advanced vim resource especially vimscripting here
  • 3/02/2023 - Cool new tricks in this 14-minute MAKC Youtube video titled “My Favorite Vim Tricks”. Outline:
    • Tabs, Custom Workspaces, Multi-language Spell Checking, (auto) completon Ctrl-p/n, File Explorers, Visual Block mode, Macros
  • 3/03/2023 - From The Valuable Dev. A Vim Guide for Advanced Users … part of series.
    • First article for beginners is here.
    • Guide for intermediate users is here
  • 3/03 - Vim Tips for the Intermediate Vim User By Jemma Issroff, starts with talking about mini-golf and then starts goes into interesting examples.
  • 3/04 - From this Hacker News comment
  • 3/05 Famous Stackover Flow answer from 8/09/2009–epic explanation about how to grok vi.
    • From same thread is this answer from 2010 which has a ton of shortcuts, a starter .vimrc file etc.
  • 3/10 Figured out proper autocommands to change colorscheme based on Insert or Command mode.
  • 3/11 Decide which new colorschemes to add. Partially inspired by this YouTube video
  • 3/12 Successfully followed these instructions to install vim-plug
    • Also installed dracula, codedark, and personal favorite: Kolor.
  • 3/21 Lots of progress documented in OneNote. For autocomplete based on other words in the document, go into Insert mode and try Ctrl-n and Ctrl-p. For more, see this help doc or this help doc
  • 3/23 Delighted by typing ci{ or di{ where i refers to “inside” and you can (c)hange or (d)elete everything inside those curly braces.
    • Works for ci* where * = parentheses, quotes, brackets, curly braces, any open/closed tokens.
  • 3/25 Need to rewatch this video on g commands. Off the top of my head:
    • gj and gk in the context of a long line of text which appears visually as a single paragraph allows one to move up and down within that paragraph without going to different lines
      • Also works by adding movement so g5j will move 5 lines down within the visual block of text
    • gu [text object] makes everything lowercase. gU [text object] makes everything uppercase.
      • e.g., gu$ makes everything lowercase to the end of the line.
      • e.g., gU5w makes the next 5 words uppercase
  • 5/04 List of vim-friendly apps and utilities and associated HN thread
  • 7/11 Vim’s implementation of grep. Some links discussing various flavors of regex related to perl, vim, Basic Regular Expression (BRE) synatx, Extended Regular Expression (ERE) synatx, etc.
  • 8/05 - Creator and maintainer of vim Bram Moolenaar passed away. :( HN thread with personal anecdotes
  • 8/27 - Created distinct page for my sed notes

9/16/2023

  • Got back into vim-plug because I want to have proper *.astro syntax highlighting. Referencing the vim-astro plugin. Adapted instructions from this Linux vim-plug guide. Main steps: (1) add a new line to .vimrc; (2) start new terminal window; and (3) Open a vim file and type :PlugInstall.
  • I also edited my .gitignore file within /proj-4/a2-astro so that temporary vim files like *.swp and *.swo are not tracked/pushed by git, per these instructions
  • Note. I currently am able to indent pretty effectively with the ctrl-v, select how many rows with j, shift-I, type text or tabs to apply to all lines sequence. However, deletion (aka outdenting) doesn’t seem to work to well. Reread section 5 Blockwise operators to see if I can fix this.

9/24/2023

  • to switch immediately to tab number ‘n’, type ngt. e.g, to move to tab 5, type 5gt.
  • when invoking vim on the command line, typing vim -p filename1.txt filename2.txt will automatically open desired files all at once, each in its own tab all in the same instance of vim.

9/27/2023

  • Very handy way of deleting to a search string e.g., ‘Nashville’. Instead of typing dtN, type d/Nashville followed by or `Enter` key. See [this answer](https://vi.stackexchange.com/questions/14459/delete-to-next-search-result)
  • Note that to search backwards, Shift-/ aka ? works just like usual reverse search. e.g., instead of typing dTN, type d?Nashville followed by or `Enter` key.

10/11/2023

  • vim has a built in sort utility works very well. If you want to sort all lines :%sort u. For more see this article

2/05/2024

  • Notes on qq macro recordings can be found in a7 > History of Technology section > Pasquinelli Chapter 2 aka 54-pas-chap2.
  • Notes on new qq macro recordings can be found in a7 > Eng > Part II Diallectics aka 72-p2.

2/06/2024

  • This is how you paste into the : command line, officially called the Ex command line. Add something to the default register using y for yank, e.g., yl for 1 letter, yw for 1 word.
    • e.g., yb for one word backward
    • Then, go to ex cmd line by typing and typing `:`
    • <Ctrl> + r and then type to access the default register
    • Can type "a to access the a register
  • For more detailed instructions in how to enter in escape/control characters, see this comment

2/15/2024

6/25/2024

  • When using the :%s regex, remember that \n refers to the newlines in the search field, and \r refers to newlines in the replace field.
    • So for example, if you want to replace text <newline> with text ; <newline>, you would type %s|\n|;\r|gc.
  • Use this article to understand how to add and retrieve characters from registers. For cut and paste.
    • For example, to add everyting from the cursor to the end of the line $ to the register a, type "ay$. B/c y = (y)ank and $ indicates the end of the current line.
    • Then, to paste what’s in the register a, simply type "ap.

7/07/2024

  • Repeated instructions on how to store and paste with register

    Example 1

  • to yank next 3 words and store in register a, type "ay3w.
  • to paste item in register a, type "ap.

    Example 2

  • to yank from current cursor to end of line and store in register b, type "by$.
  • to paste item in register b, type "bp.

7/09/2024

  • Equivalent to Save As… in macOS / Windows / Office. Type :w {pathname}/{NEW filename} will write current file contents into the NEW file. Note that this does not save current contents into the current file so you must type :w separately to make sure that happens. See more here.

8/03/2024

  • Let’s install LSP server and relevant plugins for syntax highlighting snd CoC code completion for TypeScript and React
  • Note: :bd in vim clears the current buffer (aka closes the window like if you are in PlugInstall) without quitting vim. Before this, I was using :q to quit vim entirely to clear away PlugInstall. For more, see Stack Overflow

Steps

  1. Watched this YouTube video by Nir Lichtman at 51 seconds. You can see his .vimrc file at GitHub
  2. Edit my own .vimrc file
  3. Make sure these plug-ins are included within the call plug#begin( expand() ) and call plug#end() lines.
Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'
  1. Hm. Looks like I may need to upgrade my version of vim which is currently at 9.0. But CoC requires 9.0.0438 per these instructions.
  2. So I will use brew to update my vim. Currently using default that came with macOS, stored in /usr/bin/vim.
  3. Went through brew update; doctor; upgrade cycle for all machines.
  4. Now installing vim using brew install vim. For more context, see the Homebrew vim page
  5. Success. Now, running updated vim version 9.1 (02 Jan 2024)
    • On x86, running from the /usr/local/bin/vim directory .
    • On arm64 Apple Silicon, running from the /opt/homebrew/bin/vim directory .

More steps

  • Open up vim, and run plug install with :PlugInstall and choose Yes to install the new vim plugins.
  • Next time you open up any particular filetype with a *.c, *.js, *.ts, etc. type :LspInstallServer and press Y for yes. This will ensure that the desired Language Server is installed.
  • To disable everything, just go to the .vimrc file and comment out the 2 lines for the lsp plugins: prabir…/vim-lisp and mattn/vim-lsp-settings`.
  • No need to rerun :PlugInstall, uninstall, etc, it will all be turned off.
  • Also, looks like there is a TypeScript LSP that automatically pops up when I open *.js files. But not any default JS Lsp’s.
  • Ok got all machines working. Can easily toggle on/off lsp functionality by commenting on/off 2 plugins in .vimrc.

8/31/2024

  • Let’s install neovim so i can take advantage of code completion etc for TypeScript, Vue, and React projects.
  • Reran usual brew hygeine commands, see OneNote

Some tutorials for today’s setup

  1. Feb 2024 - Ultimate Vim Vue Setup. Vim, not neovim
  2. Feb 2024- YouTube by Dreams of Code: The perfect Neovim setup for Next.js (it’s back)

Notes on Neovim setup from Dreams of Code tutorial

Part 1: Initial setup

  1. Installing latest stable build of neovim, release 0.10. In video, they are using 0.9.4.
  2. Installed with brew install neovim
  3. Updated .vimrc file for shortcut for nvim commands
  4. In addition to installing neovim, need to install git and nerdfonts. Both are installed already.
  5. Next, go with basic config. DoC recomends NVChad.
    • config file usually lives at ~/.config/nvim
    • command to clone NVChad: git clone -b v2.0 https://github.com/NvChad/NvChad ~/.config/nvim --depth 1
    • creates ~/.config/nvim directory.
  6. To quickly switch the color theme, in Cmd mode, just type <space>th
    • CoD recommends ‘catpuccino’ theme
    • Because many themes break my macOS Terminal setup, i chose pastelbeans which seems to work OK in both Alacritty and Terminal.
    • Also don’t mind decay on iMac display. Note, need to type :match Error /\t/ to reactivate tab coloring

Part 2: Configuring for JS and TS

  1. Starting at 2:27, CoD talks about what’s needed.
  2. LSP install. Navigate to ~/.config/nvim/lua/custom/
    • Edit the .../nvim/lua/custom/chadrc.lua file. Add these lines below the M.ui = { theme = 'pastelbeans' }:
       M.plugins = "custom.plugins"
       return M
      

  3. Create a new plugins.lua file in that location like this: ~/.config/nvim/lua/custom/plugins.lua
  4. Verify that this is entered into .../nvim/lua/custom/plugins.lua. Note that you must edit this file again below to make sure the TypeScript LSP is installed
local plugins = {
  {
    "neovim/nvim-lspconfig",
    config = function()
      require "plugins.configs.lspconfig"
    end,
  }
}
return plugins

  1. Create a file named lspconfig.lua and store in .../nvim/lua/custom/configs/lspconfig.lua and add these contents. Note that this is one level down with a new configs subdirectory!
local base = require("plugins.configs.lspconfig")
local on_attach = base.on_attach
local capabilities = base.capabilities

local lspconfig = require("lspconfig")

lspconfig.tsserver.setup({
  on_attach = on_attach,
  capabilities = capabilities,
})

  1. Now to install the TypeScript lsp server. There are 2 ways of doing this:
    1. Using brew or other package managers on my local machine to download. Or perhaps use the PlugInstall for vim.
    2. Use the nvim specific installer mason.nvim. Advantage of this method is that this follows our config to another machine. Let’s use mason.nvim.
  2. So let’s edit .../nvim/lua/custom/plugins.lua and add new lines ensuring that the typescript server is installed. Here is the final version of the plugins.lua file up to this point:
local plugins = {
  {
    "neovim/nvim-lspconfig",
    config = function()
      require "plugins.configs.lspconfig"
    end,
  },
  {
    "williambowman/mason.nvim",
    opts = {
      ensure_installed = {
        "typescript-language-server",
      }
    }
  }
}
return plugins

  1. Now, let’s quit nvim and reopen it to reload our plugins.
  2. Type :MasonInstallAll and we will see the LSPs for Lua and Typescript being installed.
  3. After that, autocomplete is ready to go for lua and TS. We can verify this is working by going into any JS or TS file and typing :LspInfo which will show that the server is installed. Also, by typing in standard JS/TS keywords will show have autocomplete working.

  1. Not sure if I need this, but I added "vue-language-server", so the complete version of .../nvim/lua/custom/plugins.lua is:

local plugins = {
  {
    "neovim/nvim-lspconfig",
    config = function()
      require "plugins.configs.lspconfig"
    end,
  },
  {
    "williambowman/mason.nvim",
    opts = {
      ensure_installed = {
        "typescript-language-server",
        "vue-language-server",
      }
    }
  }
}
return plugins
  1. and also within nvim, typed :MasonInstall vue-language-server.

    Part 3: Instructions on setting up autocomplete for Tailwind.css

Part 4: Instructions for installing ESlint

Part 5: Instructions for installing Prettier

Part 6: Instructions for installing HTML auto tag closers


9/01/2024

  • Commented out legacy LSP plugins from .vimrc because I’m relying on Mason, etc. in NVChad.
  • Tried out various new color themes (see OneN).
  • On champ, installed vue LSP with command MasonInstall vue-language-server. Hopefully this handles most cases and I don’t need to still install volar or tree-sitter

Vim folding

  • Based on this article, one can manually fold with zf{motion}.
    • Handy to use this to automatically make indent aware folding (regardless of tabs or spaces). :setlocal foldmethod=indent.
    • After that, zo to open a fold and zc to close a fold, for wherever the cursor is.
    • At some point, perhaps explore folding based on syntax :setlocal foldmethod=syntax

Relative line numbering isn’t working in Neovim

  • I asked phind and got this answer
  • Here is what works in my ~/.vimrc file:
" Turn on absolute line numbers
set number

" Turn on relative iine numbers
set relativenumber
  • According to phind, these are the equivalent lines I need to enter into my ~/.config/nvim/init.lua file:
-- Enable line numbers
vim.opt.number = true

-- Enable relative line numbers
vim.opt.relativenumber = true

9/08/2024

vim relative line numbers

  • To toggle between relative line numbers on or off, use ! at end.
    • set rnu! shorthand command
    • :set relativenumber! unabbreviated version
  • To turn off/on directly
    • set rnu shorthand to turn on
    • :set relativenumber to turn on (unabbreviated command)
    • set nornu shorthand to turn off
    • :set norelativenumber to turn off (unabbreviated command)

vim absoluteline numbers

  • To toggle between having line numbers on or off, use ! at end.
    • set nu! shorthand command
    • :set number! unabbreviated version
  • To turn off/on directly
    • set nu shorthand to turn on
    • :set number to turn on (unabbreviated command)
    • set nonu shorthand to turn off
    • :set nonumber to turn off (unabbreviated command)