VIM使用技巧

快速的移动
别在总在插入模式里呆着 程序员

除了敲代码,不要总在插入模式里呆着,由于这样的Vim就和诸如gedit等普通的编辑器就没什么区别了。这就是为何一些新手老是在插入模式的原 因了,”好用”或者说”友好”。可是,Vim真正的威力却在于其命令模式,你将会发现,随着你对Vim的了解和熟练,你用插入模式的时间会愈来愈少。
使用h, j, k, l 正则表达式

为了有效的编辑文件,你首先应该作的就是戒掉那些个方向键 ←↓↑→,代以h, j, k, l,即左、下、上、右。这样的好处是很明显的,你的手不用再不停地在字母键和方向键之间来回挪动了,这会为你节省至关可观的时间,但或许你须要必定的时间来适应这种转变。
在使用中你可能会遇到这样的文件,每一行(这里行以\n, \r标识)的文字都很长,以致于须要用视觉上的多行来显示,这时候使用j或者k会跳过若干行,以致于你不得不使用h或者l来在行内移动。固然,你能够不这么作,方法就是在j, k前面加g便可在视觉行间移动。
使用motion在当前行内高效地移动 vim

许多其余的编辑器仅仅提供少许的命令来移动光标(左,上,右,下,行首/末等等)。Vim有不少强大的命令来高效地移动,它们被成为motion,motion都一般都有一个开始点(一般就是当前光标处)和一个目标点。下面列出一些有用的motion:
fx :向右移动至字母x在当前行内下一次出现的位置f指forward,x能够是任一个字母。你还能够用;来重复执行刚才的fx操做,这两个命令的结合是极其有用的。
tx :同fx,区别在于光标会停留到x的右侧。
Fx :同fx,只是向左移动。
w :向右移动一个单词,光标停留在下一个单词的首字母,一样地,b向左移动。相似的还有一个命令e也是想右移动一个单词,只是光标会停留在单词的末尾。
0 :移动到行首,注意:这是零而不是O!
$ :移动到行末。
^ :移动到当前行的第一个字符。
( :移动到下一个句子。
) :移动到上一个句子。注:这两个命令在编写代码是较少用到,但在编辑普通的文本文章时比较有用。
zz、z.、z-、zt:重画当前屏幕,使当前行显示在屏幕的中间、中间、底部、顶部,具体请:help cmd。
在整个文件域内高效地移动 浏览器

