1. 程式人生 > >神奇的編輯器vi/vim

神奇的編輯器vi/vim

上一個 處的 一個 創建 圖片 中間 lock 接口 4行

所有的Linux發行版系統上都會默認內置vi編輯器,而不一定帶有其他文本編輯器,非常通用;其次,很多軟件的編輯接口都會默認調用vi;再者就是對很多熱愛編程的大佬來說,可大大提高編程效率,很多黑客也是使用這個編輯器來減少自己摸鼠標時間的。

VI命令的工作模式

更詳細的文檔請參考:http://c.biancheng.net/view/519.html 或 http://www.runoob.com/linux/linux-vim.html
簡化圖:技術分享圖片

vi編輯器有三種工作模式:命令模式、插入模式、末行模式。

  • 命令模式:
    此時從鍵盤上輸入的任何字符都被當做編輯命令來解釋,同時該模式是進入 vi 編輯器後的默認模式。任何時候,不管用戶處於何種模式,按下Esc鍵即可進入命令模式
  • 插入模式(亦稱編輯模式):
    在命令模式下輸入插入命令i、附加命令a、打開命令o、修改命令c、取代命令r或替換命令s都可以進入文本輸入模式。在該模式下,用戶輸入的任何字符都被 vi 當做文件內容保存起來,並將其顯示在屏幕上。
  • 末行模式(亦稱ex 轉義模式):
    在命令模式下,用戶按 : 鍵即可進入末行模式下,此時 vi 會在顯示窗口的最後一行(通常也是屏幕的最後一行)顯示一個:作為末行模式的說明符,等待用戶輸入命令。多數文件管理命令都是在此模式下執行的(如把編輯緩沖區的內容寫到文件中等)。
    vi 編輯器的 3 種模式的轉換如下圖所示:
    技術分享圖片

VI命令的基本操作

一下文本內容的“#”為註釋內容,說明功能

進入文件
vi test.py  # 打開名為test.py的文件,若不存在則創建並打開該文件

如果只輸入 vi,而不帶文件名,也可以進入 vi。這時編輯的文件是沒有文件名的,所以在退出 vi 時,需要在退出命令後輸入文件名,這樣才能保證該文件被保存在磁盤中。

修改文件
插入文本(i和I)

i:將文本插入到光標所在位置前
I:I 命令將文本插入當前行的行首

追加文本(a和A)

a:將新文本追加到光標當前所在位置之後
A:命令將新文本追加到所在行的行尾

空行插入命令(o和O)

o:命令將在光標所在行的下面插入一個空行,並將光標置於該行的行首
O:命令在光標所在行的上面插入一個空行,並將光標置於該行的行首。

移動光標
字符移動
移動命令 意義
h 左移一個光標
j 下移一個光標
k 上移一個光標
l 右移一個光標
按字移動
  • w 和 W 命令將光標右移至下一個字的字首。
    區別:
    -w 所指的字是指英文單詞、標點符號和非字母字符;
    -W 所指的字是指兩個空格之間的任何內容;
  • 如果光標起始位置處於字內,則 e 和 E 命令將把光標移到本字字尾;
    如果光標起始位置處於字尾,則 e 和 E 命令將把光標移動到下一個字的字尾。
    區別:
    -e 所指的字是指英文單詞、標點符號和非字母字符;
    -E 所指的字是指兩個空格之間的任何內容;
  • 如果光標處於所在字內,則 b 和 B 命令將把光標移至本字字首;如果光標處於所在字字首,則 b 和 B 命令將把光標移到上一個字的字首。
    區別:
    -b 命令所指的字是指英文單詞、標點符號和非字母字符;
    -B 命令所指的字是指兩個空格之間的任何內容。
按行移動
  • H:將光標移至當前屏幕的第 1 行,而不是整個文件的第 1 行。若在 H 命令之前加 上數字 n,則將光標移至第 n 行的行首
  • M:將光標移至屏幕顯示文件的中間行的行首。即如果當前屏幕已經充滿,則移動到整個屏幕的中間行;否則,移動到顯示文本的那些行的中間行。
  • L:將光標移至屏幕顯示文件的最底行的行首。即如果文件內容需要超過一個屏幕顯示時,該命令將光標移至屏幕上最底行的行首;否則該命令將光標移至文件最後一行的行首。
  • G:在全文的範圍內移動光標,此時的光標移動範圍不再受屏幕的限制。例如,在上例中,在命令模式下輸入命令 5G 之後光標將移到第 5 行的行首。
按段落移動光標

一個段落被定義為是以一個空白行開始和結束的片段。按段落移動光標的命令有以下兩種:

  • {:該命令將光標向前移至上一個段落的開頭。
  • }:該命令將光標向後移至下一個段落的開頭。
