這是我總結的一些基本用法,可能對初用者會有幫助,獨樂樂不如衆樂樂,是吧!
說明:以下黑色為vi和vim均有的一般功能,而紅色為Vim(Vi Improved)所特有功能。Vim一般的Unix和Linux下均有安裝。
三種狀态
Command: 任何輸入都會作為編輯指令,而不會出現在螢幕上,任何輸入都引起立即反映
Insert: 任何輸入的資料都置于編輯寄存器,按ESC,可跳回command方式
Escape: 以“:”或者“/”為前導的指令,出現在螢幕的最下一行,任何輸入都被當成特别指令。
離開vi
:q! 離開vi,并放棄剛在緩沖區内編輯的内容。
:wq 将緩沖區内的資料寫入磁盤中,并離開vi。
:x 同wq。
(注意—— :X 是檔案加密,一定要與:x存盤退出相差別)
進入輸入模式
a (append) 由遊标之後加入資料。
A 由該行之末加入資料。
i (insert) 由遊标之前加入資料。
I 由該行之首加入資料。
o (open) 新增一行於該行之下供輸入資料之用。
O 新增一行於該行之上供輸入資料之用。
删除與修改
x 删除遊标所在該字元。
X 删除遊标所在之前一字元。
r 用接於此指令之後的字元取代(replace)遊标所在字元。如:ra将遊标所在字元以 a 取代之。
R 進入取代狀态,直到《ESC》為止。
s 删除遊标
所在之字元,并進入輸入模式直到《ESC》。
S 删除遊标所在之該行資料,并進入輸入模式直到《ESC》。
光标的移動
m<a-z> 設定書簽<a-z>
‘<a-z> 移至書簽<a-z>處
0 移至該行之首
$ 移至該行之末。
e 移動到下個字的最後一個字母
w 移動到下個字的第一個字母。
b 移動到上個字的第一個字母。
^ 移至該行的第一個字元處。
H 移至視窗的第一行。
M 移至視窗的中間那行。
L 移至視窗的最後一行。
G 移至該檔案的最後一行。
+ 移至下一列的第一個字元處。
- 移至上一列的第一個字元處。
:n 移至該檔案的第 n 列。
n+ 移至遊标所在位置之後的第 n 列。
n- 移至遊标所在位置之前的第 n 列。
<Ctrl><g> 顯示該行之行号、檔案名稱、檔案中最末行之行号、遊标所在行号占總行号之百分比。
(Vim) 光标移動基本用法小解:
(這隻要組合上邊的功能就可以明白了,不用再一一講解了吧!)
ge b w e
← ← ---→ --→
This is-a line, with special/separated/words (and some more).
←- ←-- -----------------→ ---→
GE B W E
視窗的移動
<Ctrl><f> 視窗往下卷一頁。
<Ctrl><b> 視窗往上卷一頁。
<Ctrl><d> 視窗往下卷半頁。
<Ctrl><u> 視窗往上卷半頁。
<Ctrl><e> 視窗往下卷一行。
<Ctrl><y> 視窗往上卷一行。
剪切、複制、删除
Operator + Scope = command
Operator
d 剪切
y 複制。
p 粘帖,與 d 和 y 配和使用。可将最後d或y的資料放置於遊标所在位置之行列下。
c 修改,類似delete與insert的組和。删除一個字組、句子等之資料,并插入建立資料。
Scope
e 由遊标所在位置至該字串的最後一個字元。
w 由遊标所在位置至下一個字串的第一個字元。
b 由遊标所在位置至前一個字串的第一個字元。
$ 由遊标所在位置至該行的最後一個字元。
0 由遊标所在位置至該行的第一個字元。
整行動作
dd 删除整行。
D 以行為機關,删除遊标後之所有字元。
cc 修改整行的内容。
yy 使遊标所在該行複制到記憶體緩沖區。
取消前一動作(Undo)
u 恢複最後一個指令之前的結果。
U 恢複遊标該行之所有改變。
(vim) u 可以多次撤消指令,一次撤消一個操作,直至本次操作開始為止。
(vim) Ctrl+r 可以恢複撤消前内容,按多次可恢複多次。
查找與替換
/字串 往遊标之後尋找該字串。
?字串 往遊标之前尋找該字串。
n 往下繼續尋找下一個相同的字串。
N 往上繼續尋找下一個相同的字串。
% 查找“(”,“)”,“{”,“}”的配對符。
s 搜尋某行列範圍。
g 搜尋整個編輯緩沖區的資料。
:1,$s/old/new/g 将檔案中所有的『old』改成『new』。
:10,20s/^/ / 将第10行至第20行資料的最前面插入5個空白。
(vim)
/字元串 後邊輸入查詢内容可儲存至緩沖區中,可用↑↓進行以往内容選擇。
另外:将光标移動在標明單詞下方按*,則可以選中此單詞作為查詢字元,可以避免輸入一長串字元的麻煩。
(vim) 大小寫替換
首先用按v開啟選擇功能,然後用↑↓←→鍵來標明所要替換的字元,若是小寫變大寫,則按U;反之按u;
如果是選擇單詞,則可以在按v後,按w,最後按U/u,這樣就可以将字元随意的改變大小寫了,而不用删除後重新敲入。
資料的連接配接
J 句子的連接配接。将遊标所在之下一行連接配接至遊标該行的後面。
環境的設定
:set all 可設定的環境變量清單
:set 環境變量的目前值
:set nu 設定資料的行号。
:set nonu 取消行号設定。
:set ai 自動内縮。
:set noai 取消自動内縮。
(vim)
:set ruler 會在螢幕右下角顯示目前光标所處位置,并随光移動而改變,占用螢幕空間較小,使用也比較友善,推薦使用。
:set hlsearch 在使用查找功能時,會高亮顯示所有比對的内容。
:set nohlsearch 關閉此功能。
:set incsearch 使Vim在輸入字元串的過程中,光标就可定位顯示比對點。
:set nowrapscan 關閉查找自動回環功能,即查找到檔案結尾處,結束查找;預設狀态是自動回環
ex指令
讀寫資料
:10,20w test 将第10行至第20行的資料寫入test檔案。
:10,20w>>test 将第10行至第20行的資料加在test檔案之後。
:r test 将test檔案的資料讀入編輯緩沖區的最後。
:e [filename] 編輯新的檔案。
:e! [filename] 放棄目前修改的檔案,編輯新的檔案。
:sh 進入shell環境,使用exit退出,回到編輯器中。
:!cmd 運作指令cmd後,傳回到編輯器中。
删除、複制及搬移
:10,20d 删除第10行至第20行的資料。
:10d 删除第10行的資料。
:%d 删除整個編輯緩沖區。
:10,20co30 将第10行至第20行的資料複制至第30行之後。
:10,20mo30 将第10行至第20行的資料搬移至第30行之後。