——TurboLinux網絡教室(第十九周)
Vi中的行號
Vi中的許多命令都要用到行號及行數等數值。若編輯的文件較大時,自己去數是非常不 方便的。為此Vi提供了給文本加行號的功能。這些行號顯示在屏幕的左邊,而相應行的 內容則顯示在行號之後。
使用的命令為:在末行方式下輸入命令:
:set number
需要說明的是,這裡加的行號只是顯示給用戶看的,它們並不是文件內容的一部分。
在一個較大的文件中,用戶可能需要了解光標當前行是哪一行,在文件中處於什麼位 置,可在命令模式下用組合鍵<Ctrl+g>,此時Vi會在顯示窗口的最後一行顯示出相應信 息。該命令可以在任何時候使用。
[例7]
#include <stdio.h>
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( );
}
add( )
{ static int x=0;
x++ ;
printf(“x = %d\\n”, x);
}
~
~
~
~
~
“ example.c” [Modified] lines 4 of 10 --40%-- col 11
在末行方式下,我們可以輸入命令nu(單詞number的縮寫)來獲得光標當前行的行號與 該行內容。
光標移動操作
全屏幕文本編輯器中,光標的移動操作無疑是最經常使用的操作了。用戶只有熟練地使 用移動光標的這些命令,才能迅速准確地到達所期望的位置處進行編輯。
Vi中的光標移動既可以在命令模式下,也可以在文本輸入模式下,但操作的方法不盡相 同。
在文本輸入模式下,可直接使用鍵盤上的四個方向鍵移動光標。
在命令模式下,有很多移動光標的方法。不但可以使用四個方向鍵來移動光標,還可以 用h、j、k、l這四個鍵代替四個方向鍵來移動光標,這樣可以避免由於不同機器上的不 同鍵盤定義所帶來的矛盾,而且使用熟練後可以手不離開字母鍵盤位置就能完成所有操 作,從而提高工作效率。另外還可以用<Spacebar>、<Backspace>、<Ctrl+n>和 <ctrl+p>四個鍵或組合鍵移動光標。且以上這三種鍵在實現功能上是等價的。除此之 外,還有一些移動光標的命令。下面對它們的工作方式介紹如下:
<Spacebar>、(R) (均稱為右向鍵)
右向鍵的作用是將光標向右移動一個位置。若在向右鍵前先輸入一個數字n,那麼光標 就向右移動n個位置。例如5l表示光標向右移動5個位置。需要注意的是,光標移動不能 超過當前行的末尾。若給定的n超過光標當前位置至行尾的字符個數,如果用右向鍵, 光標只能移到行尾;如果用<Spacebar>,光標移到下面一行或幾行的適當位置。
h、<Backspace>、? (向左鍵)
執行一次向左鍵,光標向左移動一個位置。同向右鍵一樣,也可以在向左鍵的前面輸入 一個數字n,那麼光標就向左移動n個位置。需要注意的是,如果用左向鍵,光標左移不 能超出該行的開頭;如果用<Backspace>,光標移到上面一行或幾行的適當位置。
j、<Ctrl+n>、? (向下鍵)
執行一次向下鍵光標向下移動一個位置(即一行),但光標所在的列不變。當這些命令 前面加上數字n,則光標下移n行。
Vi除了可以用向下鍵將光標下移外,還可以用<Enter>鍵和“+”鍵將光標下移一行或n 行(不包括本行在內),但此時光標下移之後將位於該行的第一個字符處。例如:
3j 光標下移3行,且光標所在列的位置不變。
3+或3<Enter> 光標下移3行,且光標位於該行的行首。
k、<Ctrl+p>、? (向上鍵)
執行一次向上鍵光標向上移動一個位置(即一行),但光標所在的列不變。同樣在這些 命令前面加上數字n,則光標上移n行。
若希望光標上移之後,光標位於該行的行首,則可以使用命令“- ”。
L (移至行首)
L 命令是將光標移到當前行的開頭,即將光標移至當前行的第一個非空白處(非制表符 或非空格符)。
$(移至行尾)
該命令將光標移到當前行的行尾,停在最後一個字符上。若在$命令之前加上一個數字 n,則光標下移n-1行並到達行尾。
[行號] G(移至指定行)
該命令將光標移至指定行號所指定的行的行首。這種移動稱為絕對定位移動。
[例8]
#include <stdio.h>
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( );
}
add( )
{ static int x=0;
x++ ;
printf(“x = %d\\n”, x);
}
~
~
~
~
~
“ example.c” 12 lines, 125 characters
鍵入命令:6G後,屏幕顯示如下:
#include <stdio.h>
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( );
}
add( )
{ static int x=0;
x++ ;
printf(“x = %d\\n”, x);
}
~
~
~
~
~
“ example.c” 12 lines, 125 characters
光標移到了第6行的行首。
若省略行號,則光標移至該文件的最後一行的行首,即無論該文件有多少屏,都跳至最 後一行。
第二十七課 vi命令 2000年/6月/26日
在屏幕上移動
Vi提供了三個關於光標在全屏幕上移動並且文件本身不發生滾動的命令。它們分別是 H、M和L命令。
1.H命令
該命令將光標移至屏幕首行的行首(即左上角),也就是當前屏幕的第一行,而 不是整個文件的第一行。利用此命令可以快速將光標移至屏幕頂部。若在H命令之 前加上數字n,則將光標移至第n行的行首。
[例9] 屏幕顯示如下內容:
#include <stdio.h>
main ( )
{ int k ;
for ( k=0 ; k<3 ; k++) add( ); }
add( )
{ static int x=0;
x++ ;
printf(“x=%d\\n”, x);
}
~
~
~
~
~
“ example.c” [ New File]
在命令模式下輸入4H命令後,光標移到以for開頭的這一行的字母f上。
值得一提的是,使用命令dH將會刪除從光標當前所在行至所顯示屏幕首行的全部 內容。
2.M命令
該命令將光標移至屏幕顯示文件的中間行的行首。即如果當前屏幕已經充滿,則移 動到整個屏幕的中間行;如果並未充滿,則移動到文本的那些行的中間行。利用 此命令可以快速地將光標從屏幕的任意位置移至屏幕顯示文件的中間行的行首。 例如,在上面屏幕顯示的情況下(不論光標在屏幕的何處),在命令模式下,輸 入命令M之後,光標都將移到add這一行的字母a上。
同樣值得一提的是,使用命令dM將會刪除從光標當前所在行至屏幕顯示文件的中 間行的全部內容。
3.L命令
當文件顯示內容超過一屏時,該命令將光標移至屏幕上的最底行的行首;當文件顯示內 容不足一屏時,該命令將光標移至文件的最後一行的行首。可見,利用此命令可以快速 准確地將光標移至屏幕底部或文件的最後一行。若在L命令之前加上數字n,則將光標移 至從屏幕底部算起第n行的行首。例如,在上面屏幕顯示的情況下(不論光標在屏幕的 何處),在命令模式下,輸入命令3L之後,光標都將移到x++這一行的字母x上。
同樣值得一提的是,使用命令dL將會刪除從光標當前行至屏幕底行的全部內容。
按字移動光標
首先介紹一下Vi中“字”的概念。在Vi中“字”有兩種含義。一種是廣義的字,它可以 是兩個空格之間的任何內容。
[例10] 在文件example.c 中的第4行:
{int k;
它只有2個字,一個是{int ,另一個是k;
Vi中另一種字是狹義上的字,在此種意義之下,英文單詞、標點符號和非字母字符(如 !、@、#、$、%、^、&、*、(、)、-、+、{、}、[、]、~、|、\\、<、>、/等)均被當 成是一個字。因此,上面那一行中就包括{、int、k、;這4個字。
Vi中使用大寫命令一般就是指將字作為廣義來對待,使用小寫命令就是作為狹義對待。
搞清楚Vi中字的含義後,我們就可以介紹按字移動光標的命令了。
Vi 一共提供了三組關於按字移動光標的命令,分別是:
1.w和W命令
將光標右移至下一個字的字首;
[例11] 屏幕上顯示如下:
printf(“Hello Mr.Huang!\\n”);
現在使用w命令,把光標移到下一個字(狹義)的字首“(”上:
printf(“Hello Mr.Huang!\\n”);
下面使用W命令,將把光標移到下一個字(廣義)的字首“M”上:
printf(“Hello Mr.Huang!\\n”);
2.e和E命令
如果光標起始位置處於字內(即非字尾處),則該命令將把光標移到本字字尾; 如果光標起始位置處於字尾,則該命令將把光標移動到下一個字的字尾。
3.b和B
如果光標處於所在字內(即非字首),則該命令將把光標移至本字字首;如果光標處於 所在字字首,則該命令將把光標移到上一個字的字首。
[例12] 屏幕顯示如下:
printf(“Hello Mr.Huang!\\n”);
現在使用b命令,由於光標處於該字中間,所以光標移動到本字字首“H”處:
printf(“Hello Mr.Huang!\\n”);
如果使用B命令,則如下所示:
printf(“Hello Mr.Huang!\\n”);
按句移動光標
在Vi中,一個句子被定義為是以逗號(,)、句號(.)、問號(?)和感歎號(!)結 尾,且其後面跟著至少兩個以上(含兩個)空格或一個換行符的字符序列。
Vi提供了關於按句移動光標的兩個命令,分別為:
1. ( 命令
將光標移至上一個句子的開頭。
2. ) 命令
該命令將光標移至下一個句子的開頭。
按段移動光標
在Vi中,一個段被定義為是以一個空白行開始和結束的片段。Vi提供了關於按段移動光 標的兩個命令,分別為:
1. { 命令
該命令將光標向前移至上一個段的開頭;
2. } 命令
該命令將光標向後移至下一個段的開頭。
屏幕滾動
屏幕命令是以屏幕為單位移動光標的,常用於文件的滾屏和分頁。需要注意的是,屏幕 命令不是光標移動命令,不能作為文本限定符用於刪除命令中。
在命令模式下和文本輸入模式下均可以使用屏幕滾動命令。
1. 滾屏命令
關於滾屏命令有兩個:
・ < Ctrl+u > 將屏幕向前(文件頭方向)翻滾半屏;
・ < Ctrl+d > 將屏幕向後(文件尾方向)翻滾半屏。
可以在這兩個命令之前加上一個數字n,則屏幕向前或向後翻滾n行。並且這個值被系統 記住,以後再用< Ctrl+u >和< Ctrl+d >命令滾屏時,還滾相應的行數。
2. 分頁命令
關於分頁命令也有兩個:
・ < Ctrl+f > 將屏幕向文件尾方向翻滾一整屏(即一頁);
・ < Ctrl+b > 將屏幕向文件首方向翻滾一整屏(即一頁)。
同樣也可以在這兩個命令之前加上一個數字n,則屏幕向前或向後移動n頁。
3. 狀態命令< Ctrl+G >
命令顯示在vi狀態行上的vi狀態信息,包括正在編輯的文件名、是否修改過、當前行 號、文件的行數以及光標之前的行占整個文件的百分比。
4. 屏幕調零命令
Vi 提供了三個有關屏幕調零的命令。它們的格式分別為:
・ [行號] z [行數] <回車>
・ [行號] z [行數] .
・ [行號] z [行數] _
若省略了行號和行數,這三個命令分別為將光標所在的當前行作為屏幕的首行、中間行 和最末行重新顯示;若給出行號,那麼該行號所對應的行就作為當前行顯示在屏幕的首 行、中間行和最末行;若給出行數,則它規定了在屏幕上顯示的行數。
[例13]
8z16<回車> :將文件中的第8行作為屏幕顯示的首行,並 一共顯示16行。
15z . :將文件中的第15行作為屏幕顯示的中間行,顯示行 數為整屏。
15z 5_ :將文件中的第15行作為屏幕顯示的最末行,顯示 行數為5行。
文本插入操作
在命令模式下用戶輸入的任何字符都被Vi當作命令加以解釋執行,如果用戶要將輸入的 字符當作是文本內容時,則首先應將Vi的工作模式從命令模式切換到文本輸入模式。切 換的方式是使用下面的命令。
插入(Insert)命令
Vi提供了兩個插入命令:i和 I。
1.i命令
插入文本從光標所在位置前開始,並且插入過程中可以使用<Backspace>鍵刪除錯 誤的輸入。此時Vi處於插入狀態,屏幕最下行顯示“--INSERT--”(插入)字 樣。
[例14] 有一正在編輯的文件,如下所示:
Welcome to vi world!Come on!
~
~
光標位於第一個“!”上,需在其前面插入:
This is an example!
使用i命令,並輸入相應文本後,屏幕顯示如下:
Welcome to vi world This is an example!!Come on!
~
~
由此例可以看到,光標本來是在第一個“!”處,但是由於是從光標所在位置前開 始插入,所以這個“!”就被擠到了新插入的文本之後。
2.I命令
該命令是將光標移到當前行的行首,然後在其前插入文本。