Chinaunix首页 | 论坛 | 博客
  • 博客访问: 245862
  • 博文数量: 78
  • 博客积分: 2956
  • 博客等级: 少校
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-12 15:13
文章分类

全部博文(78)

文章存档

2012年(11)

2011年(27)

2008年(30)

2007年(10)

分类:

2008-01-04 16:26:05

VIM--高效编辑器

郑重声明:本人翻译此文意在学习--学习vim,以及练习英语读写能力。

原文地址:

Geoffrey Bachelet将这篇文章翻译成了法语发表在http://fashion.hosmoz.net/blog/2004/05/08/150-ledition-efficace-avec-vim。可以去上面的网址查看法语版。

现在你看的是Perfy Yang翻译的中文版,在Linux下编写程序时,并不怎么乐意用IDE环境,我安装的是Anjuta,也用过Kdevelop,这些编译器使用的不够方便,每次都要花很长时间建立工程(虽然有时只想写个单文件程序),还会占用大量内存,不太明智。于是我用了kate,与vim相比kate没有完善的命令体系,只相当与vim的插入模式,kate的优点在于他对C,C++...等多种语言关键字有丰富的颜色显示,且可以方便的进入console进行编译,运行。网络上职业编程人员普遍对vim有很高的评价,于是我注意到了vim,开始我完全没有勇气来使用他,他的命令多的有点吓人,在这篇文章的翻译过程中,才了解到vim的强大,不是一般的强大,惭愧以前以为知道了vi的几个插入模式命令就很值得自豪了,谁知那只是vim命令体系中的一角。

在这之前我也没怎么用过这些功能,在以后的使用过程中我如果发现问题,我会即使修改的。
也欢迎大家指正。
以下是原文内容了:


“对于我来说,vi是禅
使用vi是锻炼静坐与沉思
每条命令都引导你去深入的探索问题
对于使用者来说它是极其深奥的
对于从未接触过它的人来说它是难以理解的
每次使用它你都会发现真像。“
--reddy@lion.austin.com


这个指南,涵盖了vim的基础知识-例如:插入模式,命令模式,装载和保存文件。它尝试帮助vi初学者,培养他们的技能,使他们能够高效率的使用vi。

在这篇指南里,意思是Ctrl-X,那就是说按住Ctrl然后按下x。在vim中输入:help command_name,能够查看到大多数命令的帮助资料,command_name就是你需要帮助的命令名。

高效移动:
避开插入模式:
通常,你应该在插入模式下花费尽量少的时间,因为在这个模式下,vim表现的像个笨拙的编辑器。这就是为什么大多数的vim初学者在插入模式耗费了很多时间-他使得vim方便使用,但是vim的真正强大之处在命令模式!你会发现你越了解vim你在插入模式花费的时间越短。

h,j,k和I的使用:
放弃使用方位键是通向vim高效编程的第一步。vim模式设计的一个好处是你的手不需要在方位键和字母键之间来回移动;当你在命令模式,字母h,j,k和i就分别对应着方位键左,下,上和右。适应这个,需要练习,但是一旦你习惯了,就会感觉到速度的区别。

当你在编辑电子邮件,或者是分段版式的文本时,你或许会发现方位键滑动的行数比预想的多(从一段第一行直接跳到最后一行,无法选中中间的行)。这是因为一段文字对于vim来说是作为一整行存在的。(linux的编辑器基本都这样的)用g加上h,j,k或者i可以使关标按照屏幕的行移动而不是按照虚拟行。

在当前行移动关标:
大多数编辑器只有简单的命令来移动关标(例如:左,上,右,下,行首,行末),vim有非常高级的命令来移动关标,这些命令被认为是motions。当关标从文本的一点移动到另一点时,这两点之间的文本(包括那两点本身)就被认为是“被越过的”。(这在后面会很重要)



这有一些有用的motions:
fx:向前(右)移动关标到当前行下一个出现x字符的地方(光标在‘x’上闪烁)(显然的,‘x’可以是任意的字符)。这是一个极其有用的命令。你可以输入‘;’来重复你的最后一个f命令。

tx:和fx类似,不同的是关标移动到‘x’之前(在‘x‘之前的一个字符上闪烁)

Fx:向后(左)移动光标,到当前行下一个出现'x'的地方(光标将在停‘x‘处闪烁)。

w:光标向前(右)移动一个字符串(从当前字符串跳到下一个字符串的第一个字符处)。

b:光标向后(左)移动一个字符串。

0(数字0):移动光标到当前行(虚拟行,即一段文字将被看作一行)行首。正如上面的提到的,0能从一段文字的最后跳到段首,用g+0可以跳到屏幕行的行首,不论行首是空格还是字符。

o:光标移到(下一行)开头处(新建一行,不会将当前光标后面的字符带到下一行,即不同与回车)。

