跳过正文
  1. 文章/

Vim 技巧

·158 字·1 分钟
作者
Yang Hu

搜索与处理多个文件
#

搜索
#

关于在文件中搜索词语/符号,请参见 search-in-vim

要快速按文件名查找并打开文件,我使用 fzfcoc-list,以及以下按键绑定。

通用搜索

要在_工作目录_(而非当前文件/缓冲区目录)中打开文件,使用 :Files,lclist current,列出当前目录)。

我还创建了快捷命令 ,lflist file,列出文件),从当前缓冲区所在目录开始,可以在开始搜索前输入路径。

此外,还有 :Buffers / ,b 用于列出已打开的缓冲区,方便快速跳转。当打开了很多文件时非常有用。不过,使用 quickfix 列表、标记,或 :Lines / ,l* 精确跳转到某一行往往更高效。

Git 相关

要打开当前 git 仓库中的文件,使用 :GFiles,gcgit content),这使用 git ls-files 的文件列表,会遵循 .gitignore

要只查看已修改的文件,使用 GFiles?,gsgit 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-iTab:插入一个制表符
  • 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