vim 总结

(12 mins to read)

vim常用键

verb + noun (cperator [number] motion/object)

命令

  • :e file:打开文件
  • :enew
  • :e:重新加载当前文件
  • :wq, :xx等于wq
  • vim +line_number path/to/file:打开文件的指定行(省略line_number则位于文件末尾)
  • !cmd:执行外部命令

编辑

  • i:光标前插入
  • a:光标后插入
  • o:下一行插入
  • O:上一行插入
  • I:当前行开头插入
  • A:当前行结尾插入
  • u:撤销上一次改动
  • Ctrl-r:重做
  • U:撤销当前行的所有改动

动作

  • y:复制

  • p:粘贴

  • d:删除

  • c:替换

  • x:删除单个字符

  • r:替换单个字符

  • R:连续替换多个字符

  • ~:修改大小写

  • .:重复上一次更改

移动

  • hjkl:上下左右

  • gg:首行

  • G:最后一行

  • %:移动到匹配的括号处

  • n%:移动到文件的n%位置处

  • ^:当前行开头(第一个非空白字符)

  • 0:当前行开头(第一个字符)

  • $:当前行结尾(最后一个字符)

  • n|:当前行的第n

  • b:前一个word的结尾

  • w:后一个word的开头

  • e:后一个word的结尾

  • BWE:WORD是除空白符外的字符序列,相比于word可以包含标点符号

  • fx:移动到下一个字符x (find)

  • Fx:移动到上一个字符x

  • ;:重复fF移动

  • ,:反向移动

  • (:前一个句子

  • ):后一个句子

  • {:前一个段落

  • }:后一个段落

  • Ctrl-d:向下滚动半个屏幕

  • Ctrl-f:向下滚动一个屏幕

  • Ctrl-u:向上滚动半个屏幕

  • Ctrl-b:向上滚动一个屏幕

  • zt:将当前行置于屏幕顶部

  • zz:将当前行置于屏幕中央

  • zb:将当前行置于屏幕底部

  • /:正向搜索

  • ?:逆向搜索

  • n:下一个匹配

  • N:上一个匹配

  • *:快速正向搜索当前单词

  • #:快速逆向搜索当前单词

  • %s/regexp/replacement/g:全局替换(不加g则只修改一次)

  • %s/regexp/replacement/gc:对每个替换都提问是否进行

