歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux網絡 >> vi命令——TurboLinux網絡教室(2)

vi命令——TurboLinux網絡教室(2)

日期:2017/2/27 12:18:01   编辑:Linux網絡

第三十課 vi命令   2000年/7月/26日

文本內容的修改

文本內容的修改是指在編輯過程中,可以對文本中的某些字符,某些行進行修改,即用新輸入的文本代替需要修改的老文本,它等於先用刪除命令刪除需要修改的內容,然後再利用插入命令插入新的內容。所以在使用修改命令後,vi進入到文本輸入模式下,當輸入完新的內容後,一定要再按回到命令模式,否則Vi會一直認為是在文本輸入模式下,此時輸入的任何內容都被認為是修改的新內容。

Vi提供了三種修改命令,分別是c、C和cc。它們修改文本的范圍是由光標位置和光標移動命令二者限定的。下面分別介紹這三種修改命令。


c命令

c後緊跟光標移動命令,限定修改內容的范圍是從光標當前位置開始到指定的位置為止。

[例21] 原來屏幕顯示內容為文件xu.c

/* this is a example */

#include

void main( )

{

int i , j ;

printf( “ please input a number : \\ n ” );

scanf ( “ % d ” , &i ) ;

j = i + 100 ;

printf ( “ \\n j = % d \\n ” , j ) ;

return ;

}

輸入命令c7G時,屏幕顯示為:

/* this is a example */

#include

void main( )

{

int i , j ;

j = i + 100 ;

printf ( “\\n j = % d \\n ” , j ) ;

return ;

}

即把光標所在行至第7行(共2行)的內容刪除,並進入文本輸入模式,接著輸入:

int k ;

i = sqr ( k ) ;

最後按< Esc >鍵,結束修改,屏幕顯示為:

/* this is a example */

#include

void main( )

{

int i , j ;

int k ;

i = sqr ( k ) ;

j = i + 100 ;

printf ( “\\n j = % d\\n ” , j ) ;

return ;

}


由此可見,命令c中修改文本的范圍是由光標位置和光標移動命令二者限定的。


C、c$命令

C 、c$命令可以修改從光標當前位置開始到該行末尾或從光標當前位置開始到某行末尾范圍內的內容。

[例22] 屏幕顯示如下內容:

#include

輸入命令C後,屏幕顯示為:

#include <

接著輸入: math.h >,然後按< Esc > ,此時屏幕顯示內容為:

#include < math.h >

表示原文中的“stdio.h >”被修改為“math.h >”。

當在命令C之前加上數字n時,表示可以修改指定行數的內容。例如,3C命令就表示把光標所在位置的字符之後(注意不是整行)直到下面兩個整行的內容刪除,由隨後輸入的內容代替。


cc命令

cc命令的功能和C相同,只是修改的范圍和C不同,它是修改從光標所在行的起始位(不管光標處於該行的何列)到該行末尾或指定某行末尾范圍內的內容。

[例23] 屏幕顯示如下內容:

#include

輸入命令cc後,屏幕顯示為:


接著輸入:#include < math.h >,然後按 ,此時屏幕顯示內容為:

#include < math.h >

可見,光標所在行的全部內容都由新輸入的內容所代替。

同命令C一樣,也可以在cc之前加上數字n,表示要從光標當前行算起一共修改n行的內容。例如,5cc表示先刪除光標所在行及其下面的4行,然後輸入要修改的內容。

文本的替換

文本的替換即是用新輸入的文本代替原已有的文本。它同文本修改一樣,也是先執行刪除操作,再執行插入操作。

Vi提供的替換的命令有取代命令、替換命令和字替換命令。

1. 取代命令 :r和R

r:用隨後輸入的一個字符代替當前光標處的那個字符。

[例24] 屏幕上顯示為:

/* this as a program */

在命令模式下輸入命令ri,則結果顯示為:

/* this is a program */

