字节笔记本

2026年2月23日

Vim 高级使用技巧

本文整理了 18 条 Vim 高级使用技巧,帮助开发者提升编辑效率。这些技巧涵盖了重复操作、快速定位、文本替换、寄存器使用等核心功能。

1. 点号重复操作

. 用来重复上一个操作。

2. f{char} 行内查找

f{char} 用来在同一行中找 char 字符,如 f+,会在行中找 + 号。

3. 分号和逗号重复查找

  • ; 会重复通过 f 找到字符这个动作,往后找
  • , 则会让它往前找

示例:综合上面 3 点,完成任务:把 var foo = "method("+argument1+","+argument2+")"; 这行代码中的 + 号前后都加上空格: 先 f+ 找到 +,修改:s + ,然后 ; 号找到下一个 +,然后点 .,之后一直输入 ;. 就可以了

4. 大写命令的快捷方式

命令等效操作说明
Cc$删除到行尾并进入插入模式
S^C删除整行并进入插入模式
I^i在行首进入插入模式
A$a在行尾进入插入模式
Oko在当前行上方插入新行

示例:给 10 行代码末尾加上 ; 分号 先 A;<esc>,再 j,再点 .,后面一直 j. 就可以了。

5. cw / cb / s 删除并插入

  • cw 删除一个单词并进入插入模式,如果光标在一个单词中间,则 bcw
  • cb 往前删除单词
  • s 只删除当前光标字符,马上变成插入模式

6. Ctrl+A / Ctrl+X 数字增减

  • <c-a>(Ctrl+a)会把数字变大 1
  • <c-x> 减小 1
  • 要变大 10 则:10<c-a>

如果光标当前不在数字上,则会在当前位置往后找到第一个数字做操作。

7. daw / dap 删除整个单词或段落

  • daw(delete all word)删除整个单词,不管光标在单词的哪
  • dap 删除整个段落

除了 d 也可以用在 c 上(change)。

8. gu / gU / g~ 大小写转换

  • guw 把单词变成小写
  • gUw 变成大写
  • guaw 对整个单词进行小写转换
  • g~ 可以把大小写全部反过来

9. 插入模式下的删除快捷键

  • <c-h> 相当于 backspace 删除一个字符
  • <c-w> 向前删除单词
  • <c-u> 删除到行开始处

10. 快速返回正常模式

在插入模式下,一般是按 Esc 来回到正常模式,不过它要让你的手离开键盘。替代方案是 <c-[>(Ctrl+[)。

11. 复制粘贴技巧

示例:复制 "PracticalVim,byDrewNeil ReadDrewNeil's" 这段话,光标在开始处,复制到逗号,再粘贴到末尾:

yt, 也就是复制到逗号的地方,再 jA 空格到末尾编辑,<c-r>0 把第 0 个寄存器的内容粘贴上。

12. FuzzyFinder 插件 - 快速打开文件

安装 FuzzyFinder 插件:http://www.vim.org/scripts/script.php?script_id=1984

它依赖 L9 库,所以还得先安装 L9:http://www.vim.org/scripts/script.php?script_id=3252

再在 vim 的配置中加上:

vim
nmap ,, :FufCoverageFile <cr>

之后就可以通过快速输入两个逗号来打开文件查找功能了。

如果只想显示某几种类型的文件时,加上:

vim
let g:fuf_coveragefile_globPatterns = ['**/*.cpp', '**/*.h', '**/*.c', '**/*.py', '**/*.txt']

13. 输入特殊字符

  • <c-v>xx - xx 指的是数字,ascii 码
  • 超过 ascii 码的,xx 前面加个 u,表示是 unicode
  • <c-k>xx - 这里的 xx 就不一定是字母或数字等字符了,运行一下 :digraphs 就可以看到一个表

14. 特长行的处理

  • set wrap - 自动换行
  • set nowrap - 不换行

在一行超长的被自动换行的每一行中,要移动位置:

hjkl 四个键前面加上 g,表示在可视行上移动:

  • g^ 移动到当前可见行首
  • g$ 行尾
  • gm 移动到当前可见行的中间

15. 默认的 Marks(标记)

标记作用
\"`跳到上次在退出之前做的修改的那个位置
\[`上次变化或 p 粘贴的第一个字符
\]`上次变化或 p 粘贴的最后一个字符
'<'上次在可视 visual 模式下选中的第一行
'>'上次在可视 visual 模式下选中的最后一行
'.'上次修改的地方(位置比较确切,明确到列)
'^'在上次 insert 模式退出前的位置

16. r! 插入命令执行结果

:r! 用来插入某个命令执行的结果,如:

vim
:r! pwd

17. 替换文本

命令作用
rx替换当前光标所在的字符为 x
R从光标处开始替换,直到按下 esc 键
2s从光标处开始替换,把接下去的两个字符替换成任何你输入的文本
2S从光标所在的行开始替换,接下去的两行都会被替换成任何你输入的文本

18. 改变文本

命令作用
cc改变整行文本
C从光标处往后全部改变

改变文本和替换文本的差别在于,替换时,字符数是一样的。


原文作者:jsongo 原文地址:http://www.jsongo.com/post/draft/vi/2014/vim-advance/

分享: