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

95 lines
2.7 KiB
Markdown

# My neovim workflow
![nvim-000](https://raw.githubusercontent.com/haunt98/posts-images/main/nvim-000.png)
All configs are in [my dotfiles](https://github.com/haunt98/dotfiles).
Use both `\` and `;` as leader key:
```lua
vim.keymap.set("n", ";", "<leader>", { remap = true })
vim.keymap.set("n", "q", ":q<CR>")
```
Search multiple words:
```vim
:/\vword1|word2|word3
```
Replace word:
```vim
:%s/word1/word2/g
```
Jump 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 advance:
- `CTRL-O`, `CTRL-I`: cursor position backward/forward
- `(`, `)`: sentence 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
- Support jump to Go definition with [fatih/vim-go](https://github.com/fatih/vim-go).
Keymap for plugin (sync with dotfiles):
```lua
vim.keymap.set("n", "<leader>f", ":FZF<CR>")
vim.keymap.set("n", "<leader>rg", ":FZFRg<CR>")
vim.keymap.set("n", "<leader>cm", ":FZFCommands<CR>")
vim.keymap.set("n", "<C-n>", ":NvimTreeToggle<CR>")
vim.keymap.set("n", "<leader>n", ":NvimTreeFindFile<CR>")
vim.keymap.set("n", "<leader>tr", ":lua MiniTrailspace.trim()<CR>")
```
- With [nvim-tree/nvim-tree.lua](https://github.com/nvim-tree/nvim-tree.lua), inside nvim-tree:
- `a`: create
- `d`: delete
- `r`: rename
- `x`: cut
- `c`: copy
- `p`: paste
- `U`: toggle hidden
- With [lewis6991/gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim):
- `]c`, `[c`: next/previous git change
- With [echasnovski/mini.nvim](https://github.com/echasnovski/mini.nvim)
- With mini-bracketed
- `[b`, `]b`: buffer backward/forward
- `[T`, `]T`, `[t`, `]t`: tree-sitter backward/forward
- Support more languages with [nvim-treesitter/nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
- With mini-comment
- `gcc`: comment/uncomment current line
- `gc`: comment/uncomment selected lines
- With mini-surround
- `sa`: add surround
- `sd`: delete surround
- `sr`: replace surround
- With [neovim/nvim-lspconfig](https://github.com/neovim/nvim-lspconfig)
- `gd`: go to definition
- `gr`: go to references
- `K`: hover
- `<F2>`: rename
- `<space>f`: format
- `<space>ca`: code action
## Reference
- [neovim Motion](https://neovim.io/doc/user/motion.html)
- [neovim Tagsrch](http://neovim.io/doc/user/tagsrch.html)
- [neovim Lua-guide](https://neovim.io/doc/user/lua-guide.html)