此時當前光標處的字符被取代成“i”。

若在命令r之前加上一個數字,表示將要從當前光標處開始的指定數目的字符用在r後所輸入的字符替換。

[例25] 屏幕上顯示為:

/* this is a program */

在命令模式下輸入命令4rA,則結果顯示為:

/* this is a AAAAram */

此時把當前光標處的字符及其後的三個字符都取代為“A”。

R:用隨後輸入的文本取代從當前光標處及其後面的若干字符,每輸入一個字符就取代原有的一個字符,直到按< Esc >鍵結束這次取代。若新輸入的字符數超過原有對應字符數,則多出部分就附加在後面。

[例26] 屏幕上顯示為:

/* this is a program */

main ( )

輸入R,接著輸入:is a good example program * /,最後按鍵,屏幕顯示為:

/* this is a good example program * /

若在命令R之前加上一個數字,例如5R,則表示新輸入的文本重復出現5次,但只取代一個被輸入文本所覆蓋的字符序列,當前行中未被覆蓋的內容仍保留下來,只是位置相應右移。

[例27] 屏幕上顯示為:

/* this is a program */

輸入4RAA,屏幕顯示為:

/* this is a AAAAAAAA/

值得一提的是,利用R取代文本內容時,新輸入的文本可以占多行,取代時也只有光標所在行的對應字符被覆蓋。

[例28] 屏幕顯示為:

/* this is a program */

輸入R,隨後輸入AA

B

C C < Esc >

屏幕顯示為:

/* this is a AA

B

C Cm */

可見新輸入的6個字符(包括空格,但不包括< Esc >)取代原行中的6個字符。

2. 替換命令:s和S

s(小寫):該命令表示用隨後輸入的文本替換當前光標所在的字符。

[例29] 屏幕上顯示為:

/* this is a program */

輸入s命令,光標所在的“a”消失,隨後輸入:

A good example<Esc>,顯示為:

/*this is A good example program */

如果只用一個新字符替換光標所在字符,則s命令與r命令功能類似,如sh與rh的作用都是將光標所在字符變為h。但二者也有區別,r命令僅完成置換,而s命令在完成置換同時,工作模式從命令方式轉為文本輸入方式。因此,s命令的一般使用方式是:s隨後是要替換的正文,最後一定是, 結束文本輸入模式,返回到命令模式。

可以在s前面加一個數字n,則表示用s後輸入的文本替換從光標所在字符開始及其後的n-1個字符(共n個字符)。

[例30]屏幕顯示為:

/* this is good program */

輸入4s命令後,屏幕顯示為:

/* this is program */

接著輸入a 隨後按<Esc>鍵,屏幕顯示為:

/* this is a program */

S(大寫):該命令表示用新打入的正文替換光標當前行(整行)(不管光標位於何列)。

[例31] 屏幕顯示為:

/* this is a program */

main ( )

輸入S後,光標所在行成為空行,光標停在行的開頭。隨後輸入:

#include < stdio.h >

#include < math.h >

接著按< Esc >鍵,屏幕顯示為:

#include < stdio.h >

#include < math.h >

main ( )

如果在S之前給出一個數字n,例如3,則表示有3行(包括光標當前行及其下面2行)要被S命令之後輸入的正文所替換。

3. 字替換 cw

如果我們只希望將某個字的內容用其他文本串替換,則可用cw命令。cw所替換的是一個狹義的字。輸入這個命令後,Vi將把光標處的那個字刪除,然後用戶可輸入任何文本內容。輸入完成之後按鍵,Vi即用所輸入的內容替換原光標位置至相應字結尾的所有內容。

[例32] 屏幕顯示為:

printf( “ please input a number :\\ n ” );

在命令模式下輸入cw,接著輸入data後按鍵,屏幕顯示:

printf( “ please input a data :\\ n ” ) ;

即用“data”取代了“number”。


 

第三十一課 vi命令   2000年/7月/26日

