Vi中的行号
Vi中的许多命令都要用到行号及行数等数值若编辑的文件较大时自己去数是非常不方便的为此Vi提供了给文本加行号的功能这些行号显示在屏幕的左边而相应行的内容则显示在行号之后
使用的命令为在末行方式下输入命令
:set number
需要说明的是这里加的行号只是显示给用户看的它们并不是文件内容的一部分
在一个较大的文件中用户可能需要了解光标当前行是哪一行在文件中处于什么位置可在命令模式下用组合键此时Vi会在显示窗口的最后一行显示出相应信息该命令可以在任何时候使用
[例]
#include main ( ) { int k ; for ( k= ; k< ; k++) add( ); } add( ) { static int x=; x++ ; printf(x = %d\n x); } ~ ~ ~ ~ ~ examplec [Modified] lines of % col 在末行方式下我们可以输入命令nu(单词number的缩写)来获得光标当前行的行号与该行内容
光标移动操作
全屏幕文本编辑器中光标的移动操作无疑是最经常使用的操作了用户只有熟练地使用移动光标的这些命令才能迅速准确地到达所期望的位置处进行编辑
Vi中的光标移动既可以在命令模式下也可以在文本输入模式下但操作的方法不尽相同
在文本输入模式下可直接使用键盘上的四个方向键移动光标
在命令模式下有很多移动光标的方法不但可以使用四个方向键来移动光标还可以用hjkl这四个键代替四个方向键来移动光标这样可以避免由于不同机器上的不同键盘定义所带来的矛盾而且使用熟练后可以手不离开字母键盘位置就能完成所有操作从而提高工作效率另外还可以用 和四个键或组合键移动光标且以上这三种键在实现功能上是等价的除此之外还有一些移动光标的命令下面对它们的工作方式介绍如下
® (均称为右向键)
右向键的作用是将光标向右移动一个位置若在向右键前先输入一个数字n那么光标就向右移动n个位置例如l表示光标向右移动个位置需要注意的是光标移动不能超过当前行的末尾若给定的n超过光标当前位置至行尾的字符个数如果用右向键光标只能移到行尾如果用 光标移到下面一行或几行的适当位置
h ¬ (向左键)
执行一次向左键光标向左移动一个位置同向右键一样也可以在向左键的前面输入一个数字n那么光标就向左移动n个位置需要注意的是如果用左向键光标左移不能超出该行的开头如果用 光标移到上面一行或几行的适当位置
j¯ (向下键)
执行一次向下键光标向下移动一个位置(即一行)但光标所在的列不变当这些命令前面加上数字n则光标下移n行
Vi除了可以用向下键将光标下移外还可以用 键和+键将光标下移一行或n行(不包括本行在内)但此时光标下移之后将位于该行的第一个字符处例如
j 光标下移行且光标所在列的位置不变
+或 光标下移行且光标位于该行的行首
k (向上键)
执行一次向上键光标向上移动一个位置(即一行)但光标所在的列不变同样在这些命令前面加上数字n则光标上移n行
若希望光标上移之后光标位于该行的行首则可以使用命令
L (移至行首)
L 命令是将光标移到当前行的开头即将光标移至当前行的第一个非空白处(非制表符或非空格符)
$(移至行尾)
该命令将光标移到当前行的行尾停在最后一个字符上若在$命令之前加上一个数字n则光标下移n行并到达行尾
[行号] G(移至指定行)
该命令将光标移至指定行号所指定的行的行首这种移动称为绝对定位移动
[例]
#include main ( ) { int k ; for ( k= ; k< ; k++) add( ); } add( ) { static int x=; x++ ; printf(x = %d\n x); } ~ ~ ~ ~ ~ examplec lines characters
键入命令:G后屏幕显示如下
#include main ( ) { int k ; for ( k= ; k< ; k++) add( ); } add( ) { static int x=; x++ ; printf(x = %d\n x); } ~ ~ ~ ~ ~ examplec lines characters
光标移到了第行的行首
若省略行号则光标移至该文件的最后一行的行首即无论该文件有多少屏都跳至最后一行
第二十七课 vi命令
在屏幕上移动
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提供了关 人生没有彩排,每天都是现场直播。