Linux循序漸進(23):Vi的編輯操作及命令(轉)

post0發表於2007-08-09
Linux循序漸進(23):Vi的編輯操作及命令(轉)[@more@]

Vi中的行號

Vi中的許多命令都要用到行號及行數等數值。若編輯的檔案較大時,自己去數是非常不方便的。為此Vi提供了給文字加行號的功能。這些行號顯示在螢幕的左邊,而相應行的內容則顯示在行號之後。

使用的命令為:在末行方式下輸入命令:

:set number

需要說明的是,這裡加的行號只是顯示給使用者看的,它們並不是檔案內容的一部分。

在一個較大的檔案中,使用者可能需要了解游標當前行是哪一行,在檔案中處於什麼位置,可在命令模式下用組合鍵,此時Vi會在顯示視窗的最後一行顯示出相應資訊。該命令可以在任何時候使用。

[例7]

#include

main ( )

{ int k ;

for ( k=0 ; k<3 ; k++) add( );

}

add( )

{ static int x=0;

x++ ;

printf(“x = %d ”, x);

}

~

~

~

~

~

“ example.c” [Modified] lines 4 of 10 --40%-- col 11

在末行方式下,我們可以輸入命令nu(單詞number的縮寫)來獲得游標當前行的行號與該行內容。

游標移動操作

全螢幕文字編輯器中,游標的移動操作無疑是最經常使用的操作了。使用者只有熟練地使用移動游標的這些命令,才能迅速準確地到達所期望的位置處進行編輯。

Vi中的游標移動既可以在命令模式下,也可以在文字輸入模式下,但操作的方法不盡相同。

在文字輸入模式下,可直接使用鍵盤上的四個方向鍵移動游標。

在命令模式下,有很多移動游標的方法。不但可以使用四個方向鍵來移動游標,還可以用h、j、k、l這四個鍵代替四個方向鍵來移動游標,這樣可以避免由於不同機器上的不同鍵盤定義所帶來的矛盾,而且使用熟練後可以手不離開字母鍵盤位置就能完成所有操作,從而提高工作效率。另外還可以用、、和四個鍵或組合鍵移動游標。且以上這三種鍵在實現功能上是等價的。除此之外,還有一些移動游標的命令。下面對它們的工作方式介紹如下:

、® (均稱為右向鍵)

右向鍵的作用是將游標向右移動一個位置。若在向右鍵前先輸入一個數字n,那麼游標就向右移動n個位置。例如5l表示游標向右移動5個位置。需要注意的是,游標移動不能超過當前行的末尾。若給定的n超過游標當前位置至行尾的字元個數,如果用右向鍵,游標只能移到行尾;如果用,游標移到下面一行或幾行的適當位置。

h、、¬ (向左鍵)

執行一次向左鍵,游標向左移動一個位置。同向右鍵一樣,也可以在向左鍵的前面輸入一個數字n,那麼游標就向左移動n個位置。需要注意的是,如果用左向鍵,游標左移不能超出該行的開頭;如果用,游標移到上面一行或幾行的適當位置。

j、、¯ (向下鍵)

執行一次向下鍵游標向下移動一個位置(即一行),但游標所在的列不變。當這些命令前面加上數字n,則游標下移n行。

Vi除了可以用向下鍵將游標下移外,還可以用鍵和“+”鍵將游標下移一行或n行(不包括本行在內),但此時游標下移之後將位於該行的第一個字元處。例如:

3j 游標下移3行,且游標所在列的位置不變。

3+或3 游標下移3行,且游標位於該行的行首。

k、、­ (向上鍵)

執行一次向上鍵游標向上移動一個位置(即一行),但游標所在的列不變。同樣在這些命令前面加上數字n,則游標上移n行。

若希望游標上移之後,游標位於該行的行首,則可以使用命令“- ”。

L (移至行首)

L 命令是將游標移到當前行的開頭,即將游標移至當前行的第一個非空白處(非製表符或非空格符)。

$(移至行尾)

該命令將游標移到當前行的行尾,停在最後一個字元上。若在$命令之前加上一個數字n,則游標下移n-1行併到達行尾。

[行號] G(移至指定行)

該命令將游標移至指定行號所指定的行的行首。這種移動稱為絕對定位移動。

[例8]

#include

main ( )

