Vim基础操作指南
vim是一款多模态编辑器,使用不同模式实现在TUI中对代码的全键盘操作。
vim主要有3中基本模式(实际上有多达15种模式):normal,insert,command,在vim界面中的左下角会显示当前所处的模式。
normal模式
这个模式主要用于浏览和简单修改代码。
移动
- 使用
j/k上下移动光标,使用h/l左右移动光标。 SHIFT-[/]移动到下一个块,也就是移动到下一个空行CTRL-D/U,向下/上翻半页CTRL-F/B,翻页gg/G,到顶/底w/e,下一个单词词头/词尾,W/E是忽略符号的相同操作,也就是不解析符号和单词,只要不是空格隔开的都当作一个单词来看b前一个单词词头,B同上0/^/$,分别位行首,非空行首,也就是除了空白字符的首个字符位置,行尾H/L光标移动到终端上/下zz光标所在行居中/进入搜索模式,输入字符进行搜索,\v进入使用正则表达式,\zs搜索开始位置,\ze搜索结束位置*搜索光标所在单词,##反向搜索光标所在单词,n跳转到下一个匹配位置,N跳转到上一个匹配位置.重复上一次操作
编辑
normal模式可以在不进入insert模式下可以进行一定程度的编辑。
这些都是一些动词,需要搭配目标比如w(word)才能作为一个动作,动词的重复常常是对行操作,例如dd删除当前行
w删除,dw删除一个单词,dgg删除从光标到文章起始位置,dd删除当前行,W删除从光标到行尾y复制,yy复制当前行(作为行被粘贴),Y复制当前行(作为单词被粘贴),也就是Y复制的行可以直接粘贴在光标位置,可以指定复制的寄存器p粘贴寄存器中的值到寄存器后面或者下面,P粘贴寄存器中的值到光标前面或上面,还可以使用"指定寄存器x删除光标下的字符,X删除光标前的字符mc标记当前位置为c,使用来快速访问s替换光标下的字符,S替换光标所在行r替换光标下的字符,R持续替换模式,知道按esc退出f查找下一个字符,F查找上一个字符,t查找下一个字符前,T查找上一个字符前,;重复上一次查找,,反向重复上一次查找u撤销,U无论你在这一行改了多少处(比如删了词、改了字母),只要你没离开这一行,按一下 U 就会恢复这行的初始样貌,Ctrl+r撤销刚刚的撤销s替换光标下的字符,S替换光标所在行c修改,cw修改一个单词,c$修改到行尾,cc修改当前行,C修改到行尾ctrl-a/z增加/减少光标后的第一个数字gt跳转到下一个标签页,gT跳转到上一个标签页gc注释,gcc注释当前行<缩进当前行,>取消缩进当前行>>缩进当前行,<<取消缩进当前行
插入模式
i插入光标前,a插入光标后,o插入光标所在行下,O插入光标所在行上I插入光标所在行首,A插入光标所在行尾,O插入光标所在行上r替换光标下的字符,R持续替换模式,知道按esc退出f查找下一个字符,F查找上一个字符,t查找下一个字符前,T查找上一个字符前,;重复上一次查找,,反向重复上一次查找u撤销,U无论你在这一行改了多少处(比如删了词、改了字母),只要你没离开这一行,按一下 U 就会恢复这行的初始样貌,Ctrl+r撤销刚刚的撤销s替换光标下的字符,S替换光标所在行c修改,cw修改一个单词,c$修改到行尾,cc修改当前行,C修改到行尾
插入模式
i插入光标前,a插入光标后,o插入光标所在行下,O插入光标所在行上I插入光标所在行首,A插入光标所在行尾,O插入光标所在行上s替换光标下的字符进入插入模式,S替换光标所在行,进入插入模式- 在插入模式下
CTRL-r,插入寄存器中的内容
visual模式
v进入visual模式,V进入visual行模式,Ctrl+v进入visual块模式
command 模式
使用:进入command模式,command模式继承自ed编辑器,所有操作几乎都可以使用command操作实现,还可以暂时修改配置。
下面讲一些常见命令
:q退出vim:w保存文件,:wq保存并退出- 命令后加
!强制执行命令,比如!q强制退出vim :set修改配置,比如:set number显示行号,:set nonumber取消行号d/y/p/....复制/剪切/粘贴,在命令前推荐范围,常见范围如下:.当前行n当前行开始的n行$当前行到行尾0当前行到行首.,$当前行开始的n行到行尾0,.当前行开始的n行到行首n,m当前行开始的n行到m行%当前文件所有行.+n,.-n当前行开始的n行到当前行结束的n行
r + filename读取文件内容到当前行:e filename读取文件内容到当前行,覆盖当前文件内容:n跳转到第n行:tabe filename打开一个新文件到新标签页:tabclose关闭当前标签页:tabnext切换到下一个标签页:tabprevious切换到上一个标签页:only关闭所有标签页,只保留当前标签页:[range]s/old/new/g替换全文的old为new,最后的标志可以是g全局,c每个确认,i忽略大小写,range默认当前行:[range]g/paterm/cmd对范围内匹配的字符串执行cmd,range默认全局,vg反向选择
寄存器
"默认寄存器,删除,复制都会默认把内容放入这个寄存器0复制寄存器,只保留上一次复制的内容.插入寄存器:命令寄存器/搜索寄存器_黑洞寄存器a-z永久寄存器,可以用来保存数据或者是宏
常用组合命令
vim的命令常常是可以组合可以,几乎是只有想不到没有做不到,下面列举一些常用组合:
ci"修改引号内的内容daw删除单词,不考虑光标所在单词什么位置dw"p,给单词添加引号xp交换光标前后字符- 使用可视模式选中代码,使用
:!python3执行外部代码,并且把结果写入刚刚选中的位置 gg=G格式化全文VggG选中全文,可以用来复制:%d删除全文qa录制宏保存到寄存器a,@a回放宏