VIm教程 转自http://imaginationy.blog.163.com/blog/static/183860373201171122027809/

这篇教程写了在不同工作模式下使用 VIM 的一些基本技巧——即插入模式(insert mode), 命令模式(command mode), 存取文件等。目的是帮助刚刚接触 VIM 的新手更加有效率的使用这个出色的编辑器。


说明:在这篇文章里面, 代表 Ctrl + X——就是按住 Ctrl 键然后再按 X。而且你可以在很多情况下使用 :help command 来获得大部分命令的帮助,这个是 VIM 的内部帮助文件命令。


高效率移动


在插入模式之外


基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样。很多新手都会一直呆在插入模式里面,因为这样易于使用。但 VIM 的强大之处在于他的命令行模式!你会发现,在你越来越了解 VIM 之后,你就会花越来越少的时间使用插入模式了。


使用 h、j、k、l


使用 VIM 高效率编辑的第一步,就是放弃使用箭头键。使用 VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你很多时间。当你在命令模式时,你可以用 h、j、k、l 来分别实现左、下、上、右箭头的功能。一开始可能需要适应一下,但一旦习惯这种方式,你就会发现这样操作的高效之处了。


在你编辑你的电子邮件或者其他有段落的文本时,你可能会发现使用方向键和你预期的效果不一样,有时候可能会一次跳过了很多行。这是因为你的段落在 VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g,这样 VIM 就会按屏幕上面的行如你所愿的移动了。


在当前行里面有效的移动光标


很多编辑器只提供了简单的命令来控制光标的移动(比如左、上、右、下、到行首/尾等)。VIM 则提供了很多强大的命令来满足你控制光标的欲望。当光标从一点移动到另外一点,在这两点之间的文本(包括这两个点)称作被“跨过”,这里的命令也被称作是 motion。(简单说明一下,后面会用到这个重要的概念)


这里是常用到的一些命令(motion):fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
Fx:和 fx 类似,不过是往回找。
w:光标往前移动一个词。
b:光标往后移动一个词。
0:移动光标到当前行首。
^:移动光标到当前行的第一个字母位置。
$:移动光标到行尾。
 ):移动光标到下一个句子。
 ( :移动光标到上一个句子。


在整个文件里面有效移动光标
VIM 有很多命令,可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令:


:向下移动一屏。


:向上移动一屏。


G:到文件尾


numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)


gg:到文件首


H:移动光标到屏幕上面


M:移动光标到屏幕中间


L:移动光标到屏幕下面


*:读取光标处的字符串,并且移动光标到它再次出现的地方。


#:和上面的类似,但是是往反方向寻找。


/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。


?text:和上面类似,但是是反方向。


ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。


 a:到书签 a 处。


       · :到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。




高效的输入
使用关键词自动完成


VIM 有一个非常漂亮的关键词自动完成系统。这表示,你可以输入一个长词的一部分,然后按一下某个键,然后 VIM 就替你完成了这个长词的输入了。举个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。


使用关键词自动完成功能,你只需要输入开始几个字母(比如 iAmAL),然后按 (按住 Ctrl,再按 N)或者 。如果 VIM 没有给出你想要的词,继续按,直到你满意为止,VIM 会一直循环它找到的匹配的字符串。


聪明的进入插入模式


很多新手进入插入模式都只是用 i。这样当然可以进入插入模式,但通常不是那么合适,因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些:


i:在当前字符的左边插入


I:在当前行首插入


a:在当前字符的右边插入


A:在当前行尾插入


o:在当前行下面插入一个新行


O:在当前行上面插入一个新行


c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。


d{motion}:和上面差不多,但是不进入插入模式。
 


在Vi 中移动光标


  k        上
       h   l    左  右
          j        下


^        移动到该行第一个非空格的字符处


w        向前移动一个单词,将符号或标点当作单词处理


W        向前移动一个单词,不把符号或标点当作单词处理


b        向后移动一个单词,把符号或标点当作单词处理


B        向后移动一个单词,不把符号或标点当作单词处理


(        光标移至句首


)        光标移至句尾


{        光标移至段落开头


}        光标移至段落结尾


H        光标移至屏幕顶行


M        光标移至屏幕中间行


L        光标移至屏幕最后行


0        到行首


$        到行尾


gg       到页首


G        到页末


行号+G   跳转到指定行


n+       光标下移n行


n-       光标上移n行


Ctrl+g   查询当前行信息和当前文件信息


fx       向右跳到本行字符x处(x可以是任何字符)


Fx       向左跳到本行字符x处(x可以是任何字符)


tx       和fx相同,区别是跳到字符x前


