搜索与处理多个文件#
搜索#
关于在文件中搜索词语/符号,请参见 search-in-vim。
要快速按文件名查找并打开文件,我使用 fzf 和 coc-list,以及以下按键绑定。
通用搜索
要在_工作目录_(而非当前文件/缓冲区目录)中打开文件,使用 :Files 或 ,lc(list current,列出当前目录)。
我还创建了快捷命令 ,lf(list file,列出文件),从当前缓冲区所在目录开始,可以在开始搜索前输入路径。
此外,还有 :Buffers / ,b 用于列出已打开的缓冲区,方便快速跳转。当打开了很多文件时非常有用。不过,使用 quickfix 列表、标记,或 :Lines / ,l* 精确跳转到某一行往往更高效。
Git 相关
要打开当前 git 仓库中的文件,使用 :GFiles 或 ,gc(git content),这使用 git ls-files 的文件列表,会遵循 .gitignore。
要只查看已修改的文件,使用 GFiles? 或 ,gs(git status)。
在缓冲区之间跳转#
在缓冲区间移动
缓冲区有编号,可以用 n <C-^> 快速跳转到编号为 n 的缓冲区。要跳转到上一个缓冲区,直接使用 <C-^>。
<C-o> / <C-i> 在跳转列表中前进/后退也可以用于在缓冲区之间移动,但精确度较低。
如果只有少数几个相邻缓冲区,我将 <C-p> / <C-n> 映射为移动到上一个/下一个缓冲区。
通过搜索移动
当需要处理某些符号时,通常会先搜索并得到一个 quickfix 列表(详见 search-in-vim)。有了它,可以借助 quickfix 列表在搜索结果位置之间移动,速度更快。
在大型缓冲区中移动#
标记
如果缓冲区中有几个经常访问的"热点",使用标记可以轻松跳转。'a 跳转到行首,`a 跳转到精确位置。
- ‘a - ‘z 小写标记,仅在当前文件内有效
- ‘A - ‘Z 大写标记,也称为文件标记,跨文件有效
动作
g;/g,:跳转到上一个/下一个修改列表位置[和]跳转:方括号后接一个字符,在代码块中跳转{ } ( )括号:跳转到上一个/下一个未匹配的括号m/M函数:跳转到上一个/下一个函数的开头/结尾#:#if #else #endif宏跳转*:C 注释块跳转
(/):跳转一个_句子_
Quickfix 列表
Quickfix 列表不只用于搜索结果:make 命令也用它来列出带有位置信息的错误/警告,可以借此快速定位并处理问题。
大纲
Git 合并#
缓冲区#
{count}Ctrl-^:跳转到编号为count的缓冲区。配合在顶部显示缓冲区编号的标签栏使用非常方便。
插入模式#
动作
Ctrl-c:进入普通模式Ctrl-O:临时切换到普通模式执行单个动作C-x+C-e/C-y:向上/向下滚动窗口,不移动光标
删除
Ctrl-U:删除当前行中已输入的所有字符C-w:向后删除一个单词C-h:删除一个字符
插入
C-i或Tab:插入一个制表符C-r:插入寄存器的内容C-t/C-d:插入/删除缩进。0 C-d删除所有缩进
补全
C-x 进入补全模式,之后的输入触发不同类型的补全:
C-L:整行C-F:文件名C-N:缓冲区中的关键词C-K:字典C-]:标签C-D:定义C-O:omnifunc