標籤:
進入vi
vi filename 開啟或建立檔案,並將游標置於第一行首
vi +n filename 開啟檔案,並將游標置於第 n行首
vi + filename 開啟檔案,並將游標置於最後一行首
vi -r filename 在上次正用 vi編輯時發生系統崩潰,恢複檔案
vi file1....filen 開啟多個檔案,依次編輯
vi的工作模式
命令列模式 (command mode):控制螢幕游標的移動,字元、字或行的刪除,移動複製某區段及進入Insert mode下,或者到 last line mode。
插入模式(Insert mode):只有在 Insert mode 下,才可以做文字輸入,按「ESC」鍵可回到命令列模式。
底行模式(last line mode):將檔案儲存或退出 vi,也可以設定編輯環境,如尋找字串、列出行號等。
命令列模式移動游標
k、j、h、l 功能分別等同於上、下、左、右方向鍵
Ctrl+b 在檔案中向上移動一頁(相當於 PageUp 鍵)
Ctrl+f 在檔案中向下移動一頁(相當於 PageDown 鍵)
ctrl+u 螢幕往後移動半頁
ctrl+d 螢幕往前移動半頁
H 將游標移到螢幕的最上行(Highest)
nH 將游標移到螢幕的第 n 行(如 2H: 將游標移到螢幕的第 2 行)
M 將游標移到螢幕的中間(Middle)
L 將游標移到螢幕的最下行(Lowest)
nL 將游標移到螢幕的倒數第 n 行(如 3L:將游標移到螢幕的倒數第 3 行)
w 在指定行內右移游標,到下一個字的開頭
e 在指定行內右移游標,到一個字的末尾
b 在指定行內左移游標,到前一個字的開頭
0 數字0,左移游標,到本行的開頭
G 游標移動到文章的最後
nG 游標移動到文章的第 n行(如8G:移動到文章的第 8行)
$ 右移游標,到本行的末尾
^ 移動游標,到本行的第一個非Null 字元
替換和刪除
rc 用 c 替換游標所指向的當前字元
nrc 用 c 替換游標所指向的前 n 個字元(如 5rc: 用 c 替換游標所指向的前 5 個字元)
x 刪除游標所在位置後面的一個字元
nx 刪除游標所在位置後面的 n 個字元(如 3x:刪除游標所在位置後面的 3 個字元)
X 大寫的 X,刪除游標所在位置前面的一個字元
nX 刪除游標所在位置前面的 n 個字元(如 3X : 刪除游標所在位置前面的 3 個字元)
dd 刪除游標所在行,並去除空隙
ndd 從游標所在行開始刪除 n 行內容,並去除空隙(如 3dd: 刪除 3 行內容,並去除空隙)
複製和粘貼
從本文中刪除的內容(如字元、字或行)並沒有真正丟失,而是被剪下並複製到了一個記憶體緩衝區中。使用者可將其粘貼到本文中的指定位置。
p 小寫字母 p,將緩衝區的內容粘貼到游標的後面
P 大寫字母 P,將緩衝區的內容粘貼到游標的前面
如果緩衝區的內容是字元或字,直接粘貼在游標的前面或後面;如果緩衝區的內容為整行本文則粘貼在當前游標所在行的上一行或下一行。
有時需要複製一段本文到新位置,同時保留原有位置的內容。這種情況下,首先應當把指定內容複寫(而不是剪下)到記憶體緩衝區。完成這一操作的命令是:
yy 複製當前行到記憶體緩衝區
nyy 複製 n 行內容到記憶體緩衝區(如 5yy: 複製 5 行內容到記憶體緩衝區)
搜尋字串
/str1 正向搜尋字串 str1
n 繼續搜尋,找出 str1 字串下次出現的位置
?str2 反向搜尋字串 str2
撤銷和重複
u 撤消前一條命令的結果
. 重複最後一條修改本文的命令
文本選中
v 字元選中命令
V 行選中命令
插入模式進入插入模式
i 在游標左側輸入本文
a 在游標右側輸入本文
o 在游標所在行的下一行增添新行
O 在游標所在行的上一行增添新行
I 在游標所在行的開頭輸入本文
A 在游標所在行的末尾輸入本文
退出插入模式
ESC 鍵或按鍵組合Ctrl+[
底行模式
在vi 的底行模式下,可以使用複雜的命令。
退出命令
在命令模式下可以用 ZZ 命令退出 vi 編輯程式,該命令儲存對本文所作的修改,覆蓋原始檔案。如果只需要退出編輯程式,而不打算儲存編輯的內容,可用下面的命令:
: q 在未作修改的情況下退出
: q! 放棄所有修改,退出編輯程式
行號和檔案儲存
: n 將游標移到第 n 行
:set nu 顯示行號
:set nonu 取消行號顯示
底行模式下,可以規定命令操作的行號範圍。數值用來指定絕對行號;字元“.”表示游標所在行的行號;字元“$”表示本文最後一行的行號;簡單的運算式,例如“.+5”表示當前行往下的第 5 行。例如:
: .+5 將游標移到當前行之後的第5行
: $ 將游標移到本文最後一行
在底行模式下,允許從檔案中讀取本文,或將本文寫入檔案。例如:
:w 將編輯的內容寫入原始檔案,用來儲存編輯的中間結果
:wq 將編輯的內容寫入原始檔案並退出編輯程式(相當於 ZZ 命令)
:w file 將編輯的內容寫入 file 檔案,保持原有檔案的內容不變
:a,bw file 將第 a 行至第 b 行的內容寫入 file 檔案 (如:1,.w file 將第 1 行至當前行寫入 file 檔案)
:r file 讀取 file 檔案的內容,插入當前游標所在行的後面
:f file 將當前檔案重新命名為 file
字串搜尋
:/str/ 正向搜尋,將游標移到下一個包含字串 str 的行
:?str? 反向搜尋,將游標移到上一個包含字串 str 的行
本文替換
:s/str1/str2/ 用字串 str2 替換行中首次出現的字串 str1
:s/str1/str2/g 用字串 str2 替換行中所有出現的字串 str1
:.,$ s/str1/str2/g 用字串 str2 替換本文當前行到末尾所有出現的字串 str1
:1,$ s/str1/str2/g 用字串 str2 替換本文中所有出現的字串 str1
:g/str1/s//str2/g 功能同上
從上述替換命令可以看到:g 放在命令末尾,表示對搜尋字串的每次出現進行替換;不加 g,表示只對搜尋字串的首次出現進行替換;g 放在命令開頭,表示對本文中所有包含搜尋字串的行進行替換操作。
刪除本文
:d 刪除游標所在行
:3d 刪除第 3 行
:.,$d 刪除當前行至本文的末尾
:/str1/,/str2/d 刪除從字串 str1 到 str2 的所有行
恢複檔案
vi 在編輯某個檔案時,會另外產生一個臨時檔案,這個檔案的名稱通常以 . 開頭,並以 .swp 結尾。vi 在正常退出時,該檔案被刪除,若意外退出,而沒有儲存檔案的最新修改內容,則可以使用恢複命令,也可以在啟動 vi 時利用 -r 選項。
:recover 恢複檔案
選項設定
為控制不同的編輯功能,vi 提供了很多內部選項。利用 :set 命令可以設定選項。基本文法為:
:set option 設定選項 option
常見的功能選項包括:
autoindent 設定該選項,則本文自動縮排
ignorecase 設定該選項,則忽略規則運算式中大小寫字母的區別
number 設定該選項,則顯示本文行號
ruler 設定該選項,則在螢幕底部顯示光線標所在行、列的位置
tabstop 設定按 Tab 鍵跳過的空格數。例如 :set tabstop=n,n 預設值為 8
mk 將選項儲存在目前的目錄的 .exrc 檔案中
shell切換
在編輯本文時,利用 vi 底行模式下提供的shell 切換命令,無須退出 vi 即可執行Linux 命令
:! command 執行完shell 命令 command 後回到vi
另外,在命令模式下,鍵入K ,可命令 vi 尋找游標所在單詞的手冊頁,相當於運行man命令。
vi(vim)鍵盤圖及其基本命令