Tx       和Fx相同,区别是跳到字符x后


C-b      向上滚动一屏


C-f      向下滚动一屏


C-u      向上滚动半屏


C-d      向下滚动半屏


C-y      向上滚动一行


C-e      向下滚动一行


nz       将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。




进入和退出Vi命令


vi filename               打开或新建文件,并将光标置于第一行首


vi +n filename            打开文件,并将光标置于第n行首


vi + filename             打开文件,并将光标置于最后一行首


vi +/pattern filename     打开文件,并将光标置于第一个与pattern匹配的串处


vi -r filename            在上次正用vi编辑时发生系统崩溃,恢复filename


vi filename ... filename  打开多个文件,依次进行编辑


ZZ                        退出vi并保存


:q!                       退出vi,不保存


:wq                       退出vi并保存


重复操作


.        重复上一次操作
      自动补齐


C-n      匹配下一个关键字


C-p      匹配上一个关键字
    


插入


o        在光标下方新开一行并将光标置于新行行首,进入插入模式。


O        同上,在光标上方。


a        在光标之后进入插入模式。


A        同上,在光标之前。


R        进入替换模式,直到按下Esc


set xxx  设置XXX选项。
    


行合并


J        把下面一行合并到本行后面


Vi中查找及替换命令


/pattern         从光标开始处向文件尾搜索pattern


?pattern         从光标开始处向文件首搜索pattern


n                在同一方向重复上一次搜索命令


N                在反方向上重复上一次搜索命令


%                查找配对的括号


:s/p1/p2/g       将当前行中所有p1均用p2替代,若要每个替换都向用户询问则应该用gc选项


:n1,n2s/p1/p2/g  将第n1至n2行中所有p1均用p2替代


:g/p1/s//p2/g    将文件中所有p1均用p2替换


.*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"\"




查找的一些选项


设置高亮


:set hlsearch    设置高亮


:set nohlsearch  关闭高亮


:nohlsearch      关闭当前已经设置的高亮




增量查找


:set incsearch   设置增量查找


:set noincsearch 关闭增量查找




在Vi中删除


x        删除当前光标下的字符


dw       删除光标之后的单词剩余部分。


d$       删除光标之后的该行剩余部分。


dd       删除当前行。


c        功能和d相同,区别在于完成删除操作后进入INSERT MODE


cc       也是删除当前行,然后进入INSERT MODE


更改字符


rx       将当前光标下的字符更改为x(x为任意字符)


~        更改当前光标下的字符的大小写


键盘宏操作


qcharacter  开始录制宏,character为a到z的任意字符


q           终止录制宏


@character  调用先前录制的宏


恢复误操作


u        撤销最后执行的命令


U        修正之前对该行的操作


Ctrl+R   Redo


在Vi中操作Frame


c-w c-n  增加frame


c-w c-c  减少frame


c-w c-w  切换frame


c-w c-r  交换两个frame


VIM中的块操作


Vim支持多达26个剪贴板


  选块   先用v,C-v,V选择一块,然后用y复制,再用p粘贴。


  yy     复制当前整行


  nyy    复制当前行开始的n行内容


  ?nyy   将光标当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字


  ?nyw   将光标当前行及其下n个词保存到寄存器?中,其中?为一个字母,n为一个数字


  ?nyl   将光标当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字


  ?p     将寄存器?中的内容粘贴到光标位置之后。如果?是用yy复制的完整行,则粘贴在光标所在行下面。这里?可以是一个字母,也可以是一个数字


  ?P     将寄存器a中的内容粘贴到光标位置之前。如果?是用yy复制的完整行,则粘贴在光标所在行上面。这里?可以是一个字母,也可以是一个数字


  ay[motion]


 ay$    复制光标位置到行末并保存在寄存器a中


ayft   复制光标位置到当前行第一个字母t并保存在寄存器a中以上指令皆可去掉a工作,则y,p对未命名寄存器工作(所有d,c,x,y的对象都被保存在这里)。


剪切/复制/粘贴


所有删除的内容自动被保存,可以用p键粘贴


Vi的选项设置


all         列出所有选项设置情况


term        设置终端类型


ignorance   在搜索中忽略大小写


list        显示制表位(Ctrl+I)和行尾标志($)


number      显示行号


report      显示由面向行的命令修改过的数目


terse       显示简短的警告信息


warn        在转到别的文件时若没保存当前文件则显示NO write信息


nomagic     允许在搜索模式中,使用前面不带“\”的特殊字符


nowrapscan  禁止vi在搜索到达文件两端,又从另一端开始


mesg        允许vi显示其他用户用write写到自己终端上的信息


对代码自动格式化 gg=G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值