一、基本快捷键
几点经验:
- 如果要将vim向vscode对齐,没有插件是做不到
- vim的插件要编写众多的配置文件、并且有部分插件挑平台;想要像vscode那样基本上开箱即用比较困难
- 刚开始学习还能折腾一下,到最后发现:vim最本质的是没有插件的本体。很多时候没有条件(或不想)配置插件,而能否熟练操作本体才是最关键的!
这篇文章将从四个方面:编辑、window、buffer、tabine,总结自己常用的vim自带的快捷键或指令。其中,后三个窗口相关的快捷键也比较相似,其设计思路和 tmux 是很相似的。
一、编辑:增删改查
目的:补充几个好用、但可能不常用的快捷键。
光标移动
%在匹配的括号对之间跳转。0和^都能实现移动到行首,区别在于^是移动到行首第一个字符。M将光标移动到屏幕中部,L为屏幕底部,H为屏幕顶部。ctrl-u, ctrl-d只会翻半页,ctrl-f, ctrl-b会翻一页;
增
a是在光标后插入,i是在光标前插入;A是在当前行最后插入,I是在当前行首插入;o为在下方插入一行并进入插入模式,O为上一行。q进入宏记录模式,输入字母会把记录的内容存到当前字母下,最后按q退出。
改
整行的格式调整:
<<, >>整行向左(右)缩进。>%, <%把{}, (), []包裹的内容向右(左)缩进。:le :ce :ri分别实现当前行居左、中、右对齐。
不用进入Insert模式、一些快速的修改:
~对当前光标字符进行大小写反转;u为撤销一次,U为撤销所有修改,<C-r>为反撤销。.: 修改完之后移动至下一个单词处,按.可重复相同操作。
比如
test test修改为st test,移动到第二个test处在normal下按点,则会重复相同的操作。
替换
替换操作的标准形式是::{作用范围}s/{目标}/{替换}/{替换标志}。
作用范围的不同:
:%s/foo/bar/g在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)。:s/foo/bar/g当前行。:'<,'>s/foo/bar/g选区,在Visual模式下选择区域后输入:,Vim 即可自动补全为:'<,'>。:5,12s/foo/bar/g5-12 行。:.,+2s/foo/bar/g当前行.与接下来两行+2。
替换标志的不同:
:s/foo/bar/g全局替换。:%s/foo/bar空替换标志表示只替换从光标位置开始,目标的第一次出现。:%s/foo/bar/i其中i表示大小写不敏感查找,I表示大小写敏感:%s/foo\c/bar使用i等效于模式中的\c(不敏感)或\C(敏感):%s/foo/bar/gcc表示需要确认。回车后 Vim 会将光标移动到每一次"foo"出现的位置,并提示replace with bar (y/n/a/q/l/^E/^Y)?
按下
y表示替换,n表示不替换,a表示替换所有,q表示退出查找模式,l表示替换当前位置并退出。^E与^Y是光标移动快捷键
查找和跳转
/word为向后全文搜索,?word为向前全文搜索;- 在当前单词上按
*为向后搜索当前光标所在单词,按#为向前搜索;
g;跳转到上次修改的位置,g,跳转到下次修改的位置。gd跳转到局部变量定义处(这类似于查找,和 ctags 是有区别的),gD为全局查找;:q为退出,而q:为:进入输入历史,相当于:history。
和替换类似,在查找模式中加入 \c 表示大小写不敏感查找,\C 表示大小写敏感查找。比如 /foo\c 将会查找所有的 "foo","FOO","Foo" 等字符串。
标记
标记是为了更好地查找,在normal模式下设置标记:
mxmeaning: mark x, x is the name of mark ;'xmeaning: go to the position of x mark
如果在函数中看到调用其他函数,你想去看怎么定义的,你看完之后要回来,那么先标记一下,然后在跳回来。
复制粘贴
p粘贴在当前光标位置之后,P粘贴在光标位置之前;
二、buffer
查看 buffer
当一次性打开多个文件 nvim test1.py test2.py test3.py 时,然后可以用 :ls 查看现有的缓冲区列表:

解释一下上图中的含义:
- 竖排的
1,2,3表示缓冲区编号,在当前 Vim 会话中,它的值保存不变 %表示该缓冲区位于当前窗口中,a表示该缓冲区处于活动状态,即它已经被加载可见;- 当切换缓冲区时会变成
#h,代表该缓冲区不在当前窗口中,为隐藏不活动状态; - 当我们正在编辑一个文件时,是无法切换缓冲区的!可以设置
set hidden允许切换,并由 vim 负责保存修改;
- 当切换缓冲区时会变成
xxx.py表示该缓冲区的文件名称;line XX表示当前窗口光标所在的行号;
buffer 管理
:b 配合关键字实现缓冲区之间的切换和管理:
- 后跟一个数字(缓冲区的编号),如
:b2表示切换到第 2 个缓冲区; - 后跟文件名的一部分切换缓冲区,如
:b test1; :bn代表下一个缓冲区,:bp为上一个缓冲区;:bd关闭当前缓冲区,无需退出 Vim ;
其实,直接在 vim 中调用终端,本质上也是个 buffer。
:shell会暂时退出 vim 界面到shell,使用完后输入exit退出;:terminal zsh默认会水平打开终端,退出需要先exit或<C-d>,然后关闭此buffer即可。
三、window
:sp [filename]上下分割文件,缺省文件名会 clone 当前文件,也可以使用<C-w>s快捷键。:vs为左右分割,同<C-w>v

浙公网安备 33010602011771号