Vim基础操作指南

Vim基础操作指南

vim是一款多模态编辑器,使用不同模式实现在TUI中对代码的全键盘操作。
vim主要有3中基本模式(实际上有多达15种模式):normal,insert,command,在vim界面中的左下角会显示当前所处的模式。

normal模式

这个模式主要用于浏览和简单修改代码。

移动

  1. 使用j/k上下移动光标,使用h/l左右移动光标。
  2. SHIFT-[/]移动到下一个块,也就是移动到下一个空行
  3. CTRL-D/U,向下/上翻半页
  4. CTRL-F/B,翻页
  5. gg/G,到顶/底
  6. w/e,下一个单词词头/词尾,W/E是忽略符号的相同操作,也就是不解析符号和单词,只要不是空格隔开的都当作一个单词来看
  7. b前一个单词词头,B同上
  8. 0/^/$,分别位行首,非空行首,也就是除了空白字符的首个字符位置,行尾
  9. H/L光标移动到终端上/下
  10. zz光标所在行居中
  11. /进入搜索模式,输入字符进行搜索, \v进入使用正则表达式,\zs搜索开始位置, \ze搜索结束位置
  12. *搜索光标所在单词,##反向搜索光标所在单词, n跳转到下一个匹配位置,N跳转到上一个匹配位置
  13. .重复上一次操作

编辑

normal模式可以在不进入insert模式下可以进行一定程度的编辑。
这些都是一些动词,需要搭配目标比如w(word)才能作为一个动作,动词的重复常常是对行操作,例如dd删除当前行

  1. w删除,dw删除一个单词,dgg删除从光标到文章起始位置,dd删除当前行,W删除从光标到行尾
  2. y复制,yy复制当前行(作为行被粘贴),Y复制当前行(作为单词被粘贴),也就是Y复制的行可以直接粘贴在光标位置,可以指定复制的寄存器
  3. p粘贴寄存器中的值到寄存器后面或者下面,P粘贴寄存器中的值到光标前面或上面,还可以使用"指定寄存器
  4. x删除光标下的字符,X删除光标前的字符
  5. mc标记当前位置为c,使用来快速访问
  6. s替换光标下的字符,S替换光标所在行
  7. r替换光标下的字符,R持续替换模式,知道按esc退出
  8. f查找下一个字符,F查找上一个字符,t查找下一个字符前,T查找上一个字符前,;重复上一次查找,,反向重复上一次查找
  9. u撤销,U无论你在这一行改了多少处(比如删了词、改了字母),只要你没离开这一行,按一下 U 就会恢复这行的初始样貌,Ctrl+r撤销刚刚的撤销
  10. s替换光标下的字符,S替换光标所在行
  11. c修改,cw修改一个单词,c$修改到行尾,cc修改当前行,C修改到行尾
  12. ctrl-a/z增加/减少光标后的第一个数字
  13. gt跳转到下一个标签页, gT跳转到上一个标签页
  14. gc注释, gcc注释当前行
  15. <缩进当前行,>取消缩进当前行
  16. >>缩进当前行,<<取消缩进当前行

插入模式

  1. i插入光标前,a插入光标后,o插入光标所在行下,O插入光标所在行上
  2. I插入光标所在行首,A插入光标所在行尾,O插入光标所在行上
  3. r替换光标下的字符,R持续替换模式,知道按esc退出
  4. f查找下一个字符,F查找上一个字符,t查找下一个字符前,T查找上一个字符前,;重复上一次查找,,反向重复上一次查找
  5. u撤销,U无论你在这一行改了多少处(比如删了词、改了字母),只要你没离开这一行,按一下 U 就会恢复这行的初始样貌,Ctrl+r撤销刚刚的撤销
  6. s替换光标下的字符,S替换光标所在行
  7. c修改,cw修改一个单词,c$修改到行尾,cc修改当前行,C修改到行尾

插入模式

  1. i插入光标前,a插入光标后,o插入光标所在行下,O插入光标所在行上
  2. I插入光标所在行首,A插入光标所在行尾,O插入光标所在行上
  3. s替换光标下的字符进入插入模式,S替换光标所在行,进入插入模式
  4. 在插入模式下CTRL-r,插入寄存器中的内容

visual模式

  1. v进入visual模式,V进入visual行模式,Ctrl+v进入visual块模式

command 模式

使用:进入command模式,command模式继承自ed编辑器,所有操作几乎都可以使用command操作实现,还可以暂时修改配置。
下面讲一些常见命令

  1. :q退出vim
  2. :w保存文件, :wq保存并退出
  3. 命令后加!强制执行命令,比如!q强制退出vim
  4. :set修改配置,比如:set number显示行号,:set nonumber取消行号
  5. d/y/p/....复制/剪切/粘贴,在命令前推荐范围,常见范围如下:
    • .当前行
    • n当前行开始的n行
    • $当前行到行尾
    • 0当前行到行首
    • .,$当前行开始的n行到行尾
    • 0,.当前行开始的n行到行首
    • n,m当前行开始的n行到m行
    • %当前文件所有行
    • .+n, .-n当前行开始的n行到当前行结束的n行
  6. r + filename读取文件内容到当前行
  7. :e filename读取文件内容到当前行,覆盖当前文件内容
  8. :n跳转到第n行
  9. :tabe filename打开一个新文件到新标签页
  10. :tabclose关闭当前标签页
  11. :tabnext切换到下一个标签页
  12. :tabprevious切换到上一个标签页
  13. :only关闭所有标签页,只保留当前标签页
  14. :[range]s/old/new/g替换全文的old为new,最后的标志可以是g全局,c每个确认,i忽略大小写,range默认当前行
  15. :[range]g/paterm/cmd对范围内匹配的字符串执行cmd,range默认全局,vg反向选择

寄存器

  1. "默认寄存器,删除,复制都会默认把内容放入这个寄存器
  2. 0复制寄存器,只保留上一次复制的内容
  3. .插入寄存器
  4. :命令寄存器
  5. /搜索寄存器
  6. _黑洞寄存器
  7. a-z永久寄存器,可以用来保存数据或者是宏

常用组合命令

vim的命令常常是可以组合可以,几乎是只有想不到没有做不到,下面列举一些常用组合:

  1. ci"修改引号内的内容
  2. daw删除单词,不考虑光标所在单词什么位置
  3. dw"p,给单词添加引号
  4. xp交换光标前后字符
  5. 使用可视模式选中代码,使用:!python3执行外部代码,并且把结果写入刚刚选中的位置
  6. gg=G格式化全文
  7. VggG选中全文,可以用来复制
  8. :%d删除全文
  9. qa录制宏保存到寄存器a,@a回放宏