^:移动光标到当前行第一个字符处(非空格)。

$:移动光标到该行的结束。(句号之后的第一个空格处)

):向前移动光标到下一句(下一个句号之后的第一个字符处)。(当编辑电子邮件,或者文本文档时很有用)。

(:光标向后移动到下一句(前一个句号之后的第一个字符处)。


在文件中高效率移动光标:
在文件中vim有很多命令可以领你到你想要到的位置--很少需要手动滚动文件的。以下的击键不是专门的motions,因为他们在整个文件中移动,而不是在一行中。

:向前移动一屏,原来最后一行将成为下一页的第一行。

:向后移动一屏,原来第一行成为上一页的最后一行。

G:光标移动文件最末端,可以是空格。

numG:移动光标到第num行顶端。(例如:10G,光标移动到第10行顶端)

gg:光标移动文件开头(最左上角)。

H:移动光标到屏幕顶端(当前屏第一行第一个字符处,注意不是文件的头部)。

M:移动光标到当前屏的中间一行,第一个字符处。

L:移动光标到当前屏的最后一行,第一个字符处。

*:读入光标所在处的字符串,然后向后(右)跳到该字符串出现的下一个地方。(例如:如果你的光标停在了“bob”上,光标将跳到文件中下一个出现“bob”的地方,可以在整个文件中循环华查找。)

#:类似*(就是*的相反操作),不同的是该命令使光标向前查找,一样可以循环。

/text:从光标处开始,查找下一个“text”出现的地方。当按下回车键后开始执行查找并显示第一个“text”,按下n时,重复上一次查找。

?text:类似与/text,只是往相反对方向查找。

ma:在当前光标处设置书签(名为a),一个书签可以是任何的小写字母,你不能看到书签,但它的确在那。

`a:光标跳到书签a处,注意:这不是单引号,是个返回标志,一般位于键盘上的数字1左边。
用`a能够恰好回到设置标签的地方,用‘a(‘为但引号)能够回到书签所在的行第一个字符处。

`.跳到最后编辑的行,这个非常有用,如果你要滚动文件去查找什么。你可以使用`.回到你没有设置书签的地方。


高效输入:
使用关键字自动补全功能。
vim有一个很漂亮的关键字自动补全系统。这意味着你能只打出一个长字符串的一部分,按一个键,让vim替你完成那个祖父串的输入。例如,如果在你的代码中有一个变量:iAmALongAndAwkwardVarName,你可能不希望每次使用时都要完全输入一次。

使用关键字自动补全,只要输入字符串的前几个字母(例如:iAmAL)然后按下或者.如果刚开始vim不能给你你要的字符串,接着输入-vim将会在它所能找的补全方式中循环。

进入插入模式:
大多数用户刚用vim时使用i进入插入模式。这是可以的,但这又是那么低效,自从vi有大量命令进入插入模式。这有一些常用的:

i:在当前光标的左边插入文本。

I:在当前行首插入文本。

a:在当前光标右边插入文本。

A:在当前行末尾插入文本。

o:在当前行下新建一行,不会改变当前行的文本。

O:在当前行上方新建一行,同样不会改变当前行的文本。

c{motion}:删除{motion}跳过的文本,插入文本。例如:c$ 将会删除从光标处到当前行末尾的文本,并进入插入模式,再如:ct! 将会删除从当前光标处到光标之前一个感叹号间的文本,并进入插入模式。删除的文本被复制到了剪贴板上,并可以粘贴。

d{motion}:删除{motion}跳过的文本,但不几进入插入模式。

高效移动文本块:
使用视觉的选择以及合适的选择模式。
不像原始的vi,vim允许高亮显示文本,以及在他上的操作。有3中主要的视觉选择模式(就是文本高亮显示模式)。这些模式如下:

v:字符智能选择模式。这是大多数人使用的模式,所以在使用其他模式前练习使用他。

V:行智能选择模式。同常会选择整行。当你要复制或者要移动一些行时,他要优于字符只能选择模式。

:块智能选择模式。极其强大,并且极少数其他编辑器有这功能。你可以选择一个矩形块,这个矩形块中的任何字符将被高亮显示。

All the usual cusor movement keys apply-所以,例如:vwww 将进入可视化选择模式,并且高亮显示接下来的3个字符串。Vjj将进入行智能可视化选择模式,并且高亮显示当前行以及后面的两行。

可视化选择模式下的复制,剪切:
一旦你高亮选择了文字,你或许要采取一些操作。以下是一些更有用的你能对高亮显示区域使用的命令:

d:剪切(删除)高亮显示的文本,并将其放在剪贴板上。

y:复制(或者猛拉,这是vim对copy的替代说法)高亮文本到剪贴板上。

c:将高亮显示的文本剪切到剪贴板上,这就像命令d,不过这个命令使编辑器进入插入模式。

从非可视区域复制,剪切:
如果你确切的知道你要复制或者剪切的文本,你能不进入视觉模式。这能够节省时间。

d{motion}剪切{motion}越过的文本到剪贴板上。例如dw会剪切一个字符串;dfs会删除当前行从光标处到s处,并包括s的文本。

y{motion}:复制{motion}命令跳过的文本。

c{motion}:剪切掉{motion}跳过的文本,并进入插入模式,如:cfs将删除当前光标处到s(包括s)的文本并进入插入模式。

dd:剪切当前行。

yy:复制当前行。

cc:剪切当前行,并进入插入模式。

D:剪切从当前关标到行末的文本。不能删除空白行,dd可以删除整个空白行。

Y:复制当前行,就好想yy。(是的,这有点不协调,你可以用y$来实现你想要用Y来完成的操作)

C:剪切从当前光标到行末的文本,并进入插入模式。

x:剪切当前光标处的字符。(就有点像插入模式的退格键)

s:剪切当前字符并进入插入模式。

粘贴:
粘贴比较简单。光标定位到你想要粘贴文本的地方,按p键。

使用符合的剪贴板:

大多数只有单个的剪贴板,但vim有很多;剪贴板在vim中被叫作注册簿。使用:reg末行命令,你可以列出当前定义的所有的注册簿以及他们的内容。通常的,你只能使用小写字母(最新复制的,第一行的)注册簿;其他的是被vim的各种内部目的使用的,只是偶尔有用。    

要使用特定的注册簿来完成复制,粘贴操作,在你要使用的命令前输入"a,a是你要用的注册簿。

例如,你复制了一些内容到注册簿k.你可以使用"kp从注册簿k将文本复制出来。

避免重复:
令人吃惊的'.'命令:
在vi中,输入‘.’(一个句号)能重复上一条执行的命令。例如,如果你的上一条命令是dw(delete word),
vi将删除另一个字符串。

使用计数器:
计数器是vim最强大的特性之一,可以在任何命令前加上一个数字。那个数字将告诉vim执行命令多少次。这儿有一些例子:
3j 将向下移动3行。(当前行为第0行,光标移动到第3行)
10dd 将删除10行。
y3fn 可以复制从当前光标到第三个n之间的文本。(不知道为什么我用了这个命令后,查看register复制了两条?)(原文举的例子是y3"e; 这个命令我没运行的了)
以这种方式计数对扩展motin的范围有很大的作用。

宏记录:
有时,你会发现你不断对文件里的文本块做同样的事情。vim允许你记录一个ad-hoc宏来执行操作。
qregister :向名为register的注册簿中添加宏记录。例如:qa开始记录并把宏写入注册簿a。
q  :结束记录。
@register:重新执行存储在名为register的注册簿中的宏。例如:@a 重新运行a注册簿中的宏。
将宏定义为一个命令,注册簿名通过:reg能够查看到是每行前两个字符中"之后的一个我的是:"(双引号),0,1,2,3,4,5,6,7,8,9,0,a,-,+,还有.。
乱试一通,q:能拆分窗口,为末行模式分出个独立的窗口。

务必记住,宏能记录你的组合键,并重复执行他;这不是魔法。宏记录几乎是一种艺术形式,因为有如此之多的命令能够完成vim中一个给定的任务,而且当你记录了宏以后你必须认真选择你要使用的命令 这样他们才能在所有你想要执行他们的地方正常执行了。

在vim中些写代码:
vim是一个非常杰出的代码编辑器,因为他有很多专门为编程人员设计的特性。这儿有一些非常便于使用的:
lp:就好像p,但是它自动调整代码所要粘贴处的缩进,以便适合于上下文。试试吧。
%:将光标定位在大括号,中括号...上,然后按下输入%,将能让光标定位于该大括号或是中括号的另一半上。对检查逻辑复杂,构造繁乱的代码中的错误极其有用。

>>:缩排高亮显示的代码(查看之前的高效率文本选择部分)。如果没有文本被选中,当前行缩进。
<<:类似>>,但不缩进。
在我电脑上的实验结果是:>>右缩进一个制表符,<<左缩进一个制表符。

gd:光标定位到当前函数或者变量的定义(或者声明处)。

K:进入当前光标下字符串的命令解释页面(相当于在终端输入 man commond,commond假设是关标下的字符串)。(例如如果你光标在sleep上,按下K键你就能看到sleep的命令解释页面)

哈哈 ,终于搞定了。。。。
                    
阅读(774) | 评论(0) | 转发(0) |
0

上一篇:vim分割窗口

下一篇:mutt+msmtp+procmail+getmail

给主人留下些什么吧!~~