{ int k ;

for ( k=0 ; k<3 ; k++) add( );

}

add( )

{ static int x=0;

x++ ;

printf(“x = %d ”, x);

}

~

~

~

~

~

“ example.c” 12 lines, 125 characters

鍵入命令:6G後,螢幕顯示如下:

#include

main ( )

{ int k ;

for ( k=0 ; k<3 ; k++) add( );

}

add( )

{ static int x=0;

x++ ;

printf(“x = %d ”, x);

}

~

~

~

~

~

“ example.c” 12 lines, 125 characters

游標移到了第6行的行首。

若省略行號,則游標移至該檔案的最後一行的行首,即無論該檔案有多少屏,都跳至最後一行。

第二十七課 vi命令   2000年/6月/26日

 

在螢幕上移動

Vi提供了三個關於游標在全螢幕上移動並且檔案本身不發生滾動的命令。它們分別是H、M和L命令。

H命令

該命令將游標移至螢幕首行的行首(即左上角),也就是當前螢幕的第一行,而不是整個檔案的第一行。利用此命令可以快速將游標移至螢幕頂部。若在H命令之前加上數字n,則將游標移至第n行的行首。

[例9] 螢幕顯示如下內容:

#include

main ( )

{ int k ;

for ( k=0 ; k<3 ; k++) add( ); }

add( )

{ static int x=0;

x++ ;

printf(“x=%d ”, x);

}

~

~

~

~

~

“ example.c” [ New File]

在命令模式下輸入4H命令後,游標移到以for開頭的這一行的字母f上。

值得一提的是,使用命令dH將會刪除從游標當前所在行至所顯示螢幕首行的全部內容。

M命令

該命令將游標移至螢幕顯示檔案的中間行的行首。即如果當前螢幕已經充滿,則移動到整個螢幕的中間行;如果並未充滿,則移動到文字的那些行的中間行。利用此命令可以快速地將游標從螢幕的任意位置移至螢幕顯示檔案的中間行的行首。例如,在上面螢幕顯示的情況下(不論游標在螢幕的何處),在命令模式下,輸入命令 M之後,游標都將移到add這一行的字母a上。

同樣值得一提的是,使用命令dM將會刪除從游標當前所在行至螢幕顯示檔案的中間行的全部內容。

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 一共提供了三組關於按字移動游標的命令,分別是:

w和W命令

將游標右移至下一個字的字首;

[例11] 螢幕上顯示如下:

printf(“Hello Mr.Huang! ”);

現在使用w命令,把游標移到下一個字(狹義)的字首“(”上:

printf(“Hello Mr.Huang! ”);

下面使用W命令,將把游標移到下一個字(廣義)的字首“M”上:

printf(“Hello Mr.Huang! ”);

e和E命令

如果游標起始位置處於字內(即非字尾處),則該命令將把游標移到本字字尾;如果游標起始位置處於字尾,則該命令將把游標移動到下一個字的字尾。

b和B

如果游標處於所在字內(即非字首),則該命令將把游標移至本字字首;如果游標處於所在字字首,則該命令將把游標移到上一個字的字首。

[例12] 螢幕顯示如下:

printf(“Hello Mr.Huang! ”);

現在使用b命令,由於游標處於該字中間,所以游標移動到本字字首“H”處:

printf(“Hello Mr.Huang! ”);

如果使用B命令,則如下所示:

printf(“Hello Mr.Huang! ”);

按句移動游標

在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。

 

 

i命令

插入文字從游標所在位置前開始,並且插入過程中可以使用鍵刪除錯誤的輸入。此時Vi處於插入狀態,螢幕最下行顯示“--INSERT--”(插入)字樣。

[例14] 有一正在編輯的檔案,如下所示:

Welcome to vi world!Come on!

~

~

游標位於第一個“!”上,需在其前面插入:

This is an example!

使用i命令,並輸入相應文字後,螢幕顯示如下:

Welcome to vi world This is an example!!Come on!

~

~

由此例可以看到,游標本來是在第一個“!”處,但是由於是從游標所在位置前開始插入,所以這個“!”就被擠到了新插入的文字之後。

I命令

該命令是將游標移到當前行的行首,然後在其前插入文字

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-938916/,如需轉載,請註明出處,否則將追究法律責任。

相關文章