学习vi和vim编辑(4):高速移动定位

平时。第一步是编辑文本需要做将光标移动到需要编辑。因此,根据需要,将光标移动到目标数字键来编辑文本的速度在一定程度上。

一篇文章。主要介绍怎样高速移动光标。

依据屏幕来移动:

在一个有几千行文本的文件里,假设依照行来移动的话。可能效率很低。此时能够依照屏幕来移动。

能够把文件看成一个具有文字的长长的卷轴,而屏幕是一个窗体,通常显示当中的24行文字(我的是显示26行)。

^F:往前(往文本结尾方向)滚动一整屏;

^B:往后(往文本开头方向)滚动一整屏;

^D:往前滚动半屏;

^U:往后滚动半屏;

^E:往前滚动一行;

^Y:往后滚动一行;

当中^F代表crtl键+f键。假设想往前或往下滚动屏幕,但又想让光标维持在原来的文本行。能够使用z命令:

z+enter:将光标移动到屏幕顶端并滚动屏幕。

z.:将光标移动到屏幕中心并滚动屏幕;

z-:将光标移动到屏幕底端并滚动屏幕。

举个样例:当前光标在屏幕最底层的一行,如今想让光标仍然在该行,但让该行移动到屏幕顶端。就能够直接输入z。接着输入enter键。例如以下图所看到的:

光标处于屏幕最后一行:


输入z enter 键之后。光标所在行移动到屏幕第一行:


所以你会发现反复同样的z命令并没有意义,由于第一次运行之后已经达到目的了,再运行同样的命令没有效果。z命令能够接受数值參数,比如z+enter是将当前行移动到屏幕顶端,可是200z+enter就是将文件的第两百行移动到屏幕顶端。

当某些消息出如今屏幕上而影响工作时。能够通过滚动屏幕来消除这些消息,也能够直接输入crtl+L键来重画但不滚动屏幕。如图所看到的:


输入ctrl+L键之后,就能够重画屏幕,提示消息消失:


假设须要在保持当前屏幕视图的情况下。能够通过下面命令在屏幕范围内移动:

H:移动到屏幕顶端的行;

M:移动到屏幕中央的行;

L:移动到屏幕底端的行。

nH:移动到屏幕顶端往下第n行;

nL:移动到屏幕底端往上第n行。

其效果例如以下图所看到的,起初光标在当前屏幕视图的第一行:


输入M键之后,光标移动到当前屏幕的中间行,并且屏幕视图没有变化:


依据行移动:

之前已经讲过了" j "和" k "这两个以行为单位进行移动的命令。这里补充几个命令:

enter:移动到下一行第一个字符。

+:移动到下一行的第一个字符。

-:移动到上一行的第一个字符。

以上三个命令在移动到目的行后,光标会置于该行的第一个非空字符。在当前行中移动。能够使用例如以下命令:

^:移到当前行的第一个非空格处;

n|:移动到当前行的第n列;

依据文本块来移动:

vi编辑器中能够以文本块(单词,句子,段落或小节)为单位进行移动。之前已经讲过了依照单词来移动(w,W。b,B),接下来再介绍几个依据文本块来移动光标的命令:

e:移动到单词的结尾;

E:移动到单词的结尾。算上标点符号;

(:移动到当前句子的开头。

):移动到下一个句子的开头。

{:移动到当前段落的开头;

}:移动到下一段落的结尾。

[[:移动到当前这一节的开头;

]]:移动到下一节的开头。

vi会寻找" ?

. ! "等标点符号作为句子的结束。当这些标点符号后面有至少两个空格或作为一行的最后一个非空格字符时。vi将其作为句子的结束。可是我实际操作的时候发现,事实上仅仅要这些标点符号后面跟上一个空格,vi就会将其作为句子的结束。不知道是不是书上又讲错了。还是哪里能够配置?临时先记下这个问题吧。