对象

  • i object: inner object

  • a object: around object

  • w: word

  • p: paragraph

  • s: sentence

  • (/): a pair of ( )

  • [/]: a pair of [ ]

  • {/}: a pair of { }

  • </>: a pair of < >

  • ": a pair of " "

  • ': a pair of ’ ’

  • : a pair of `

多窗口浏览

  • 向下切分::sp [file]
  • 向右切分::vsp [file]
  • 上下左右移动:<Ctrl-h/j/k/l>
  • 关闭当前窗口::q

折叠

  • za:翻转折叠
  • zR:取消所有折叠
  • zM:执行所有折叠

选择模式

  • >:右移
  • <:左移
  • y:复制
  • d:删除
  • u:小写化
  • U:大写化

选项

  • 设置缩进大小::set shiftwidth=4
  • 设置wrap:set wrap
  • 查看文件类型:set filetype?

Neovim配置

安装

Ubuntu apt安装的版本较旧,所以选择自行安装最新版本(目前是0.9.5)。

1
2
3
4
5
6
7
curl -LO https://github.com/neovim/neovim/releases/download/v0.9.5/nvim.appimage
chmod u+x nvim.appimage
./nvim.appimage --appimage-extract
./squashfs-root/AppRun --version
sudo mv squashfs-root /
sudo ln -s /squashfs-root/AppRun /usr/local/bin/nvim
rm ./nvim.appimage

卸载

1
2
3
4
5
sudo rm /usr/local/bin/nvim
sudo rm -rf /squashfs-root
# 移除配置
rm -rf $HOME/.config/nvim
rm -rf $HOME/.local/share/nvim

配置

起点

选择NvChad作为配置的起点。

1
2
git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1 && nvim
# 输入N,不采用示例配置

custom/init.lua中设置vim.g.mapleader = ",",将<leader>设置为逗号。

插件配置参考ayamir/nvimdotslazyvimBrunoKrugel/dotfiles

下面只介绍涉及到快捷键或者命令的插件,作为备忘。

  • NvChadUpdate:一键更新
  • <Ctrl-s>:保存文件
  • <Ctrl-c>:复制整个文件
  • <leader>rn:切换相对行号

插件管理

folke/lazy.nvim

  • :Lazy:打开Lazy面板

用户界面

主题
  • <leader>th:选择主题

选用aquarium,并设置transparency=false

面板

设置load_on_startup=true(可选)。

Buffer line
  • <Tab>:下一个Buffer
  • <S-Tab>:上一个Buffer
  • <leader>x:关闭当前Buffer

工具

备忘单
  • <leader>ch:打开备忘单
文件树

nvim-tree/nvim-tree.lua

:h nvim-tree-mappings-default

  • <Ctrl-n>:打开/关闭文件树

  • NvimTreeFocus, <leader>e:聚焦

  • <CR>:打开光标所在文件/进入文件夹

  • j/k:上下移动

  • a:新建文件

  • d:删除文件

  • r:重命名文件

  • S:搜索文件

  • <BS>:关闭文件夹

  • q:退出

  • <Tab>:预览

  • c:复制文件

  • p:粘贴文件

  • x:剪切文件

文件查找

nvim-telescope/telescope.nvim

  • <leader>ff:查找文件

  • <leader>fw:查找文件中的内容

  • <leader>fg:查找时可以添加rg参数,此时搜索的文本需要用双引号包裹 ("foo" -i大小写不敏感查找)

  • <leader>gsAdvancedGitSearch

  • <leader>fz:在当前文件中fzf

  • <leader>th:查找主题

  • <leader>cm:查找git commit

  • <leader>gt:查找git status

  • <leader>fa:查找所有文件(包括隐藏文件)

  • <leader>fb:查找打开的Buffer中的文件

  • <leader>fh:查找帮助文件

  • <Up>/<Down>或在Normal模式下j/k:上下移动

  • <C-u>/<C-d>:在预览窗口上下移动

  • <CR>:选择

  • ?:打开快捷键面板

终端
  • <A-h>:在下方打开/关闭一个终端
  • <A-v>:在右方打开/关闭一个终端
  • <A-i>:打开/关闭一个浮动终端
行跳转

nacro90/numb.nvim

  • :<number>:跳转到某行,该插件可以提供实时预览功能

编辑

注释

numToStr/Comment.nvim

  • gcc:切换当前行注释
  • gc:切换行注释
  • gb:切换块注释
高亮

nvim-treesitter/nvim-treesitter

  • 增量选择功能:

    • <CR>:扩大选择
    • <BS>:缩小选择
  • TSInstallInfo:查看所有语言安装情况

  • TSEnable highlight:开启语法高亮

  • TSUpdateSync:更新

  • TSInstall lang:安装

  • TSUninstall lang:卸载

问题列表

folke/trouble.nvim

  • TroubleToggle, <leader>tt:打开/关闭问题列表
TODO 高亮

folke/todo-comments.nvim

  • TODO:

  • PERF:

  • NOTE:

  • FIX:

  • WARN:

  • TEST:

  • :TodoTrouble, <leader>td:列出所有todo

  • :TodoTelescope <leader>ts:用telescope查找todo

这里有一个bug是只能查看当前所在文件夹下的todos,而不是打开的文件所在的文件夹下的todos(如果设置autochdir,那么telescope插件又会出问题)。

快速跳转

folke/flash.nvim

根据位置提示快速跳转。

  • 集成到了搜索 (//?) 中
  • 集成到了f/t/F/T中,再输入任意一个字符,按f/t/F/T或者;/,移动到下一个/上一个匹配
  • s/Ss是全局,S是treesitter中的所有父节点(还可以通过;/,扩大或缩小范围)),然后输入任意前缀
括号移动

andymass/vim-matchup

  • %:除了原本的括号匹配(()[]{})跳转外,还在特定于语言的匹配单词间跳转(比如if和else)

语言

符号树

stevearc/aerial.nvim

  • <leader>a:打开关闭aerial
  • <leader>ta:用telescope查找符号
格式化

stevearc/conform.nvim

  • <leader>fm:格式化当前文件
  • FormatEnable:开启保存时自动格式化
  • FormatDisable:关闭保存时自动格式化
  • ConformInfo
LSP

插件:neovim/nvim-lspconfig(配置)、williamboman/mason.nvim(安装管理)、williamboman/mason-lspconfig.nvim

  • LspInfo:查看LSP状态
  • LspRestart:重启LSP
  • LspStart:启动LSP
  • LspStop:关闭LSP
  • Mason:Mason面板
  • MasonInstall <package>, MasonUninstall:Mason安装
  • MasonUninstall <package>, :MasonUninstall:Mason卸载
  • MasonUpdate:Mason更新
  • MasonLog:Mason日志

Lsp快捷键:

  • K:查看文档
  • gr:查看引用
  • gd:查看定义
  • gi:查看实现
  • <leader>ca:code action
  • <leader>ra:变量改名
  • <leader>D:类型
  • <leader>:签名
Glance
  • gD:查看所有定义
  • gM:查看所有实现
  • gY:查看类型定义
  • gR:查看所有引用
Clangd Extension
  • ClangdSwitchSourceHeader:在头文件和代码文件间切换
  • ClangdInlayHints
  • ClangdAST:显示选中代码段的AST
  • ClangdSymbolInfo:显示光标所在处的类型
  • ClangdTypeHierarchy:显示光标所在处的类层级关系
markdown

iamcco/markdown-preview.nvim

  • MarkdownPreviewToggle, <F12>

截图

nvim dashboard

nvim startup time

nvim cpp file