这篇文章首发于我的博客,转载可注明出处。
Vim是从vi发展起来的一个超简洁的文本编辑器,全称为
Vi IMporved。使用vim可以实现全键盘操作,摆脱鼠标操作痛苦。
Vim简介
Vim的设计理念是命令的组合。在Vim中可以使用各种各样的组合命令来完成我们的编辑。模式是一个编辑器所必备的,几乎所有的编辑器都会有插入和执行两种模式,可以用键盘和鼠标完成模式的切换和命令的执行。Vim具有挺多种模式,常用的有普通模式、插入模式、可视模式和命令行模式。
其中Vim强大的编辑能力有很大一部分来源于它的普通模式,而普通模式的强大就在于命令的组合。在本文的后半部分我们将看到普通模式下的一些常用命令。
在正式开始盛宴之前,我们先来几条小小的约定。
1. 停顿时请移开画笔。
不同于其他编辑器将插入模式作为默认状态,普通模式才是Vim的默认状态。所以,只在编写代码的那几分钟内进入插入模式,其他时候请保持普通模式。
2. 告别esc,远离方向键。
Vim可以有两种方式实现普通模式和插入模式之间的切换,esc和<C-[>(就是Control+[),可两种方式都很难操作,esc太远,Control偏下,为此我们可以尝试调换Capslock和Control的位置,并将<C-[>作为默认切换方式。
方向键由于距离太远将会极大的减缓我们的操作效率,Vim中我们将用hjkl分表代表上下左右。
3. 强大的重复操作符.
之所以将它放在约定中,是因为使用重复操作会呈几何倍数的提高我们的效率。.命令可以重复修改上次的操作,它是Vim中最强大的多面手。
插入模式
前面提到大部分命令在普通模式下执行,不过有些功能在插入模式下可以更好的执行。
<C-a>跳转到当前行首<C-b>向前移动一个单词<C-d>减少缩进<C-h>删除前一个字符(同Backspace)<C-k>删除当前行光标后面的内容<C-w>删除前一个单词<C-u>删除至行首<C-t>增加缩进
这里只列出几个较常用的,更多可以查看:help insert-index,里面有很详细的命令解释,另外这些命令并不是Vim独有的,在shell中一样可以用。
普通模式
普通模式下我们可以执行大多数操作,并可以将操作符和动作命令结合起来实现强大的功能。还记得怎么进入普通模式吗?对了,就是<C-[>。
1. 移动和跳转
单行跳转
h左移一个字符j下移一个字符k上移一个字符l右移一个字符10h向下移动10行
单词跳转
w跳到下一个单词的词首e跳到下一个单词的词尾b跳到上一个单词的词首nw跳转到后面第n个单词
行内跳转
^跳到当前行的开头(忽视行首空格)0或|跳到当前行的开头(包括行首空格)$或 跳到当前行的行尾g _跳到当前行的行尾(不包括空格)f x跳到本行的下一个x处F x跳到本行的上一个x处;重复上一次跳转n|跳到当前行的第n列
文档内跳转
gg跳到文档第一行G跳到文档最后一行ngg或nG跳到文档的第n行+跳到下一行行首-跳到上一行行首
当前屏幕跳转
H移动到当前屏幕的顶端M移动到当前屏幕的中间L移动到当前屏幕的底端
移动当前行
zz移动当前行到中间zt移动当前行到屏幕顶端zb移动当前行到屏幕底端
2. 搜索和标记
文档内检索
/+xxx查找xxx*查找下一个光标所在的单词#查找上一个光标所在的单词n跳到下一个查找的单词N跳到上一个查找的单词:noh取消本次高亮
文档内标记
m x标记当前位置为x' x跳到标记为x的位置' '跳到跳转之前的位置
3. 即时执行操作
切换到插入模式
i插入到光标前a插入到光标后I插入到当前行的开始A插入到当前行的末尾o向下插入一行O向上插入一行
普通模式下编辑
r修改当前字符(改完后自动切换)R修改自光标起及之后的字符(需手动切换到普通模式)x删除当前字符X删除光标前的字符s删除当前字符并进入插入模式S删除当前行并进入插入模式c修改(一般用于合成命令)d剪切(一般用于合成命令)y复制(一般用于合成命令)dd删除当前行yy复制当前行p粘贴到当前行的下方P粘贴到当前行的上方~大小写反转
撤销和恢复撤销
u撤销上一步操作<C-r>恢复上一步操作
缩进
>增加缩进<减少缩进=自动缩进
可视模式
Vim的可视模式类似于其他编辑器按住鼠标拖动选择区域,却又有些许不同,在可视模式下可以使用普通模式的命令来操作。
激活可视模式
v激活面向字符的可视模式V激活面向行的可视模式<C-v>激活面向列的可视模式gv重选上次的高亮区域
切换可视模式
o在可视模式下可以切换选取的活动端
命令模式
在命令模式下我们可以为Vim开辟一块新天地。命令模式下,可以使用复杂的命令。在编辑模式下键入:,光标就跳到屏幕最后一行,并在那里显示冒号,此时已进入命令模式。这篇文章不过多介绍命令模式。
打开、保存和退出
:e test.txt在打开的vim中打开test.txt文件:w保存当前文件:q退出当前文件:w test2.txt另存文件为test2.txt(原文件依然存在):qall退出多个文件:q!强制退出当前文件(所做的修改将不会保存):wq保存并退出当前文件
分屏
:sp(lit)上下分屏:vsp(lit)左右分屏<C-w>+hjkl在不同屏之间切换
标签页
:tabnew新建标签页:tabnew filename在新标签页中打开文件:tabn(ext)跳到下一个标签页:tabN(ext)跳到上一个标签页:tabfir(st)跳到第一个标签页:tabl(ast)跳到最后一个标签页:tabo(nly)关闭除当前标签页以外的其他标签页
芳草有情皆碍马,好云无处不遮楼。编辑器加IDE成百上千,没有孰好孰坏,只要是对的便是最好的。学问,重在内功修炼。
5万+

被折叠的 条评论
为什么被折叠?