段落的定义是指下一个空白行前的文本,或者是出如今段落宏之前的文本。而小节的定义则是下一个节宏之前的文本。能够通过:set命令自己定义这些被当成段或节分隔符的宏。

依据搜索模式的结果来移动文本:

在大文件里移动时,最高速的方法之中的一个就是依据搜索模式的结果来进行移动。搜索命令是特殊字符" / ",格式为/patten。模式能够是完整的单词,或者一连串字符串,假设在搜索模式中增加了空格,这个空格也会被成单词的一部分。当然还能够使用更强大的模式匹配语法。

vi会从光标当前位置開始搜索,而且会依照须要自己主动绕回文件开头或文件底部进行搜索。假设搜索到了。光标会定位在该搜索模式第一次出现的地方。否则在屏幕底端显示对应的信息。

/patten:从光标位置開始处往前搜索。

?

patten:从光标位置開始处往回搜索;

上一次的搜索模式会留在你的编辑回话中。因此能够反复搜索。而不须要又一次输入原来的搜索模式:

n: 往同一个方向上反复搜索;

N: 往相反方向上反复搜索;

/enter:往前反复搜索;

?enter:往后反复搜索;

由于反复搜索时,默认是会自己主动绕回文件头或文件尾的,因此能够通过设置vi编辑器的wrapscan选项来控制搜索是否要绕回,当输入了指令:set nowrapscan 时,就能够取消搜索时绕过文件头或文件尾。

这时当我们往前搜索失败时,就会显演示样例如以下信息:


而假设往回搜索失败时,也会显演示样例如以下图所看到的的对应信息:


搜索命令能够与改动文本命令相结合一起使用。也就是说对于(command)(TextObject)的使用形式,搜索命令能够出如今TextObject中,而command代表的是文本改动命令,如c。d等。比如 d?file就是删除光标所在位置到往回搜索第一次出现file的全部字符。

能够用例如以下命令在当前行中搜索:

fx:搜索(同一时候将光标移动到)本行下一个出现x的地方,x代表不论什么字符;

Fx:搜索(同一时候将光标移动到)本行前一个出现x的地方;

tx:搜索(同一时候将光标移动到)本行下一个出现x的地方的前一个字符;

Tx:搜索(同一时候将光标移动到)本行前一个出现x的地方的后一个字符。

。:反复上一个搜索,方向同样。

,:反复上一个搜索,方向相反;

这些命令加上数值參数,代表搜索x字符第n次出现的地方。

这些命令在删除或拖曳时非常实用,当须要改动的文本块有多个标点符号而难以统计单词数,此时用字符搜索结合文本改动命令可能非常方便。

依据行号来移动:

行号对程序猿很实用,由于编译报错时通常都会告诉我们是哪行报错,假设可以直接移动到源文件里的那行,就行很便捷。通过:set nu选项来显示文件的行号。

CTRL+G命令会在屏幕底端显示对应的信息,包含当前的行号,文件的总行数。当前位置占全文的百分比。例如以下图所看到的:

G命令:数值參数加上G命令代表直接移动到对应的指定行。

假设没有指定行号,则G命令直接移动到文件尾部。

输入两个反引號( `` )能够回到原来的位置(上一次使用G命令的位置)。假设你在这中间做了编辑操作,两个反引號将光标移回到上次编辑的位置。假设使用了搜索命令,``能够将光标移回到上一次搜索时的位置。 ''和``作用类似。仅仅只是它将光标移回到上次位置所在行的开头而不是确实的位置。

按照行号来移动光标是在一个大文件里高速移动的方法。



本章vi编辑器命令总结:

^F,^B,^D。^U,^E,^Y,z+enter,z.,z-,^L。H,M,L,enter。+,-,^,n|,e。E,(,)。{。},[[。]]。/pattern,?

pattern,n,N。/,?,fx,Fx。tx,Tx,;, , ,G,``。'',^G。


版权声明:本文博客原创文章。博客,未经同意,不得转载。

原文地址:https://www.cnblogs.com/gcczhongduan/p/4752960.html