学习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。

时间: 2024-10-16 02:23:33

学习vi和vim编辑器(4):快速移动位置的相关文章

学习vi和vim编辑器(16):vim的多窗口功能(1)

vim默认是在一个窗口中编辑所有文件,在文件间移动或者移动到文件的不同部分时只显示一个缓冲区.但vim也提供了多窗口编辑功能,可以简化复合的编辑任务.这篇文章将学习如何在一个运行的vim进程里使用多窗口,包括多窗口编辑工作的初始化与启动,在窗口间移动光标,在显示区中移动窗口等. 启动多窗口编辑: 可以在打开vim时启动多窗口编辑,也可以在编辑会话中分割窗口. 从命令行(shell)启动多窗口: 默认情况下,vim为一个会话只打开一个窗口,即使打开时已经指定多个文件.如果想从命令行中打开多个窗口,

学习vi和vim编辑器(15):vim对vi的主要改进

vim对vi做了大量改进,本章将讨论在vim中添加的主要功能:包括内置帮助功能.启动与初始化选项.新的移动命令.扩展的正则表达式.扩展的撤销.自定义可执行文件等. 内置帮助功能: vim的说明文档超过10万行,几乎所有的说明都可以通过vim内置的帮助工具取得,使用它最简单的形式就是调用" :help "命令.使用内置的帮助功能需要了解vi的导航技巧,知道如何在标签间前进与后退.当光标处于某个标签上时,按下" CTRL+] "前往该标签,按下" CTRL+T

学习vi和vim编辑器(9):全局替换(2)

上一篇文章已经学习了如何通过vi编辑器中" :s "命令进行全局替换,而且可以在替换命令中使用正则表达式以进行强大的模式匹配.这一篇文章将学习模式匹配的更多范例,以进一步熟悉正则表达式. 模式匹配的范例: (1)匹配一个完整的单词:如下图所示,如果需要将文本里所有的child单词替换成为children,可能最先想到的就是下图所示的替换命令: 但是这个命令会把childrendish,Fabrichild这两个单词中的child都做替换,这不是我们想要的.替换的关键就是child要是一

学习vi和vim编辑器(13):vi同类品的功能总览

本章将学习vi同类品提供的相关功能. 它们都是我兄弟: 有许多可以自由取得的vi编辑器同类品.<vi和vim编辑器>重点介绍了vim编辑器,也简要地介绍了另外三种常用的同类品:nvi,elvis,vile.这些同类品都提供了vi之外的许多扩展功能,尽管方式可能不同,但这些同类品通常会提供相同的扩展功能.本篇文章将总体介绍这些同类品提供的扩展功能. 多窗口编辑:可以将屏幕分割成多个"窗口",从而在每个窗口编辑不同的文件,或者观察同一文件的不同部分.这使得同时在多个文件中工作更

学习vi和vim编辑器(11):高级编辑方法(2)

本章学习在vi编辑器中如何保存命令. 保存命令: vi和ex中提供了许多方法来保存一长串命令序列,这样当调用已保存的序列时,只需要输入几个字符即可. 单词缩写: 可以定义缩写,让vi在处于插入模式时替你自动将输入展开成原文.定义缩写的命令为:"  ab abbr phrase ",其中abbr就是给phrase指定的缩写.注意,在插入模式中,只有将缩写当成单个单词输入时,缩写才会被展开,单词内的abbr不会被展开.如下图所示,将"vi"定义为"visual

学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令.通过全局替换命令,可以自动替换文件中所有出现过的某个单词.全局替换一般会用到两个ex命令:":g"(global),":s"(substitute). 替换命令: 替换命令的语法如下: " :s/old/new/ ",该命令会将当前这一行中第一个出现的old模式替换为new.其中斜线用来分隔命令的各部分(如果斜线位于该命令的最后一个字符,则该斜线可以省略). " :s/old/new/g "

学习vi和vim编辑器(17):vim的多窗口功能(2)

接着上一篇文章,继续学习vim编辑器的多窗口功能.本篇文章主要学习调整窗口尺寸.缓冲区及其与窗口的交互.分页编辑.关闭与离开窗口. 调整窗口尺寸: 在gvim中,可以使用鼠标调整窗口尺寸,只需要用鼠标点击及拖动窗口边界即可.如果是在vim中,只要开启mouse选型(" :set mouse=a "),也能够用鼠标调整窗口尺寸. 窗口尺寸调整命令: ^W=:试图调整所有窗口至相同尺寸(此命令受当前的winwidth和winheight选项值的影响).如果可用的屏幕块不能平均划分,vim也

学习vi和vim编辑器(12):高级编辑方法(3)

本章主要学习vi编辑器中的@功能,ex脚本以及ctags工具的使用. @功能: 命名缓冲区提供了另一种方法来创建"宏",即可以将复杂的命令序列保存到某个命名缓冲区中,再通过@命令执行缓冲区中的内容.举个例子,首先在插入模式中输入如下一行: 然后将该行内容删除并将其保存到" a "这个命名缓冲区中,之后便可以将光标移动到某个单词的首部,执行" @a ",就可以将缓冲区中的内容作为命令进行执行.在这个例子中就是将该单词修改为function,同时仍然

学习vi和vim编辑器(1):vi文本编辑器

UNIX系统中有很多编辑器,可以分为两种类型:行编辑器和全屏编辑器.行编辑器每次只能在屏幕中显示文件的一行,如ed和ex编辑器,全屏编辑器可以在屏幕上显示文件的一部分. vi(读为vee-eye)编辑器是UNIX_Like操作系统的标准文本编辑器.vi是 visual editor的缩写,vi编辑器属于全屏编辑器,可以在阅读文件时当场就修改,并且立刻看到修改后的结果.对于新手而言,vi编辑器难度还是非常大的,但是一旦熟悉了vi编辑器,可能就再也不想重新使用其他"简单"的编辑器了.学习v

学习vi和vim编辑器(10):高级编辑方法(1)

从本章开始将介绍一些vi和ex编辑器的高级功能.这一篇文章主要介绍如何自定义编辑环境,如何在vi中执行UNIX命令以及如何通过UNIX命令在vi中过滤文本. 自定义vi: vi编辑器中有许多可以设置的选项,这些选项将影响vi编辑器的运作. 可以使用ex命令 " :set "在vi中改变选项.而且,只要vi被打开,就会读取位于你的主目录的" .exrc "文件,以取得vi的相关设置.在这个文件中使用" :set "命令,就可以改变vi的运作方式.除