如果对于 vim 不是一个完全的新手,大概能够发现大部分 vim 命令具有以下模式:<code>(command)(text object)</code>.对于更改命令(change)c ,command 部分就是指c,text object (文本对象) 则是光标移动命令(输入时不需要加上括号)。删除命令 d (delete)、复制命令y(yank) 同样适用这种形式。
fx ( forword to x or find x ): 移动光标到 当前行 的 下一个 x 处,x 表示任意单个字符,区分大小写。例:fa:移动光标到当前行的下一个字母a处。
Fx : 同上,区别在于方向相反,移动光标到当前行的上一个 x 处。
w ( word ) : 光标向前移动一个词。
b ( backword ): 光标向后移动一个词。
e ( end of word ) : 移动到字尾。
0 ( 数字0 ) : 移动光标到当前行首。
$ : 移动光标到行尾。
^ :移动光标到本行第一个非blank字符处。
g_ : 移动光标到本行最后一个非blank字符处。
):移动光标到下个句子。
(:移动光标到上个句子。
在整个文件 ( file ) 里有效的移动光标
< c-f > ( Ctrl+forward ): 向下移动整屏。
< c-b > ( Ctrl+backward ):向上移动整屏。
< c-d > ( Ctrl+down ) : 向下移动半屏。
< c-u > ( Ctrl+up ) : 向上移动半屏。
zz : 使光标所在的行成为屏幕的中间行。
<code>enter</code> : 使光标移动到下一行的第一个字符。
+ :同<code>enter</code>.
- : 使光标移动到上一行的第一个字符。
gg ( go ): 移动光标到文件首。
G :移动光标到文件尾。
numgg ( num go go ) : 移动光标到指定行即num行。num表示数字,比如 10gg 就是移动到第10行。等价于 numG/:num 。10gg/10G/:10 都是移动光标到第10行。
* : 读取光标处的字符串,并且移动光标到它再次出现的地方.
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。如果想要精确查找的话,不妨在text的前后加上空格。比如我想查找back,但是不想要诸如background之类的词出现,可以输入<code>:/ back </code>,而不是<code>/back</code>。
?text:和上面类似,但是反方向。
快速进入插入模式 ( insert mode )
i ( insert ):在当前字符的左边插入
I:在当前行首插入
a ( append ):在当前字符的右边插入
A:在当前行尾插入
o ( open ):在当前行下面插入一个新行
O:在当前行上面插入一个新行
c ( change ){motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d ( delete ){motion}:和上面差不多,但是不进入插入模式。
在可视模式 ( visual mode ) 下选中
在 visual mode 选中的内容会被高亮,可能经常会有以下几个操作。
d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
c:剪贴选择的内容到剪贴板并且进入插入模式。
在非可视选择模式下剪切和拷贝
d( delete ){motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词; dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。