Vim入门级技巧集

来源:百度文库 编辑:神马文学网 时间:2024/04/30 17:55:33

开场白

Vim是一个十分强大的文本编辑器,被誉为”编辑器之神”,熟练地使用Vim会使你处理文本、编辑代码的效率提升n个数量级!如果你现在还在使用gedit甚至是”记事本”的话,我奉劝你赶快把它扔到垃圾桶,马上开始你的Vim之旅。这里列出一些我经常使用的基本的Vim命令和技巧,Vim的使用是一个长期的学习、实践、再学习、再实践的过程。Here we go.

安装Vim/Gvim

如果你现在没使用过Vim/Gvim,你首先需要安装它们,当前的版本为7.2。Debian/Ubuntu下面,sudo apt-get install vim-gnome即可。其他系统也有相应的包管理程序来直接安装。对于Windows,你需要到Vim的官方网站来下载安装。安装时记得选中”设置Vim环境变量”的选项,这样你就可以直接在cmd下使用vim了。
在正式开始之前,最好在终端(cmd)里运行vimtutor,一步步按照提示操作,以对vim的操作有一个初步的了解。

快速的移动

别在总在插入模式里呆着

除了敲代码,不要总在插入模式里呆着,因为这样的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。
在整个文件域内高效地移动

  下面的一些命令可以让你在整个文件范围内移动,从而摆脱掉鼠标滚轮。

  • :向下滚动一屏。
  • :向上滚动一屏。
  • 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然后按下,Vim就会为你自动补全这个变量名,如果前面不止一个类似的变量()那么Vim会弹出一个列表供你选择,在这个列表中你可以用上下移动,空格会选择当前高亮的变量名。

选择适当的进入插入模式的方法

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

  按上述方法进入可视化模式后,你可以使用前面的移动命令在选取高亮区域,比如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:到达光标所在处函数或者变量的定义处。
  • :同上。
  • :返回操作前的位置。操作前的位置

键绑定

  发挥你想象力的时候到了。如你所见,Vim本身已经提供了大量的命令供你调遣,但不是所有的命令或者命令组合都适合所有的人。为此,Vim同学给了你根据个人习惯绑定命令的自由。vimrc中的一个简单的map命令即可做到,譬如

标示回车(Enter)
map ,w :w

  列出常用的一些特殊按键的代号,

  • , , or :回车;
  • :空格;
  • :Esc;
  • or :Ctrl + x;
  • :Alt + x;
  • :Meta + x;
  • , , , :方向键;
  • :Backspace;
  • :功能键F10;
  • :当前单词(类似a-b_c2);
  • :当前单词(不含空白符的字符串);
  • :当前单词为名的文件;
  • :Home,不是所有键盘都有的;
  • Last but not the least, 所有的字母键都以