文本行的合並 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號刪除寄存器中; 將光標移動到目的行處; 按² 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》