歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux命令 >> Linux教程-vi命令(3)

Linux教程-vi命令(3)

日期:2017/2/28 10:05:40   编辑:Linux命令
Linux命令
  附加(append)命令
  
  Vi提供了兩個附加插入命令:a和A。
  
  a命令
  
  該命令用於在光標當前所在位置之後追加新文本。新輸入的文本放在光標之後,在光標後的原文本將相應地向後移動。光標可在一行的任何位置。
  
  [例15] 以例14原始情況為例,使用a命令,並輸入相應文本,屏幕顯示如下:
  
  Welcome to vi world!This is an example!Come on!
  
  ~
  
  ~
  
  本例中光標後的文本“Come on!”被新輸入的文本擠到了後面。
  
  A命令
  
  該命令與a命令不同的是,A命令將把光標挪到所在行的行尾,從那裡開始插入新文本。當輸入A命令後,光標自動移到該行的行尾。
  
  a和A命令是把文本插入到行尾的唯一方法。
  
  打開(open)命令
  
  不論是Insert命令也好,還是append命令也好,所插入的內容都是從當前行中的某個位置開始的。若我們希望在某行之前或某行之後插入一些新行,則應使用open命令。
  
  Vi提供了兩個打開命令:o和O。
  
  o命令
  
  該命令將在光標所在行的下面新開一行,並將光標置於該行的行首,等待輸入文本。要注意,當使用刪除字符時只能刪除從插入模式開始的位置以後的字符,對於以前的字符不起作用。而且還可以在文本輸入方式下輸入一些控制字符,例如,Ctrl+l即是插入分頁符,顯示為^L。
  
  [例16] 以例14的原始情況為例,只是這次要在當前行下面一行輸入文本。使用o命令,並輸入相應文本,屏幕顯示如下:
  
  Welcome to vi world!Come on!
  
  This is an example!
  
  ~
  
  ~
  
  新輸入的文本出現在原來文本所在行的下一行。
  
  O命令
  
  和o命令相反,O命令是在光標所在行的上面插入一行,並將光標置於該行的行首,等待輸入文本。
  
  [例17] 與例14的原始情況相同,要在當前行的上面一行輸入文本。使用O命令並輸入文本後,屏幕顯示如下:
  
  This is an example!
  
  Welcome to vi world!Come on!
  
  ~
  
  ~
  
  文本插入到了當前行之上。
  
  11.3.4 文本修改
  
  在命令模式下可以使用Vi提供的各種有關命令對文本進行修改,包括對文本內容的刪除、復制、取代和替換等。
  
  文本刪除
  
  在編輯文本時,經常需要刪除一些不需要的文本,我們可以用鍵將輸錯或不需要的文本刪除,但此時有一個限制就是當刪到行頭之後,再想刪上面那行的內容是不可能的。
  
  在命令模式下,Vi提供了許多刪除命令。這些命令大多是以d開頭的。常用的有:
  
  1. 刪除單個字符
  
  x: 刪除光標處的字符。若在x之前加上一個數字n,則刪除從光標所在位置開始向右的n個字符。
  
  X:刪除光標前面的那個字符。若在X之前加上一個數字n,則刪除從光標前面那個字符開始向左的n個字符。
  
  顯然這兩個命令是刪除少量字符的快捷方法。
  
  2. 刪除多個字符
  
  dd:刪除光標所在的整行。在dd前可加上一個數字n,表示刪除當前行及其後n-1行的內容。
  
  D或d$:兩命令功能一樣,都是刪除從光標所在處開始到行尾的內容。
  
  d0:刪除從光標前一個字符開始到行首的內容。
  
  dw:刪除一個單詞。若光標處在某個詞的中間,則從光標所在位置開始刪至詞尾。同dd命令一樣,可在dw之前加一個數字n,表示刪除n個指定的單詞。
  
  如果用戶不小心進行了誤刪除操作,也不要緊,Vi提供了恢復誤操作的命令,並且可以將恢復的內容移動,放在文本的任何地方。恢復命令用² np,其中n為寄存器號。這是因為Vi內部有9個用於維護刪除操作的寄存器,分別用數字1,2,¼ ,9表示,它們分別保存以往用dd命令刪除的內容。這些寄存器組成一個隊列,例如最近一次使用dd命令刪除的內容被放到寄存器1中;當下次再使用dd命令刪除文本內容時,Vi將把寄存器1的內容轉存到寄存器2中,而寄存器1中又將是最近一次dd命令刪除的內容。以此類推,Vi可以保存有最近九次用dd命令刪除的內容,而前面的用dd命令刪除的內容則被拋棄。
  
  [例18] 假設當前編輯文件為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 ;
  
  }
  
  我們對其進行如下操作:
  
  將光標移至文件第一行,按dd命令,此時文件第一行的內容被刪除,且被刪除的內容保存在寄存器1中;
  
  按5j使光標下移至第一個printf語句行;
  
  按dd命令將該行刪除,此時寄存器1中將保存剛剛被刪除的內容:
  
  printf (“ please input a number :\ n ” );
  
  而寄存器1原有的內容:
  
  /* this is a example */
  
  則被保存到寄存器2中;
  
  
  在最末行模式下,也可以對文件內容進行刪除,但它只能刪除整行,一次可將某個指定范圍內(起始行號,終止行號)的所有行全部刪除。需要注意的是,用此種方法進行刪除時,Vi並不把所刪內容放入寄存器中,因而當發生誤刪除操作時,不能用² np命令恢復,只能用u命令進行有限的恢復。
  
  最後提一下,如何在文本輸入方式時將所輸入文本刪除。用戶使用組合鍵即可,此時光標將返回插入開始的位置,並且Vi仍處於文本輸入方式。
  
  取消上一命令(Undo)
  
  取消上一命令(Undo),也稱復原命令,是非常有用的命令,它可以取消前一次的誤操作或不合適的操作對文件造成的影響,使之回復到這種誤操作或不合適操作被執行之前的狀態。
  
  取消上一命令有兩種形式,在命令模式下鍵入字符u和U。它們的功能都是取消剛才輸入的命令,恢復到原來的情況。小寫u和大寫U在具體細節上有所不同,二者的區別在於,大寫U命令的功能是恢復到誤操作命令前的情況,即如果插入命令後使用U命令,就刪除剛剛插入的內容;如果刪除命令後使用U命令,就相當於在光標處又插入剛剛刪除的內容。這裡把所有修改文本的命令都視為插入命令。也就是說,U命令只能取消前一步操作,如果用U命令撤消了前一步操作,當再按U鍵時,並不是撤消再前一步的操作,而是撤消了剛才U命令執行的操作,也就是又恢復到第一次使用U命令之前的狀態,結果是什麼都沒做。而小寫u命令的功能是把當前行恢復成被編輯前的狀態,而不管此行被編輯了多少次。
  
  
  [例19] 原來屏幕顯示內容為:
  
  #include
  
  main ( )
  
  {
  
  }
  
  在命令模式下輸入命令o,插入一新行,輸入需要插入的內容後再按回到命令模式,屏幕顯示內容為:
  
  #include
  
  main ( )
  
  {
  
  printf ( “ How do you do ! ” ) ;
  
  }
  
  若想取消這一插入操作,請按命令U後,屏幕恢復到原來顯示的情況。
  
  注意:對於取消命令仍可以再使用取消命令。這時會產生一種“負負得正”的效果,文件狀態將恢復到第一次執行取消命令之前的狀態,如同沒做任何操作一般。例如在上例中,再使用一次命令U,屏幕將顯示的內容仍為插入後的內容。
  
  重復命令(Redo)
  
  重復命令也是一個非常常用的命令。在文本編輯中經常會碰到需要機械地重復一些操作,這時就需要用到重復命令。它可以讓用戶方便地再執行一次前面剛完成的某個復雜的命令。
  
  重復命令只能在命令模式下工作,在該模式下按“.”鍵既可。執行一個重復命令時,其結果是依賴於光標當前位置的。
  
  [例20] 屏幕顯示內容為:
  
  #include
  
  main ( )
  
  {
  
  }
  
  輸入命令o,並輸入一行內容後,再< Esc >返回到命令模式下,屏幕顯示內容為:
  
  #include
  
  main ( )
  
  {
  
  printf ( “ How do you do ! ” ) ;
  
  }
  
  此時輸入命令“.”,屏幕顯示內容為:
  
  #include
  
  main ( )
  
  {
  
  printf ( “ How do you do ! ” ) ;
  
  printf ( “ How do you do ! ” ) ;
  
    摘自《Turbolinux》
Copyright © Linux教程網 All Rights Reserved