1. 程式人生 > >Linux vi常用快捷鍵

Linux vi常用快捷鍵

vi常用快捷鍵

  1. x 刪除游標處的字元
  2. dd 刪除整行
  3. i 在游標前插入文字
  4. a 在游標後插入文字
  5. o 當前行下插入新行
  6. u 撤銷最後一次修改
  7. :e! 放棄所有修改,從上次儲存開始處再編輯
  8. :wq 儲存退出
  9. :q! 不儲存退出
  10. /pattern:從游標開始處向檔案尾搜尋pattern
  11. ?pattern:從游標開始處向檔案首搜尋pattern

游標控制命令

       命令              游標移動

  • h或^h            向左移一個字元
  • j或^j或^n       向下移一行
  • k或^p            向上移一行
  • l或空格         向右移一個字元
  • G                  移到檔案的最後一行
  • nG                移到檔案的第n行
  • w                  移到下一個字的開頭
  • W                 移到下一個字的開頭,忽略標點符號
  • b                   移到前一個字的開頭
  • B                  移到前一個字的開頭,忽略標點符號
  • L                   移到螢幕的最後一行
  • M                  移到螢幕的中間一行
  • H                  移到螢幕的第一行
  • e    移到下一個字的結尾
  • E    移到下一個字的結尾,忽略標點符號
  • (    移到句子的開頭
  • )    移到句子的結尾
  • {    移到段落的開頭
  • }    移到下一個段落的開頭
  • 0或|    移到當前行的第一列
  • n|    移到當前行的第n列
  • ^    移到當前行的第一個非空字元
  • $    移到當前行的最後一個字元
  • +或return   移到下一行的第一個字元
  • -    移到前一行的第一個非空字元

在vi中新增文字

    命令    插入動作

  • a    在游標後插入文字
  • A    在當前行插入文字
  • i    在游標前插入文字
  • I    在當前行前插入文字
  • o    在當前行的下邊插入新行
  • O    在當前行的上邊插入新行
  • :r file    讀入檔案file內容,並插在當前行後
  • :nr file   讀入檔案file內容,並插在第n行後
  • escape    回到命令模式
  • ^v char    插入時忽略char的指定意義,這是為了插入特殊字元


在vi中刪除文字

     命令    刪除操作

  • x    刪除游標處的字元,可以在x前加上需要刪除的字元數目
  • nx    從當前游標處往後刪除n個字元
  • X    刪除游標前的字元,可以在X前加上需要刪除的字元數目
  • nX    從當前游標處往前刪除n個字元
  • dw    刪至下一個字的開頭
  • ndw    從當前游標處往後刪除n個字
  • dG    刪除行,直到檔案結束
  • dd    刪除整行
  • ndd    從當前行開始往後刪除
  • db    刪除游標前面的字
  • ndb    從當前行開始往前刪除n字
  • :n,md    從第m行開始往前刪除n行
  • d或d$    從游標處刪除到行尾
  • dcursor_command   刪除至游標命令處,如dG將從當產膽行刪除至檔案的末尾
  • ^h或backspace   插入時,刪除前面的字元
  • ^w    插入時,刪除前面的字

修改vi文字

      每個命令前面的數字表示該命令重複的次數

      命令    替換操作

  • rchar    用char替換當前字元
  • R text escape   用text替換當前字元直到換下Esc鍵
  • stext escape   用text代替當前字元
  • S或cctext escape 用text代替整行
  • cwtext escape   將當前字改為text
  • Ctext escape   將當前行餘下的改為text
  • cG escape   修改至檔案的末尾
  • ccursor_cmd text escape 從當前位置處到游標命令位置處都改為text


在vi中查詢與替換

       命令    查詢與替換操作

  • /text    在檔案中向前查詢text
  • ?text    在檔案中向後查詢text
  • n    在同一方向重複查詢
  • N    在相反方向重複查詢
  • ftext    在當前行向前查詢text
  • Ftext    在當前行向後查詢text
  • ttext    在當前行向前查詢text,並將游標定位在text的第一個字元
  • Ttext    在當前行向後查詢text,並將游標定位在text的第一個字元
  • :set ic    查詢時忽略大小寫
  • :set noic   查詢時對大小寫敏感
  • :s/oldtext/newtext 用newtext替換oldtext
  • :m,ns/oldtext/newtext 在m行通過n,用newtext替換oldtext
  • &    重複最後的:s命令
  • :g/text1/s/text2/text3 查詢包含text1的行,用text3替換text2
  • :g/text/command   在所有包含text的行執行command所表示的命令
  • :v/text/command   在所有不包含text的行執行command所表示的命令


在vi中複製文字

     命令    複製操作

  • yy    將當前行的內容放入臨時緩衝區
  • nyy    將n行的內容放入臨時緩衝區
  • p    將臨時緩衝區中的文字放入游標後
  • P    將臨時緩衝區中的文字放入游標前
  • "(a-z)nyy   複製n行放入名字為圓括號內的可命名緩衝區,省略n表示當前行
  • "(a-z)ndd   刪除n行放入名字為圓括號內的可命名緩衝區,省略n表示當前行
  • "(a-z)p    將名字為圓括號的可命名緩衝區的內容放入當前行後
  • "(a-z)P    將名字為圓括號的可命名緩衝區的內容放入當前行前