文本行的合並

Vi提供了將文本中的某些行進行合並的命令。該命令用J(大寫字母)表示,其功能是把光標所在行與下面一行合並為一行。

[例33] 屏幕顯示為:

#include < stdio.h > /*this is a program */ main() 輸入命令J後,顯示為:

# includs < stdio.h > /*this is a program */

main()

如果在J命令之前給出一個數字n,例如3,則表示把光標當前行及其後面的2行(共3行)合並為一行。

[例34] 在原來屏幕顯示情況下,輸入3J命令,屏幕顯示為:

# include < stdio.h > /*this is a program */ main ( )

文本行的移動

在Vi中我們可以方便地將某個范圍內的文本行左右移動或從一個地方移至另外一個地方。


文本行的左右移動。

文本行左右移動的命令有 >、> 和 光標移動命令。移動正文行的范圍由光標所在行和隨後打入的光標移動命令所限定。

[例35] 屏幕顯示為:

/* this is a example */

#include

void main( )

{

int i , j ;

int k ;

i = sqr ( k ) ;

j = i + 100 ;

printf ( “\\n j = % d\\n ” , j ) ;

return ;

}

輸入>4G後,屏幕顯示為:

/* this is a example */

#include

void main( )

{

int i , j ;

int k ;

i = sqr ( k ) ;

j = i + 100 ;

printf ( “\\n j = % d\\n ” , j ) ;

return ;

}

(2)< 命令將限定正文行向左移動。其使用方式與>命令相同,只是移動方向相反。例如,> 命令將光標所在行右移8個空格。如果在>>命令之前給出一個數字n,例如4,則表示光標當前行及其下面的3行(共4行)都右移8個空格。

[例36] 屏幕原顯示為:

/* this is a example */

#include

void main( )

{

int i , j ;

int k ;

i = sqr ( k ) ;

j = i + 100 ;

printf ( “\\n j = % d\\n ” , j ) ;

return ;

}

輸入4>>後,屏幕顯示為:

/* this is a example */

#include

void main( )

{

int i , j ;

int k ;

j = i + 100 ;

printf ( “ \\n j = % d \\n ” , j ) ;

i = sqr ( k ) ;

return ;

}

(4)>命令相同,只是移動方向相反。


文本行的異行移動

我們可以利用下面的步驟完成文本行從一個地方移至另外一個地方。


將光標移至待移動文本的首行;


按ndd命令。其中n為待移動的行數。此時Vi將把待移動的文本行從文件中刪除,並將其放入到1號刪除寄存器中;


將光標移動到目的行處;


按2 1p將待移動的文本行從刪除寄存器中取出。

此時待移動的文本行就出現在目的位置處了。

上述方法雖然可以實現文本行的異行移動,但顯然太煩瑣。Vi還提供了另一種快捷的方法,就是在末行模式下使用命令m(Move命令)。使用方法為n m k,表示把第n行移至第k行的下方。

[例37] 屏幕顯示內容為:

/* this is a example */

#include

void main( )

{

int i , j ;

int k ;

i = sqr ( k ) ;

j = i + 100 ;

printf ( “ \\n j = % d \\n ” , j ) ;

return ;

}

現在想使第5行移至第4行位置處,可在末行模式下輸入:

:5 m 3

然後按< Enter >,屏幕顯示為:

/* this is a example */

#include

void main( )

int i , j ;

{

int k;

i = sqr ( k ) ;

j = i + 100 ;

printf ( “\\n j = % d \\n ” , j ) ;

return ;

}

在命令m之前,還可以指定一個行號范圍(起始行號與終止行號),表示要把指定范圍內的文本行移到指定位置。例如:

:2,5 m 0

表示把文件中的第二行至第五行的內容移至文件頭(第零行之下,這個零行使一個虛行)。

(Turbolinux 提供稿件)


Copyright © Linux教程網 All Rights Reserved