在屏幕上移动Vi提供了三个关于光标在全屏幕上移动并且文件本身不发生滚动的命令它们分别是HM和L命令
H命令 该命令将光标移至屏幕首行的行首(即左上角)也就是当前屏幕的第一行而不是整个文件的第一行利用此命令可以快速将光标移至屏幕顶部若在H命令之前加上数字n则将光标移至第n行的行首
[例] 屏幕显示如下内容
#include main ( ) { int k ; for ( k= ; k< ; k++) add( ); } add( ) { static int x=; x++ ; printf(x=%d\n x); }
~ ~ ~ ~ ~ examplec [ New File]
在命令模式下输入H命令后光标移到以for开头的这一行的字母f上
值得一提的是使用命令dH将会删除从光标当前所在行至所显示屏幕首行的全部内容
M命令 该命令将光标移至屏幕显示文件的中间行的行首即如果当前屏幕已经充满则移动到整个屏幕的中间行如果并未充满则移动到文本的那些行的中间行利用此命令可以快速地将光标从屏幕的任意位置移至屏幕显示文件的中间行的行首例如在上面屏幕显示的情况下(不论光标在屏幕的何处)在命令模式下输入命令M之后光标都将移到add这一行的字母a上
同样值得一提的是使用命令dM将会删除从光标当前所在行至屏幕显示文件的中间行的全部内容
L命令 当文件显示内容超过一屏时该命令将光标移至屏幕上的最底行的行首当文件显示内容不足一屏时该命令将光标移至文件的最后一行的行首可见利用此命令可以快速准确地将光标移至屏幕底部或文件的最后一行若在L命令之前加上数字n则将光标移至从屏幕底部算起第n行的行首例如在上面屏幕显示的情况下(不论光标在屏幕的何处)在命令模式下输入命令L之后光标都将移到x++这一行的字母x上
同样值得一提的是使用命令dL将会删除从光标当前行至屏幕底行的全部内容
按字移动光标
首先介绍一下Vi中字的概念在Vi中字有两种含义一种是广义的字它可以是两个空格之间的任何内容
[例] 在文件examplec 中的第行
{int k
它只有个字一个是{int 另一个是k;
Vi中另一种字是狭义上的字在此种意义之下英文单词标点符号和非字母字符(如!@#$%^&*()+{}[]~|\<>/等)均被当成是一个字因此上面那一行中就包括{intk这个字
Vi中使用大写命令一般就是指将字作为广义来对待使用小写命令就是作为狭义对待
搞清楚Vi中字的含义后我们就可以介绍按字移动光标的命令了
Vi 一共提供了三组关于按字移动光标的命令分别是
w和W命令 将光标右移至下一个字的字首
[例] 屏幕上显示如下
printf(Hello MrHuang!\n);
现在使用w命令把光标移到下一个字(狭义)的字首(上 printf(Hello MrHuang!\n);
下面使用W命令将把光标移到下一个字(广义)的字首M上
printf(Hello MrHuang!\n);
e和E命令 如果光标起始位置处于字内(即非字尾处)则该命令将把光标移到本字字尾如果光标起始位置处于字尾则该命令将把光标移动到下一个字的字尾
b和B 如果光标处于所在字内(即非字首)则该命令将把光标移至本字字首如果光标处于所在字字首则该命令将把光标移到上一个字的字首
[例] 屏幕显示如下
printf(Hello MrHuang!\n);
现在使用b命令由于光标处于该字中间所以光标移动到本字字首H处
printf(Hello MrHuang!\n);
如果使用B命令则如下所示
printf(Hello MrHuang!\n);
按句移动光标
在Vi中一个句子被定义为是以逗号()句号()问号(?)和感叹号(!)结尾且其后面跟着至少两个以上(含两个)空格或一个换行符的字符序列
Vi提供了关于按句移动光标的两个命令分别为
( 命令
将光标移至上一个句子的开头
) 命令
该命令将光标移至下一个句子的开头
按段移动光标
在Vi中一个段被定义为是以一个空白行开始和结束的片段Vi提供了关于按段移动光标的两个命令分别为
{ 命令
该命令将光标向前移至上一个段的开头
} 命令
该命令将光标向后移至下一个段的开头
屏幕滚动
屏幕命令是以屏幕为单位移动光标的常用于文件的滚屏和分页需要注意的是屏幕命令不是光标移动命令不能作为文本限定符用于删除命令中
在命令模式下和文本输入模式下均可以使用屏幕滚动命令
滚屏命令
关于滚屏命令有两个
· < Ctrl+u > 将屏幕向前(文件头方向)翻滚半屏
· < Ctrl+d > 将屏幕向后(文件尾方向)翻滚半屏
可以在这两个命令之前加上一个数字n则屏幕向前或向后翻滚n行并且这个值被系统记住以后再用< Ctrl+u >和< Ctrl+d >命令滚屏时还滚相应的行数
分页命令
关于分页命令也有两个
· < Ctrl+f > 将屏幕向文件尾方向翻滚一整屏(即一页)
· < Ctrl+b > 将屏幕向文件首方向翻滚一整屏(即一页)
同样也可以在这两个命令之前加上一个数字n则屏幕向前或向后移动n页
状态命令< Ctrl+G >
命令显示在vi状态行上的vi状态信息包括正在编辑的文件名是否修改过当前行号文件的行数以及光标之前的行占整个文件的百分比
屏幕调零命令
Vi 提供了三个有关屏幕调零的命令它们的格式分别为
· [行号] z [行数] <回车>
· [行号] z [行数]
· [行号] z [行数] _
若省略了行号和行数这三个命令分别为将光标所在的当前行作为屏幕的首行中间行和最末行重新显示若给出行号那么该行号所对应的行就作为当前行显示在屏幕的首行中间行和最末行若给出行数则它规定了在屏幕上显示的行数
[例]
z<回车> 将文件中的第行作为屏幕显示的首行并一共显示行
z 将文件中的第行作为屏幕显示的中间行显示行数为整屏
z _ 将文件中的第行作为屏幕显示的最末行显示行数为行
文本插入操作
在命令模式下用户输入的任何字符都被Vi当作命令加以解释执行如果用户要将输入的字符当作是文本内容时则首先应将Vi的工作模式从命令模式切换到文本输入模式切换的方式是使用下面的命令
插入(Insert)命令
Vi提供了两个插入命令i和 I
i命令 插入文本从光标所在位置前开始并且插入过程中可以使用 键删除错误的输入此时Vi处于插入状态屏幕最下行显示INSERT(插入)字样
[例] 有一正在编辑的文件如下所示
Welcome to vi world!Come on! ~ ~
光标位于第一个!上需在其前面插入
This is an example!
使用i命令并输入相应文本后屏幕显示如下
Welcome to vi world This is an example!!Come on! ~ ~
由此例可以看到光标本来是在第一个!处但是由于是从光标所在位置前开始插入所以这个!就被挤到了新插入的文本之后
I命令 该命令是将光标移到当前行的行首然后在其前插入文本
第二十九课 vi命令
附加(append)命令
Vi提供了两个附加插入命令a和A
a命令 该命令用于在光标当前所在位置之后追加新文本新输入的文本放在光标之后在光标后的原文本将相应地向后移动光标可在一行的任何位置
[例] 以例原始情况为例使用a命令并输入相应文本屏幕显示如下
Welcome to vi world!This is an example!Come on! ~ ~
本例中光标后的文本Come on!被新输入的文本挤到了后面
A命令 该命令与a命令不同的是A命令将把光标挪到所在行的行尾从那里开始插入新文本当输入A命令后光标自动移到该行的行尾
a和A命令是把文本插入到行尾的唯一方法
打开(open)命令
不论是Insert命令也好还是append命令也好所插入的内容都是从当前行中的某个位置开始的若我们希望在某行之前或某行之后插入一些新行则应使用open命令
Vi提供了两个打开命令o和O
o命令 该命令将在光标所在行的下面新开一行并将光标置于该行的< 与其临渊羡鱼,不如退而结网。