在vi中撤消與重複

     命令    撤消操作

  • u    撤消最後一次修改
  • U    撤消當前行的所有修改
  • .    重複最後一次修改
  • ,    以相反的方向重複前面的f、F、t或T查詢命令
  • ;    重複前面的f、F、t或T查詢命令
  • "np    取回最後第n次的刪除(緩衝區中存有一定次數的刪除內容,一般為9)
  • n    重複前面的/或?查詢命令
  • N    以相反方向重複前面的/或?命令

儲存文字和退出vi

      命令    儲存和/或退出操作

  • :w    儲存檔案但不退出vi
  • :w file    將修改儲存在file中但不退出vi
  • :wq或ZZ或:x   儲存檔案並退出vi
  • :q!    不儲存檔案,退出vi
  • :e!    放棄所有修改,從上次儲存檔案開始再編輯

vi中的選項

     選項    作用

  • :set all   列印所有選項
  • :set nooption   關閉option選項
  • :set nu    每行前列印行號
  • :set showmode   顯示是輸入模式還是替換模式
  • :set noic   查詢時忽略大小寫
  • :set list   顯示製表符(^I)和行尾符號
  • :set ts=8   為文字輸入設定tab stops
  • :set window=n   設定文字視窗顯示n行

vi的狀態

   選項    作用

  • :.=    列印當前行的行號
  • :=    列印檔案中的行數
  • ^g    顯示檔名、當前的行號、檔案的總行數和檔案位置的百分比
  • :l    使用字母"l"來顯示許多的特殊字元,如製表符和換行符


在文字中定位段落和放置標記

     選項    作用

  • {    在第一列插入{來定義一個段落
  • [[    回到段落的開頭處
  • ]]    向前移到下一個段落的開頭處
  • m(a-z)    用一個字母來標記當前位置,如用mz表示標記z
  • '(a-z)    將游標移動到指定的標記,如用'z表示移動到z

在vi中連線行

選項    作用

  • J    將下一行連線到當前行的末尾
  • nJ    連線後面n行


游標放置與螢幕調整

     選項          作用

  • H    將游標移動到螢幕的頂行
  • nH    將游標移動到螢幕頂行下的第n行
  • M    將游標移動到螢幕的中間
  • L    將游標移動到螢幕的底行
  • nL    將游標移動到螢幕底行上的第n行
  • ^e(ctrl+e)   將螢幕上滾一行
  • ^y    將螢幕下滾一行
  • ^u    將螢幕上滾半頁
  • ^d    將螢幕下滾半頁
  • ^b    將螢幕上滾一頁
  • ^f    將螢幕下滾一頁
  • ^l    重繪螢幕
  • z-return   將當前行置為螢幕的頂行
  • nz-return   將當前行下的第n行置為螢幕的頂行
  • z.    將當前行置為螢幕的中央
  • nz.    將當前行上的第n行置為螢幕的中央
  • z-    將當前行置為螢幕的底行
  • nz-    將當前行上的第n行置為螢幕的底行

vi中的shell轉義命令

       選項                       作用

  • :!command   執行shell的command命令,如:!ls
  • :!!    執行前一個shell命令
  • :r!command   讀取command命令的輸入並插入,如:r!ls會先執行ls,然後讀入內容
  • :w!command   將當前已編輯檔案作為command命令的標準輸入並執行command命令,如:w!grep all
  • :cd directory   將當前工作目錄更改為directory所表示的目錄
  • :sh    將啟動一個子shell,使用^d(ctrl+d)返回vi
  • :so file   在shell程式file中讀入和執行命令

vi中的巨集與縮寫
(避免使用控制鍵和符號,不要使用字元K、V、g、q、v、*、=和功能鍵)

選項    作用

  • :map key command_seq 定義一個鍵來執行command_seq,如:map e ea,無論什麼時候都可以e移到一個字的末尾來追加文字
  • :map    在狀態行顯示所有已定義的巨集
  • :umap key   刪除該鍵的巨集
  • :ab string1 string2 定義一個縮寫,使得當插入string1時,用string2替換string1。當要插入文字時,鍵入string1然後按Esc鍵,系統就插入了string2
  • :ab    顯示所有縮寫
  • :una string   取消string的縮寫

在vi中縮排文字

選項    作用

  • ^i(ctrl+i)或tab   插入文字時,插入移動的寬度,移動寬度是事先定義好的
  • :set ai    開啟自動縮排
  • :set sw=n   將移動寬度設定為n個字元
  • n<<    使n行都向左移動一個寬度
  • n>>    使n行都向右移動一個寬度,例如3>>就將接下來的三行每行都向右移動一個移動寬度