Vim 快捷键

现在除了要做iOS开发外,还需要捣鼓Android开发和服务器开发,有一个统一的编辑器是最好的了

大学时自学linux时学过vi的一些基本操作,由于需要记忆的快捷键实在太多,只记住了几个基本的操作。后来一直从事iOS开发,也不可能用vim来开发,最近发现有个XVim的Xcode插件,准备重新学习下这个强大编辑器。

eclipse下的vim插件就比较多了,我现在用的是这个

Vrapper – http://vrapper.sourceforge.net/update-site/stable

AppCode 有自带的Vim插件,在偏好设置里的plugins里搜索ideaVim安装即可

 

vim的三种状态等基本概念就不再重复了,这里主要记录一些vim的快捷键

1、光标移动

基本的光标移动

h :左,或Backspace 或方向键。
j:下,或Enter 或+(要Shift 键),或方向键。
k:上,或方向键或-(不必Shift 键)。
l:右,或Space 或方向键。
Ctrl+f:即PageDown 翻页(Forward,向前、下翻页)。
Crtl+b:即PageUp 翻页(Backward,向后、上翻页)。
同样的,比如20h,就是光标向左移动20字符;20j,光标向下移动20字符;其他类似。

使用 hjkl
键的移动是为了使手不必离开打字区(键盘中央的部位),以加快打字的速度,如果各位不习惯,那就使用方向键吧!其实,一旦习惯了以后,对于编辑工作的效率
会有很大的帮助,而且有许多工作站的vi 只能使用hjkl 的移动方式,因此可能的话,尽量熟悉hjkl 的光标移动。

Backspace及Space的移动方式是到了行首或行尾时会折行,但方向键或hl 键的移动则在行首或行尾时您继续按也不会折行。转折换行的功能是Vim的扩充功能,elvis 无此功能。

jk 及使用方向键的上下移动光标会尽量保持在同一栏位。使用Enter,+,-的上下移动,光标会移至上(下)一行的第一个非空白字元处。

好像有点复杂,各位就暂时使用方向键来移动就简单明白了!等您爱上了Vim后再来讲究吧。

进阶的光标移动

0
是数目字0 而不是英文字母o。或是Home 键,移至行首,(含空白字元)。
^
移至行首第一个非空白字元,注意,要Shift 键。
$
移至行尾,或End 键。要 Shift 键。
G
移至档尾(全文最后一行的第一个非空白字元处)
gg
移至档首(全文第一行之第一个非空白字元处)。

在规则表示式(regular expression)中,^ 是匹配行首,$ 是匹配行尾。

gg 是Vim的扩充功能,在elvis 或原始vi 中可用1G 来移至档首(是数字1 不是英文字l )。 G 之原意是goto,指移至指定数目行之行首,如不指定数目,则预设是最后一行。
w
移至次一个字(word)字首。当然是指英文单字。
W
同上,但会忽略一些标点符号。
e
移至后一个字字尾。
E
同上,但会忽略一些标点符号。
b
移至前一个字字首。
B
同上,但会忽略一些标点符号。
H
移至屏幕顶第一个非空白字元。
M
移至屏幕中间第一个非空白字元。
L
移至屏幕底第一个非空白字元。这和PageDown,PageUp 不一样,内文内容并未动,只是光标在动而已。
n|
移至第n 个字元(栏)处。注意,要用 Shift 键。 n 是从头起算的。
:n
移至第n 行行首。或 nG。

特殊的移动

)
移至下一个句子(sentence)首。
(
移至上一个句子(sentence)首。 sentence(句子)是以 . ! ? 为区格。
}
移至下一个段落(paragraph)首。
{
移至上一个段落(paragraph)首。 paragraph(段落)是以空白行为区格。
%
这是匹配{},[],() 用的,例如光标在{ 上只要按%,就会跑到相匹配的} 上。

* 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

2、删除

x 删除当前光标下的字符
dw 删除光标之后的单词剩余部分。
d$ 删除光标之后的该行剩余部分。
dd 删除当前行。

c 功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc 也是删除当前行,然后进入INSERT MODE

3、选择

在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择。
其它相关命令:
v:按字符选择。经常使用的模式,所以亲自尝试一下它。

V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。

CTRL+v:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。

值得注意的是如果VIM中使用自动换行,那么直到你按ENTER换行前,VIM都会将你之前输入的内容视为一行而不是你看到的好几行,按块选择时就会按VIM中的行来选择块。

在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。

 

 

标记

Vim 允许你在文本中放置自定义的标记。命令 “ma” 用 a 标记当前的光标位置。你可以在文本中使用 26 个标记 (a 到 z)。这些标记是不可见的,只是一个由 Vim 记住的位置。

`{mark}要跳到一个你定义的标记所在行对应列(可以认为是你标记对应的光标位置),可以使用命令 `{mark},这里 {mark} 是指定义标记的那个字母。所以,移到标记 a 的命令是: `a

需要注意的是,以单引号开始的语法 ‘{mark}是跳转到标记所在行的行首.

在同一行多列间进行移动时使用 `{mark}(反引号)会非常有用哦,‘{mark}(单引号)就无能为力了

删除mark的命令是:delmarks + marknam

 

VIM最佳命令 如果你在用Vim,但是没充分使用如下的命令,说明你还没用好它。

I和 A 分别插入文本到行首或尾部。

m设置标记然后通过“`就可以跳回到此标记位置。 这对轻松在长篇文章中跳转非常有效。

g; 跳转到上次编辑位置。就是说“在去其他地方之前,先返回之前编辑的地方”。这非常有用。但这还不是全部–它追踪编辑历史以便可以复现前5此编辑。g,返回前一个编辑历史。

CTRL-] 跳转到鼠标所在函数的定义位置,CTRL-t跳回。CTRL-t可以使你会一直返回,直到返回到开始位置。(为了使其生效你需要一个标签文件。) 这几乎达到像eclipse这种IDE价值的一半,却没他们那样造成屏幕凌乱。

一个IDE的另外一半是长变量或者方法名的tab完成功能。在Vim中用CTRL-n和 CTRL-p 来预选列表中上滚和下滚。如果你使用的是标签文件或者如果你在Vim中其他文件定义了标签,它将对变量名和方法名自动完成。

gg=G跳转到文档顶部(gg) 自动缩进(=) 直到到达文档末尾 (G)。这使得你打开和关闭的大括号排成一行,很容易找到你忘记配对的大括号。

U撤销最后一个命令。CTRL-r重做。:earlier 2m 恢复到两分钟前的状态。如果你不再进行撤销,继续编辑然后想重做之前的一些改动,就可以考虑用这个命令。g+ 和g- 则在恢复树种上下切换。它变得更加复杂。

/和f 都是搜索命令,这两个命令在符合命令中起着至关重要的作用。df,从当前光标位置上的字符一直删除到遇到逗号(包括逗号)。d/foo 一直删除直到第一次匹配“foo”的位置。如果你喜欢,你可以用这来代替其他动作。

:r 读取一个文件。:!在shell中运行命令。:r! 粘贴命令的结果输出到文档中。:r!ls whatever*比输入文件名更快。在此我并不打算介绍UNIXy中怎样通过shell脚本运行文本。