VI命令使用大全(轉帖) from:http://www.2to2.cn/article_view.asp?id=285 從shell中啓動可視化編輯器 vi filename 指示shell啓動vi編輯器,並將參數filename傳給它。如果當前目前中存在該文件,則vi編輯器將它解釋爲要打開的文件;如果沒有該文件,則vi編譯器創建新文件 vi file1 file2 file3 shell傳遞3個參數給vi,vi將它們解釋爲要打開的文件。可以使用:w命令保存文件,使用:n命令訪問下一個文件 vi +# filename 打開文件,並將光標移到指定的行。例如,命令vi +100 records 從第100行開始編輯文件records vi +/the filename 打開文件,並將光標移動包含有目標字符串的行。例如,命令vi +/Jason friends 從第1個含有字符串Jason的行開始編輯文件friends view filename 打開文件進行編輯,但是拒絕保存對文件的修改,除非使用w!命令 光標移動命令 hjkl 將光標分別向左、下、上、右移動一個字符 0(零) 將光標移到當前行的行首 ^(脫字符) 同0一樣將光標移到當前行的行首 $ 將光標移到當前行的行末 ##G 將光標移到G前面的數字指定的行。例如,42G將光標移到文件的第42行 G 將光標移到文件的最後一行 w 將光標向前移到下一個單詞的首字母 e 將光標向前移到下一個單詞的最後一個字母 b 將光標向後移到上一個單詞首字母 - 將光標定位到上一行的行首 + 將光標定位到下一行的行首 12| 將光標定位到當前行的第12列 L 將光標定位到屏幕的最下面一行 M 將光標定位到屏幕中間的一行 H 將光標定位到屏幕的最上面一行 '' 兩個單引號將光標移到它的先前的位置 光標定位命令(上下文的) fb 將光標向前移到當前行上的下一個字母b(或者其他的任意指定的字符) Fb 將光標向後移到當前行上的上一個字母b(或指定的字符) t# 將光標移到當前行上字符#的第1個實例的右側。例如,命令tM將光標移到當前行上第1個M的右側 T# 在當前行上向左移動光標,將它移到字符#的第1個實例的前一字符 /word 將光標向前移到單詞word的下一個實例 ?word 將光標向後移到單詞word的上一個實例 n 將光標移到前面命令/word或?word中指定模式的下一個實例 顯示調整命令 Ctrl+D 顯示文件中的下半屏文本 Ctrl+U 顯示文件中的上半屏文本 Ctrl+F 顯示文件中的下一屏文本 Ctrl+B 顯示文件中的上一屏文本 設置顯示選項 :set number 將行號作爲屏幕顯示的一部分,但是行號並不是文件的一部分。它的縮寫形式爲:set nu :set nonumber 清除屏幕上的行號。也可以使用縮寫形式:set nonu :set showmode 在屏幕的右下角顯示追加模式信息 :set list 在每行的行末顯示美元符號,並用Ctrl+I表示製表符 :set showmatch 在輸入)或]時,將光標移到與之匹配的(或[ :set window=value 定義屏幕上顯示的文本行的行數 :set autoindent 自動縮進。也可以使用縮寫形式:set ai :set tabstop=value 設置顯示製表符的空格字符個數。也可以使用縮寫形式ts=value :set wrapmargin=value 設置顯示器的右頁邊。當輸入進入所設置的頁邊時,編輯器自動回車換行 :set ignorecase 指示編輯器搜索字符串,並忽略目標中字母的大小寫 :set 顯示設置的所有選項 :set all 顯示所有可以設置的選項 文本刪除命令 dd 刪除當前光標所有的文本行 #dd 刪除#行文本 dw 從文本中刪除一個單詞 #dw 從文本中刪除#個單詞 x 刪除光標所在的一個字符 #x 從文本中刪除#個字符 D 刪除當前行上光標後面的部分 :#,#d 例如,:12,37d 將刪除第12~37行之間的所有文本,包括第12和37行 撤銷命令 u 撤銷。恢復最近一次的文本修改操作,即使已經移動了光標。在Linux系統中,再次使用撤銷命令將恢復更前一次的文本修改操作。在BSD的vi中,第2次撤銷操作將撤銷第一次撤銷操作,恢復第1次撤銷前修改的文本 :redo 在Linux系統中,取消撤銷操作恢復文本修改。在標準的UNIX系統中,第2個u命令取消第1個u命令,結果就是一個“redo” U 如果在修改後還沒有將光標移出當前行,則可以撤銷對當前行進行的所有的文本修改 向文本中添加文本 a(小寫) 從光標的右側開始插入文本 A(大寫) 從當前行的行末開始添加文本 i(小寫) 從光標的左側開始插入文本 I(大寫) 從當前行的行首插入文本 o(小寫) 在光標的下面打開(或插入)一個新行 O(大寫) 在光標的上面打開一個新行 :#r filename 例如,:8r report.old讀取文件report.old,並將它的內容放到當前文件的第8行之後 Esc 無論使用什麼命令進入了追加/插入模式,都可以通過按Esc鍵離開追加模式返回到vi的命令模式 Ctrl+V 允許輸入控制字符。按Ctrl+V鍵後再按回車鍵將把Ctrl+M插入到文件中 在文件中修改文本 cw 僅僅修改光標處的單詞(刪除單詞,然後進入追加模式中,以在被刪除單詞的位置添加文本) s(小寫) 替換單個字符 S(大寫) 替換整行文本 cc 替換整行文本(同S) r 用輸入的下一個字符替代當前光標處的字符,並自動返回到命令模式 R 將編輯器放到覆蓋模式,用輸入的字符來逐個替換光標處的字符 C(大寫) 修改行上從光標到行末之間的文本 ct# 修改行上從光標到前向第1個目標字符之間的文本。例如ctY將刪除當前行上從光標到向前第1個字符Y之間的所有文本,並進入追加模式以在刪除文本的位置添加文本 cf# 修改行上從光標到前向第1個目標字符之間的文本(包括目標字符)。例如cfY將刪除當前行上從光標到向前第1個字符Y之間(包括Y)的所有文本,並進入追加模式以在刪除文本的位置添加文本 cT# 修改行上從光標到後向第1個目標字符之間的文本。例如cTY將刪除當前行上從光標到向後第1個字符Y之間的所有文本,並進入追加模式以在刪除文本的位置添加文本 cF# 修改行上從光標到後向第1個目標字符之間的文本(包括目標字符)。例如cFY將刪除當前行上從光標到向後第1個字符Y之間(包括Y)的所有文本,並進入追加模式以在刪除文本的位置添加文本 接出和粘貼行的單詞 yy 將當前行復制或接出到內在緩衝區。20yy將當前行和它後面的19行(共20行)文本複製到內存。目標行仍然保留在文件中,可以使用p命令將這些內存中的文本粘貼到文件中 dd 刪除當前行,並將它放到與yy命令使用的相同的內存緩衝區。目標行從文件中刪除,但是可以使用p命令將它粘貼到文件中的其他地方 yw 將當前光標所在的單詞接出或複製到內在緩衝區。6yw命令將把當前單詞和它後面的5個(共6個)單詞複製到內存 dw 刪除當前的單詞,並將它放到與yw命令使用的相同的內存緩衝區。可以使用p命令將單詞粘貼到文件的其他地方 yt# 接出從光標到向前一個字符(不包括該字符)之間的文本。例如,ytB命令將從光標到字符B的下一實例(不包括字符B)之間的文本接出或複製到內存 yf# 接出從光標到向前一個字符(包括該字符)之間的文本。例如,yf:命令將從光標到字符:的下一個實例(包括字符:)之間的文本接出或複製到內存 yT# 後向接出(不包括目標字符)。例如,yTN命令將從光標到字符N的後向第1個實例之間的文本(不包括字符N)接出或複製到內存 yF# 後向接出(包括目標字符)。例如,yFJ命令將把從光標到字符N的向後第1個實例之間的文本(包括字符N)接出或複製到內存 p 將內存中的文本行粘貼到文件中光標所在行的下面,或將內存中的單詞粘貼到文件中光標的右側 P(大寫) 將接出或刪除的文本行粘貼到文件中光標所在行的上面。或將接出或刪除的單詞粘貼到文件中光標的左側 文件移動命令 J 將下行文本同當前行合併成一行 :#,# move # 將指定的行移到目標位置。:12,35 move 58命令將第12~35行之間的所有文本移到第58行的後面。縮寫爲mo :1,26 co 82 將第1~26行之間的所有文本複製到第82行的後面(可以選擇行號) 使用可視化編輯器進行全局編輯 :s /target/replacement/ 查找當前行上目標字符串的第1個實例並刪除,然後用字符串replacement替換。只修改當前行上的第1個目標實例 :g /target/s//replacement/ 查找所有行上目標字符串的第1個實例並刪除,然後用字符串replacement替換。修改所有行上目標的第1個實例 :#,# s/target/replacement/ 在指定的行上進行替換。例如,:7,37 s/march/walk/將查找第7~37行之間的所有文本行,並用字符串walk替換每行中的第1個目標字符串march。所有指定行上的第1個目標字符串修改 :#,# s/target/replacement/g 在指定的行上進行全局替換。例如,:1,$ s/fun/joyful/g 將在第1行到文件最後一行之間查找目標字符串fun的所有實例並刪除,然後用字符串joyful替換。指定行上的目標字符串的所有實例都被修改 :g /target/s/replacement 查找所有行上目標字符串的第1個實例並刪除,然後用字符串replacement替換。所有行上的第1個目標都被修改 :#,# target/s/replacement/ 在指定的行上進行替換,例如,:7,37 march/s/walk命令在第7~37行之間每個文本行上查找目標字符串的第1個實例並刪除,然後用字符串walk替換。所有指定行上的第1個目標字符串都被修改 :#,# target/s/replacement/g 在指定的行上進行全局替換。例如,:1,$ fun/s/joyful/g將在第1行到文件最後一行之間查找目標字符串fun的所有實例並刪除,然後用字符串joyful替換。指定行上的所有目標字符串都被修改 編輯工具:映射,縮寫和標記 m# 用字母標記當前行。例如,ma命令表示用a標記當前行。即使移動了標記行,它仍然標記爲a,可以用a來定位該行 '# 定位標記行。例如,命令'a將光標移到標記a的行。命令'a,$d將刪除從標記行到文件末尾之間的所有行 :map # command string 在命令模式中輸入#時,將其作爲一個命令串。例如,:map #o#!/bin/ksh產生一個新的命令模式指令,您輸入#時,它被解釋爲:o打開個新行,並添加文本#!/bin/ksh到文件中。爲了在命令中包含回車和其他控制字符,可以在它們的前面用Ctrl+V命令 :ab abbreviation char-string 設置追加模式縮寫。例如,在命令模式中輸入:ab mv Milky Way Galaxy,則建立縮寫。如果在追加模式中輸入字符串mw,然後按Esc鍵,mw將被Milky Way Galaxy替代 在vi編輯器中向shell發出命令 :!ls 啓動一個shell,並讓shell運行ls程序。在運行完指定的程序後,必須按回車鍵以返回到編輯器中 :!ksh 啓動一個shell,它允許運行多個命令。退出shell可以回到編譯器中 :Or!speel% 對當前文件(%)進行拼寫檢查,並將spell的輸出詩篇到當前文件中,從第1行(0行後面)開始放置這些輸出 :31r!command% 運行UNIX命令(如cal或date)並將它的輸出讀入到當前文件,從第31行開始放置這些輸出 Ctrl+Z 用於掛起當前編輯會話進程的csh和ksh命令,它允許您向父shell發出命令 fg 重新激活掛起的編輯進程的csh和ksh命令 讀、寫和退出編輯器 :wq 保存編輯會話期間對文件所做的修改,退出編輯器返回到shell :q 如果沒有對文件進行修改或添加文件,可以用q退出對一個文件的編輯 :q! 退出對文件的編輯返回到shell模式,但是不保存在編輯會話期間對文件所做的修改 :w filename v將文件的緩衝區副本(修改版本)保存到一個新文件 w newtest 例如,:1,6 w newtext命令創建一個名爲newtext的文件,並將當前文件的第1~6行文本複製到文件newtext中 :1,6 w >> oldfile 將當前文件的第1~6行文本的一個副本追加到已有文件oldfile的末尾 :1,6 w! oldfile 用當前文件的第1~6行文本覆蓋文件oldfile 收集vi刪除精典 刪除操作 :%s/r//g 刪除DOS方式的回車^M :%s= *$== 刪除行尾空白 :%s/^(.*)n1/1$/ 刪除重複行 :%s/^.{-}pdf/new.pdf/ 只是刪除第一個pdf :%s/// 又是刪除多行註釋(咦?爲什麼要說「又」呢?) :g/s*^$/d 刪除所有空行 :這個好用有沒有人用過還有其他的方法嗎?(本博按:刪除無字符行應用:g/^$/d 刪除有一些空格的行應用 :g/^\s*$/d 表示以空格開頭(\s)若干個的行) :g!/^dd/d 刪除不含字符串'dd'的行 :v/^dd/d 同上 (譯釋:v == g!,就是不匹配!) :g/str1/,/str2/d 刪除所有第一個含str1到第一個含str2之間的行 :v/./.,/./-1join 壓縮空行 :g/^$/,/./-j 壓縮空行 ndw 或 ndW 刪除光標處開始及其後的 n-1 個字符。 d0 刪至行首。 d$ 刪至行尾。 ndd 刪除當前行及其後 n-1 行。 x 或 X 刪除一個字符。 Ctrl+u 刪除輸入方式下所輸入的文本。 ^R 恢復u的操作 J 把下一行合併到當前行尾 V 選擇一行 ^V 按下^V後即可進行矩形的選擇了 aw 選擇單詞 iw 內部單詞(無空格) as 選擇句子 is 選擇句子(無空格) ap 選擇段落 ip 選擇段落(無空格) D 刪除到行尾 x,y 刪除與複製包含高亮區 dl 刪除當前字符(與x命令功能相同) d0 刪除到某一行的開始位置 d^ 刪除到某一行的第一個字符位置(不包括空格或TAB字符) dw 刪除到某個單詞的結尾位置 d3w 刪除到第三個單詞的結尾位置 db 刪除到某個單詞的開始位置 dW 刪除到某個以空格作爲分隔符的單詞的結尾位置 dB 刪除到某個以空格作爲分隔符的單詞的開始位置 d7B 刪除到前面7個以空格作爲分隔符的單詞的開始位置 d) 刪除到某個語句的結尾位置 d4) 刪除到第四個語句的結尾位置 d( 刪除到某個語句的開始位置 d) 刪除到某個段落的結尾位置 d{ 刪除到某個段落的開始位置 d7{ 刪除到當前段落起始位置之前的第7個段落位置 dd 刪除當前行 d/text 刪除從文本中出現“text”中所指定字樣的位置, 一直向前直到下一個該字樣所出現的位置(但不包括該字樣)之間的內容 dfc 刪除從文本中出現字符“c”的位置,一直向前直到下一個該字符所出現的位置(包括該字符)之間的內容 dtc 刪除當前行直到下一個字符“c”所出現位置之間的內容 D 刪除到某一行的結尾 d$ 刪除到某一行的結尾 5dd 刪除從當前行所開始的5行內容 dL 刪除直到屏幕上最後一行的內容 dH 刪除直到屏幕上第一行的內容 dG 刪除直到工作緩存區結尾的內容 d1G 刪除直到工作緩存區開始的內容 |
vi命令及刪除經典
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.