文本移動
文本行移動
  • >:將指定的正文行向右移動。
  • >n:n表示光標所在位置後面的文本行數。也可以不寫 n,此時默認為 1。
    <:命令將指定的正文行向左移動。其使用方式與命令相同,但是方向相反。
  • >>:該命令將光標所在行右移 8 個空格。如果在>>命令之前給出一個數字 n,例如 4,則表示光標當前行及其下面的 3 行(共4行)都右移 8 個空格。
  • <<:命令將光標所在行左移 8 個空格。其使用與>>命令相同,但是移動方向相反。
文本跨行移動(m命令)
  • imj:表示把第 i 行移至第 j 行的下方。下面實例演示了 m 命令的使用。例:6m2,就是將第6行的內容移動到第2行的下方
替換
字符替換
  • r: 將當前光標所指的字符替換為提供的字符。可以在該命令之前加上數字 n,表示將從當前字符開始的 n 個字符替換為提供的字符。下面實例演示了 r 命令的使用。
  • R:該命令會讓 vi 進入 replace 模式。在此模式下,每個輸入的字符都會替換當前光標下的字符,直到輸入 <Esc> 結束該模式。
字符串替換
  • [range]s/s1/s2/ [option]
  • [x] [range] 表示檢索範圍,省略時表示當前行;
    1,10表示從第 1 行到 10 行;
    %表示整個文件,同1, $;
    . ,$從當前行到文件尾。
  • [x] s 為替換命令。
  • [x] s1 要被替換的串,s2 為替換的串。
  • [x] option 表示選項:
    /g表示在全局文件中進行替換;
    /c表示在每次替換之前需要用戶進行確認;
    省略時僅對每行第一個匹配串進行替換。
    例如:%s/<abc/cde 表示將以 abc 開頭的單詞替換為以 cde 開頭。
輔助操作
字符串檢索
  • /String:從光標處開始向後尋找字符串 string。
  • ?String:從光標處開始向前尋找字符串 string。
文本復制和粘貼
  • v 命令:在命令模式下進行文本選擇。在需要選擇的文本的起始處按下 v 鍵進入塊選擇模式,然後移動光標到塊尾處。這之間的部分被高亮顯示,表示被選中.
  • V 命令:在命令模式下按行進行文本選擇。在需要選擇的文本的第一行按下 V 鍵,然後移動光標到塊的最後一行。這之間的所有行被高亮顯示,表示被選中。
  • yy :復制光標所在的整行。在 yy 前可加一個數字 n,表示復制當前行及其後 n-1 行的內容。
  • Y 或 y$ :兩命令功能一樣,都是復制從光標所在處開始到行尾的內容。
  • yw :復制一個單詞。若光標處在某個詞的中間,則從光標所在位置開始復制至詞尾。同 yy 命令一樣,可在 yw 之前加一個數字 n,表示復制 n 個指定的單詞。
  • y) :復制到下一句幵始的所有字符。
  • y} :復制到下一段開始的所有字符。
  • y<CR> (<CR> 表示回車):復制包括當前行在內的兩行內容。
  • p 命令:粘貼命令,粘貼當前緩沖區中的內容
文本刪除

刪除單個字符

  • x 命令:刪除光標處的字符。若在 x 之前加上一個數字 n,則刪除從光標所在位置開始向右的 n 個字符
  • X 命令:刪除光標前面的字符。若在 X 之前加上一個數字 n,則刪除從光標前面那個字符開始向左的 n 個字符。

刪除多個字符

  • dd 命令:該命令刪除光標所在的整行。在 dd 前可加上一個數字 n,表示刪除當前行及其後 n-1 行的內容。
  • D 命令或 d$ 命令:兩個命令功能一樣,都是刪除從光標所在處開始到行尾的內容。
  • d0 命令:該命令刪除從光標前一個字符開始到行首的內容。
  • dw 命令:該命令刪除一個單詞。若光標處在某個詞的中間,則從光標所在位置開始刪至詞尾。同 dd 命令一樣,可在 dw 之前加一個數字n,表示刪除 n 個指定的單詞。
  • d( 命令:該命令刪除到上一句開始的所有字符。
  • d) 命令:該命令刪除到下一句開始的所有字符。
  • d} 命令:該命令刪除到上一段開始的所有字符。
  • d{ 命令:該命令刪除到下一段開始的所有字符。
  • d<CR> 命令:該命令(<CR>表示回車)刪除包括當前行在內的兩行字符。
操作撤銷
  • u :該命令撤銷上一次所做的操作。多次使用 u 命令會一步一步依次撤銷之前做過的操作(在一次切換到文本輸入模式中輸入的所有文本算一次操作)。
  • U :該命令會一次性撤銷自上次移動到當前行以來做過的所有操作,再使用一次 U 命令則撤銷之前的 U 命令所做的操作,恢復被撤銷的內容。
退出文件
  • :wq vi將先保存文件,然後退出 vi 返回到 shell。如果當前文件尚未取名,則需要現指定一個文件名。
  • :x 在末行模式下,若當前編輯文件曾被修改過,則 vi 會保存該文件。否則 vi 直接退出,不保存該文件。

神奇的編輯器vi/vim