欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

VIM使用技巧

最编程 2024-08-03 21:31:37
...

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

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

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

许多其他的编辑器仅仅提供少量的命令来移动光标(左,上,右,下,行首/末等等)。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>上下移动,空格会选择当前高亮的变量名。
选择适当的进入插入模式的方法

很多新手,总是先移动至指定位置,然后再用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> 这个很有特色,它可以允许你在文本的任意地方选出一块矩形区域!当然,前提是那里确实有字符,很少有编辑器有这个功能。

按上述方法进入可视化模式后,你可以使用前面的移动命令在选取高亮区域,比如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, 所有的字母键都以