fx | 在当前行向前移动光标到下一个字符x (很明显, x可以是任意你想要移动到的字符). 这是一个超级有用的命令. 你可以输入;来重复前一个f命令. |
tx | 和上面的命令基本相同, 除了移动光标到字符x之前而不是x字符本身. (这个真的很有用) |
Fx | 在当前行向后移动光标到上一个字符x. |
w | 将光标向前移动一个词. |
b | 将光标向后移动一个词. |
0 | 将光标移动到当前行首. |
^ | 将光标移动到当前行的第一个字符. (译注: 第一个字符可能不是行首, 比如行首有space, tab等不可见符号, 0会把光标停在这些符号之前, 而^会把光标停在这些符号之后的第一个可见字符.) |
$ | 将光标移动到当前行尾. |
) | 将光标移动到下一个句子. (写电子邮件或者文本文档的时候很有用.) |
( | 将光标移动到上一个句子. |
<C-F> | 将光标向前(下)移动一页(屏幕). |
<C-B> | 将光标向后(上)移动一页. |
G | 移动到文件尾 |
numG | 将光标移动到某一行. (例如, 10G是把光标移动到第10行.) |
gg | 将光标移动到文件开头 |
H | 将光标移动到当前页的第一行. |
M | 将光标移动到当前页的中间一行. |
L | 将光标移动到当前页的最后一行. (译注: 有了HML3个命令, 可以把鼠标撇了, 爽) |
* | 读取光标下的字串, 然后移动到当前文件中下一次出现该字串的位置. (比如说如果你的光标所在的位置的字串为"bob,", 按了*之后, 光标将移动文件中下一个"bob"出现的位置.) |
# | 和*命令基本相同, 除了它移动到上一次出现字串的位置. |
/text | 从当前光标位置开始, 查找下一个含有text的字串并且移动到那里. 需要按回车(Enter)键来执行查找. 如果要重复执行查找, 输入n(n代表next occurance). (译注: text指你想搜索的字串, 比如你要在文件查找字串"abc", 就输入/abc然后回车) |
?text | 和/text相似, 区别是?text进行反向查找(查找上一个字串). |
ma | 给当前光标所在位置设置一个名字为a的书签. 书签的名字可以是任何小写字母. 你看不到书签, 但它确实在. |
`a | 移动光标到书签a. 注意`不是单引号, 大部分键盘上它在数字1的左面. (译注: 本人使用的vim 7.1 windows版本用单引号也能完成同样功能) |
`. | 移动到你之前编辑过的行. 这个又是"真有用". 如果你需要在文件中"滚来滚去"查看一些东西, 你可以用这个命令回到你之前编辑的行尽管你没把它设成书签. |
i | 在当前字符的左侧开始插入. |
I | 在当前行行首开始插入. |
a | 在当前字符的右侧开始插入. |
A | 在当前行行尾开始插入. |
o | 在当前行的下一行开始新的一行并在那插入. (译注, 写code用这个很爽) |
O | 在当前行的上一行开始新的一行并在那插入. |
c{motion} | 删除(change)motion"掠过"的文本然后插入新文本代替它. 比如说, c$会删除当前光标位置到当前行尾的文本并开始插入模式. ct!会删除当前光标位置到下一个!出现位置(不包括!本身)之间的文本并进入插入模式. 删除的文本会被复制到剪切板可以被粘贴使用. (译注: 可以到前面复习一下"掠过"的概念, 参考例子. 输入c{motion}命令的时候, 不需要输入花括号) |
d{motion} | 删除motion"掠过"的文本 -- 和c{motion}相似, 但是不进入插入模式. |
v | 字符选中模式. 大部分人习惯用这个, 所以玩其他模式之前先把这个练熟. |
V | 行选中模式. 选中整行. 当你需要复制或移动几行的时候, 这个比字符选中模式要好. |
<C-V> | 块选中模式. 超级nb而且很少有其他的编辑器支持(译注: 还是有一些支持的, 比如ultraedit, 但是得付钱...). 你可以在任何文本中选择一个矩形块来操作. (译注: 在windows版本的vim中<C-V>默认被映射为粘贴, 可以通过更改键盘映射或者使用<C-Q>来进行块操作) |
d | 剪切(删除)高亮选中的文本到剪切板. (译注: 据本人所知, vim所有的删除其实都是剪切) |
y | 复制 (或者说"拽"(yank), vim用"拽"来表示复制...)高亮选中的文本到剪切板. |
c | 剪切高亮选中的文本到剪切板. 和d很相似, 只是c会进入插入模式. |
d{motion} | 把由motion"掠过"的文本剪切到剪切板. 比如dw把当前光标开始的一个词剪切到剪切板, 而dfS把从当前行从光标是到下一个S之间的文本剪切到剪切板. |
y{motion} | 把motion"掠过"的文本复制到剪切板. |
c{motion} | 把motion"掠过"的文本剪切到剪切板并且进入插入模式. |
dd | 剪切当前行到剪切板. |
yy | 复制当前行到剪切板. |
cc | 剪切当前行到剪切板并且进入插入模式. |
D | 剪切光标当前位置到行尾的文本到剪切板. |
Y | 复制整行到剪切板, 和yy相似. (yes, 这个命令和命令D的操作方式没保持一致, 你可以用y$完成类似D的操作) |
C | 剪切光标当前位置到行尾的文本到剪切板并进入插入模式. |
x | 剪切当前字符. (类似于命令模式的退格(backspace)键) |
s | 剪切当前字符并进入插入模式. |
qregister | 开始录制一个宏并保存在某个有名字的寄存器. 比如qa开始录制一个宏并把这个宏存放在寄存器a中. |
q | 结束录制 |
@register | 回放存放在某个寄存器的宏. 比如@a播放寄存器a中的宏. |
]p | 和p相似, 但是它可以自动调整粘贴的代码和已有的代码缩进. 试试吧. |
% | 把光标放在某个花括号{}, 中括号[]或者圆括号()上, 按%会把光标移动到与之对应的花括号, 中括号或者圆括号上. 对于修正多层嵌套逻辑代码块的括号解析问题来说, 这个功能堪称救人于水火之中. |
>> | 缩进高亮选中的代码. (对高亮选中请查看前面章节, 如果没有文本被高亮选中, 则将当前行缩进) |
<< | 和>>类似, 但是反方向(译注: 缩进是向右移动行, 反方向既向左移动). |
gd | 把光标移动到当前光标所在位置的函数或者变量的定义(definition)(或声明(declaration)). |
K | 打开当前光标所在词对应的手册页(man page). (比如你的光标当前在sleep这个词上, vim会显示sleep的手册页) (译注: 这个功能貌似只对vim的原生OS--unix上有用) |