您的位置:首页 > 其它

vim 高级编辑技巧

2014-04-01 19:12 302 查看
1.快速复制上一行(或下一行):

(插入模式下)输完一行后回车,在下面一行按住CTRL_Y不放,直到复制完上一行^^

CTRL_E为复制下一行;

2.快速插入已输入过的单词:

(例):如果已经在文本中输入过hello, 再次输hello的时候,在输到he的时候

按CTRL_P就可补全hello, CTRL_N为向后搜索。

3。格式化代码

(1)
gg=G 是一个自动缩进的命令 (在命令状态下直接输入,不需要输入冒号),gg是文件首,G是文件尾,所以 gg=G 是整理全部代码。

(2) == 整理当行,加行数整理多行。

(3) ={ 或者 =i{ 整理一个代码块。

(4) mG=nG 当 m 不等于 n 的时候能完成从 m 行到 n 行的局部的缩进。例如,从80行缩进直到100行,你可以用 80G=100G,在命令状态下使用 :set nu 查看行号,一般更习惯将 se nu 直接写入Vim的配置文件,这样每次打开都会显示行号。

(5) 在写代码前,设置自己的代码风格。在配置文件里添加命令:

" 设置缩进和行号

set nu ru ai si ts=4 sw=4

(6) :set equalprg=indent

意思是用indent程序处理等号命令,indent默认是gnu风格。

建议不要改,代码风格应该自己主动养成,=适用于修改代码或者粘贴别处代码后整理缩进。

这里又体现出不用indent的好处了,如果用indent,单纯格式化代码块会丢统一的行首缩进,而且选中的如果不是内部完整的代码块,会出错,把出错的输出贴到了代码里....弊端很多。

4.vi中较常用的操作命令。

输入模式命令

输入模式命令光标移动

输入模式命令删除操作

改变与替换

查询命令

拷贝与粘贴

文件保存及退出vi

输入模式命令

进入输入输出的方法

命令作用

<a> 在光标后输入文本

<A> 在当前行末尾输入文本

<i> 在光标前输入文本

<I> 在当前行开始输入文本

<o> 在当前行后输入新一行

<O> 在当前行前输入新一行

光标移动命令

光标移动

命令作用

<b> 移动到当前单词的开始

<e> 移动到当前单词的结尾

<w> 向前移动一个单词

<h> 向前移动一个字符

<j> 向上移动一行

<k> 向下移动一行

<l> 向后移动一个字符

删除操作命令

删除操作

命令作用

<x> 删除光标所在的字符

<dw> 删除光标所在的单词

<d$> 删除光标至行尾的所有字符

<D> 同<d$>

<dd> 删除当前行

可在删除命令前加上数字,如<5x>表示删除5行。

改变与替换操作命令

改变与替换操作

命令作用

<r> 替换光标所在的字符

<R> 替换字符序列

<cw> 替换一个单词

<ce> 同<cw>

<cb> 替换光标所在的前一字符

<c$> 替换自光标位置至行尾的所有字符

<C> 同<c$>

<cc> 替换当前行

查询命令

查询

命令作用

</abc> 向前查询abc

<?abc> 向后查询abc

<n> 向前继续查询

<N> 向后继续查询

拷贝与粘贴命令

拷贝与粘贴

命令作用

</yw> 将光标所在单词拷入剪贴板

<y$> 将光标至行尾的字符拷入剪贴板

<Y> 同<y$>

<yy> 将当前行拷入剪贴板

<p> 将剪贴板中的内容粘贴在光标后

<P> 将剪贴板中的内容粘贴在光标前

文件保存及退出vi命令

文件保存及退出vi

命令作用

<:q> 不包存退出

<:q!> 不保存强制性退出

<:w> 保存编辑

<:wfilename> 存入文件filename中

<:w!filename> 强制性存入文件filename中

<:wq> 保存退出

<:x> 同<:wq>

<ZZ> 同<:wq>

5.

在vi编辑时,有时需要需要打开另外一个文件,命令是:

:new filename

此刻,出现了了上下两个窗口,切换这两个窗口的焦点方法是:ctrl+w,w(先按ctrl+w,再按键w);

再利用粘贴、复制等操作(putty直接支持鼠标操作,左击划中就是复制,在想要的地方右击就是粘贴,不过之前要先按i键),是不是很方便!

切换到焦点的窗口,不再用时,要关闭该窗口,:q即可。

6,比较文件操作

源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提供了内建的功能来支持文件的比较和合并。

当远程工作在Unix/Linux平台上的时候,恐怕最简单而且到处存在的就是命令行工具,比如diff。可惜diff的功能有限,使用起来也不是很方便。作为命令行的比较工具,我们仍然希望能拥有简单明了的界面,可以使我们能够对比较结果一目了然;我们还希望能够在比较出来的多处差异之间快速定位,希望能够很容易的进行文件合并……。而Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足所有这些需求,甚至能够提供更多的强力工具。在最近的工作中,因为需要做很多的文件比较和合并的工作,因此对Vimdiff的使用做了一个简单的总结。我们先来看看vimdiff的基本使用。

启动方法

首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。Vimdiff的基本用法就是:

# vimdiff  FILE_LEFT  FILE_RIGHT

或者

# vim -d  FILE_LEFT  FILE_RIGHT

图一就是vimdiff命令的执行结果的画面。



从上图我们可以看到一个清晰的比较结果。屏幕被垂直分割,左右两侧分别显示被比较的两个文件。两个文件中连续的相同的行被折叠了起来,以便使用者能把注意力集中在两个文件的差异上。只在某一文件中存在的行的背景色被设置为蓝色,而在另一文件中的对应位置被显示为绿色。两个文件中都存在,但是包含差异的行显示为粉色背景,引起差异的文字用红色背景加以突出。

除了用这种方法启动vim的diff模式之外,我们还可以用分割窗口命令来启动diff模式:

# vim FILE_LEFT

然后在vim的ex模式(也就是"冒号"模式)下输入:

:vertical diffsplit FILE_RIGHT

也可以达到同样的效果。如果希望交换两个窗口的位置,或者希望改变窗口的分割方式,可以使用下列命令:

1. Ctrl-w K(把当前窗口移到最上边)

2. Ctrl-w H(把当前窗口移到最左边)

3. Ctrl-w J(把当前窗口移到最下边)

4. Ctrl-w L(把当前窗口移到最右边)

其中1和3两个操作会把窗口改成水平分割方式。

光标移动

接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:

:set noscrollbind

可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:

]c

反向跳转是:

[c

如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。

文件合并

文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令

dp (diff "put")

如果希望把另一个文件的内容复制到当前行中,可以使用命令

do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:

Ctrl-w, w

在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:

:diffupdate

如果希望撤销修改,可以和平常用vim编辑一样,直接

<ESC>, u

但是要注意一定要将光标移动到需要撤销修改的文件窗口中。

同时操作两个文件

在比较和合并告一段落之后,可以用下列命令对两个文件同时进行操作。比如同时退出:

:qa (quit all)

如果希望保存全部文件:

:wa (write all)

或者是两者的合并命令,保存全部文件,然后退出:

:wqa (write, then quit all)

如果在退出的时候不希望保存任何操作的结果:

:qa! (force to quit all)



上下文的展开和查看

比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数,可以这样设置:

:set diffopt=context:3

可以用简单的折叠命令来临时展开被折叠的相同的文本行:

zo (folding open,之所以用z这个字母,是因为它看上去比较像折叠着的纸)

然后可以用下列命令来重新折叠:

zc (folding close)

下图是设置上下文为3行,并展开了部分相同文本的vimdiff屏幕:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: