posts-go/posts/2023-05-03-neovim.md

4.2 KiB

My neovim workflow

nvim-000

All configs are in my dotfiles.

Trick or treat

Search current word: *

Search multiple words:

:/\vword1|word2|word3

Replace word:

:%s/word1/word2/g

Delete all lines contain word:

:g/word/d

Delete all lines not contain word:

:g!/word/d

:v/word/d

Play macro (after selecting lines):

:norm! @a

Sort lines (after selecting lines):

:sort -u

Reverse lines (after selcting lines):

:!tail -r

Column-ize lines:

:!column -t

Jumpo

Basic:

  • gg: first line
  • G: last line
  • 0: first character of line
  • $: last character of line
  • w, b: word forward/backward
  • e, ge: end of word current/before
  • W, B: WORD (word with special char) forward/backward
  • E, gE: end of WORD current/before
  • f{char}, F{char}: find forward/backward character
  • %: jump between matching pair of (), [], {}

Advance:

  • CTRL-O, CTRL-I: cursor position backward/forward
  • {, }: paragraph backward/forward
  • H: top of screen
  • M: middle of screen
  • L: bottom of screen
  • CTRL-], CTRL-T: jump to tag/jump back from tag

Fold

  • zR: open all folds.
  • za, zA: toggle fold

Keymap

Use both \ and ; as leader key:

vim.keymap.set("n", ";", "<Leader>", { remap = true })
vim.keymap.set("n", "'", "<Leader>", { remap = true })

Ground rules:

  • <Leader> prefix: prefer global keymap

  • <Space> prefix: prefer lsp keymap, for coding of course :D

  • With ibhagwan/fzf-lua:

    • <Leader>f: find files
    • <Leader>l: find lines
    • <Leader>rg: grep files
    • With neovim/nvim-lspconfig helps:
      • <Space>s: find lsp symbols
      • <Space>d: go to definition
      • <Space>r: go to references
      • <Space>i: go to implementation
  • With nvim-tree/nvim-tree.lua, inside nvim-tree:

    • <C-n>: toggle
    • <Leader>n: locate file
    • a: create
    • d: delete
    • r: rename
    • x: cut
    • c: copy
    • p: paste
    • U: toggle hidden
  • With lewis6991/gitsigns.nvim:

    • ]c, [c: next/previous git change
  • With tpope/vim-projectionist

    • :A: open alternate file
  • With echasnovski/mini.nvim

    • With mini-bracketed
      • [D, ]D, [d, ]d: diagnostic backward/forward
      • [Q, ]Q, [q, ]q: quickfix backward/forward
      • [T, ]T, [t, ]t: tree-sitter backward/forward
    • With mini-comment
      • gcc: comment/uncomment current line
      • gc: comment/uncomment selected lines
    • With mini-completion
      • <C-Space>: trigger completion
    • With mini-surround
      • sa: add surround
      • sd: delete surround
      • sr: replace surround
  • With neovim/nvim-lspconfig:

    • <Space>e: float diagnostic
    • <Space>k: hover
    • <F2>: rename
    • <Space>f: format code
    • <Space>ca: code action
    • <Space>ci: organize imports

References / Thanks