下面的一些命令可让你在整个文件范围内移动,从而摆脱掉鼠标滚轮。
<C-f> :向下滚动一屏。
<C-b> :向上滚动一屏。
G :即<S-g>,移动到文件末尾。
nG :移动到第n行。注:几乎全部可重复性操做均可以使用前缀数字执行n次。
gg :移动到文件开头。
H :移动到屏幕的最上方。
M :移动到屏幕正中间。
L :移动到屏幕最下方。
* :这个命令比较强大,它记录当前光标处的单词,并移动到该单词下次出现的位置。
# :和*相同,但方向相反。
g* and g#:同上,但匹配包含当前单词的单词,而不是彻底匹配。
/pattern :向下查找模式pattern指定的字符串,pattern能够是一个正则表达式,固然也能够仅仅是一个单词。
?pattern :同上,但方向相反。
mb :在当前光标处设定一个书签bookmark,虽然你看不到,但它确实存在。注:此处b能够是任何一个字母或者数字。
`b :即ESC下面的”反引号”,移动到一个已经设定的书签处b。注:是`而不是’,不过’也是能够的,但只能移动到书签b所在的行,你能够根据本身的须要来使用。
`. :这个更牛叉,能够移动到你最近一次修改过的地方。
高效地输入
关键字自动补全 编辑器

Vim还有关键字自动补全的功能,这意味着:若是你已经定义了一个很长的变量,好比iAmALongLongVariableName,下次就 没必要在这个名字再完整地敲一遍,而只须要输入iAmA而后按下<C-n>,Vim就会为你自动补全这个变量名,若是前面不止一个相似的变量 ()那么Vim会弹出一个列表供你选择,在这个列表中你能够用<C-p>和<C-n>上下移动,空格会选择当前高亮的变量名。
选择适当的进入插入模式的方法 ide

不少新手,老是先移动至指定位置,而后再用i进入到插入模式。这确实可以达到目的,但有时却并不合适。好比你如今在行末,须要在行首插入,若是一顿h或者聪明点的用nh或者nb,始终仍是不够高效。下面有几个命令可供使用:
i :在当前光标左侧插入。
I(大小i) :在行首插入。
a :在当前光标右侧插入。
A :在行末插入。
o :在当前行下面新建一行并进入插入模式。
O :同o,但在当前行的上面新建一行。
c{motion} :删除和移动的复合,其中motion是上文中提到过的。好比cfx,会从当前光标处开始删除至字母x(不包括x)并进入插入模式。被删除的字符被保存到剪切板,能够被稍候粘贴到其余地方。
d{motion} :同上,当并不进入插入模式。
高效地移动文本块
可视化选择 函数

不一样于Vim的前身vi,Vim容许你高亮(即Visual可视化模式)某个文本块并对它执行某些操做。选择文本块的方式有三种:
v 进入可视化模式,此时可使用前面的移动命令在选取高亮区域。
V 进入行可视化模式,按行选择,即正行地选择。
<C-V> 这个颇有特点,它能够容许你在文本的任意地方选出一块矩形区域!固然,前提是那里确实有字符,不多有编辑器有这个功能。 spa

按上述方法进入可视化模式后,你可使用前面的移动命令在选取高亮区域,好比vwww会高亮接下来的三个单词,vjj会选择下面的两行,etc.
剪切和复制
d :剪切,即删除并放入剪切板。
y :复制。
c :同d,但还会进入插入模式。
d{motion} :和c{motion}相似。
dd :剪切当前行。
yy :复制当前行。
cc :修改当前行。
D :剪切至行尾。
Y :同yy。
C :相似D。
x:剪切光标处字符。
s :同x,但进入插入模式。
p :粘贴。
n”+yy :这个稍显复杂,它从当前行开始向下复制n行,但和nyy不一样的是,文本会被复制到系统剪切板,而不是Vim的剪切板,这样你就能在其余程序好比浏览器中进行Ctrl+V。
”+p :从系统剪切板粘贴。
d’a, y’a:剪切和复制从当前到书签a之间各行。
”+y’a:这个看起来有些复杂,它是前面几个命令的整合,和上一个命令功能相同,只是将当前行至书签a所在行复制到系统剪切板。
”+ynumG:从当前行一直复制到第num行,相比上面的,这个选择性更大一点。
减小重复性操做
使用. 设计

好吧,我为它单独开了一个章节,.功能实用使用简单,但使用频率却十分的高。一个.能够重复你刚刚执行过的编辑操做,好比删除、粘贴等。
使用宏记录 字符串

有时候,你会发现你本身在文章的每段或者每行都重复相同的一系列动做。VIM 容许你记录一个宏来完成你的特殊须要。
qregister:记录宏到寄存器 register,这里 register 是任意的你的寄存器的名字。好比 qa,将会记录而且把宏存在寄存器 a 里面。
q:结束宏的记录。
@register:使用存在寄存器 register 的宏。好比 @a,将会使用存在寄存器 a 里面的宏。
写代码的时候

VIM 是一个用来写代码的绝好编辑器,由于它有一些特性是专门为程序员而设计的。这里是一些经常使用的基本命令:
]p:和 p 的功能差很少,可是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。试一下!
%:匹配花括号、方括号、括号等。在一个括号的上面,而后按 %,鼠标就会出如今匹配的另一半括号处。
[{:光标移动至当前块(block)起始处,即上文最近的一个{处。再次[{移动到当前块所在的块起始处。
]}:同上,移动至块末尾。
[/:用于注释块(comment block)中,移动至块起始。
]/:移动至注释块末尾。
?:缩进全部选择的代码
?:和上面相似,可是反缩进
gd:到达光标所在处函数或者变量的定义处。
<C-]>:同上。
<C-o>:返回<C-]>操做前的位置。操做前的位置
键绑定

发挥你想象力的时候到了。如你所见,Vim自己已经提供了大量的命令供你调遣,但不是全部的命令或者命令组合都适合全部的人。为此,Vim同窗给了你根据我的习惯绑定命令的自由。vimrc中的一个简单的map命令便可作到,譬如“ <cr>标示回车(Enter)
map ,w :w<cr>

列出经常使用的一些特殊按键的代号, <cr>, <Cr>, or <CR>:回车; <Space>:空格; <Esc>:Esc; <c-x> or <C-x>:Ctrl + x; <a-x>:Alt + x; <m-x>:Meta + x; <Left>, <Right>, <Up>, <Down>:方向键; <BS>:Backspace; <F10>:功能键F10; <cword>:当前单词(相似a-b_c2); <cWORD>:当前单词(不含空白符的字符串); <cfile>:当前单词为名的文件; <Home>:Home,不是全部键盘都有的; Last but not the least, 全部的字母键都以