說明:
以下的例子中 xxx 表示在命令模式下輸入 xxx 並回車
以下的例子中 :xxx 表示在擴展模式下輸入 xxx 並回車
小括號中的命令表示相關命令.
在編輯模式或可視模式下輸入的命令會另外註明.
=====================================================================================
1. 查找
/xxx(?xxx) 表示在整篇文檔中搜索匹配xxx的字符串, / 表示向下查找, ? 表示
向上查找.其中xxx可以是正規表達式,關於正規式就不多說了.
一般來說是區分大小寫的, 要想不區分大小寫, 那得先輸入
:set ignorecase
查找到以後, 再輸入 n 查找下一個匹配處, 輸入 N 反方向查找.
*(#) 當光標停留在某個單詞上時, 輸入這條命令表示查找與該單詞匹配的
下(上)一個單詞. 同樣, 再輸入 n 查找下一個匹配處, 輸入 N 反方
向查找.
g*(g#) 此命令與上條命令相似, 只不過它不完全匹配光標所在處的單詞, 而
是匹配包含該單詞的所有字符串.
gd 本命令查找與光標所在單詞相匹配的單詞, 並將光標停留在文檔的非
註釋段中第一次出現這個單詞的地方.
% 本命令查找與光標所在處相匹配的反括號, 包括 () [] {}
f(F)x 本命令表示在光標所在行進行查找, 查找光標右(左)方第一個x字符.
找到後:
輸入 ; 表示繼續往下找
輸入 , 表示反方向查找
2. 快速移動光標
在 vi 中, 移動光標和編輯是兩件事, 正因爲區分開來, 所以可以很方便的進行光標定
位和編輯. 因此能更快一點移動光標是很有用的.
w(e) 移動光標到下一個單詞.
b 移動光標到上一個單詞.
0 移動光標到本行最開頭.
^ 移動光標到本行最開頭的字符處.
$ 移動光標到本行結尾處.
% 移動光標到配對的{或},[或],(或)
H 移動光標到屏幕的首行.
M 移動光標到屏幕的中間一行.
L 移動光標到屏幕的尾行.
gg 移動光標到文檔首行.
G 移動光標到文檔尾行.
c-f (即 ctrl 鍵與 f 鍵一同按下) 本命令即 page down.
c-b (即 ctrl 鍵與 b 鍵一同按下, 後同) 本命令即 page up.
'' 它移動光標到上一個標記處, 比如用 gd, * 等查
找到某個單詞後, 再輸入此命令則回到上次停留的位置.
'. 此命令相當好使, 它移動光標到上一次的修改行.
`. 此命令相當強大, 它移動光標到上一次的修改點.
c-o 移動光標到前一處跳轉處
c-i 移動光標到後一處跳轉處
]] 移動光標到下一個函數{處
[[ 移動光標到上一個函數{處
][ 移動光標到下一個函數}處
[] 移動光標到上一個函數}處
3. 拷貝, 刪除與粘貼
在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與光標移動命令
結合的, 看幾個例子就能夠明白了.
yw 表示拷貝從當前光標到光標所在單詞結尾的內容.
dw 表示刪除從當前光標到光標所在單詞結尾的內容.
y0 表示拷貝從當前光標到光標所在行首的內容.
d0 表示刪除從當前光標到光標所在行首的內容.
y$ 表示拷貝從當前光標到光標所在行尾的內容.
d$ 表示刪除從當前光標到光標所在行尾的內容.
yfa 表示拷貝從當前光標到光標後面的第一個a字符之間的內容.
dfa 表示刪除從當前光標到光標後面的第一個a字符之間的內容.
特殊地:
yy 表示拷貝光標所在行.
dd 表示刪除光標所在行.
D 表示刪除從當前光標到光標所在行尾的內容.
關於拷貝, 刪除和粘貼的複雜用法與寄存器有關, 可以自行查詢.
4. 數字與命令
在 vi 中數字與命令結合往往表示重複進行此命令, 若在擴展模式的開頭出現則表示行
號定位. 如:
5fx 表示查找光標後第 5 個 x 字符.
5w(e) 移動光標到下五個單詞.
5yy 表示拷貝光標以下 5 行.
5dd 表示刪除光標以下 5 行.
y2fa 表示拷貝從當前光標到光標後面的第二個a字符之間的內容.
:12,24y 表示拷貝第12行到第24行之間的內容.
:12,y 表示拷貝第12行到光標所在行之間的內容.
:,24y 表示拷貝光標所在行到第24行之間的內容. 刪除類似.
5. 替換
替換是 vi 的強項, 因爲可以用正規表達式來匹配字符串.以下提供幾個例子.
:s/aa/bb/g 將光標所在行出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:s/\<aa\>/bb/g 將光標所在行出現的所有 aa 替換爲 bb, 僅替換 aa 這個單詞
:%s/aa/bb/g 將文檔中出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:12,23s/aa/bb/g 將從12行到23行中出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:1,.s/aa/bb/g 將從第1行到當前行中出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:.,$s/aa/bb/g 將從當前行到最後一行中出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:12,23s/^/#/ 將從12行到23行的行首加入 # 字符
:%s= *$== 將所有行尾多餘的空格刪除
:g/^\s*$/d 將所有不包含字符(空格也不包含)的空行刪除.
6. 多文件編輯
:sp 文件名 vim 將分割出一個橫向窗口, 並在該窗口中打開新文件.
:vsp 文件名 vim 將分割出一個縱向窗口, 並在該窗口中打開新文件.
:e 文件名 vim 將在原窗口中打開新的文件, 若舊文件編輯過, 會要求保存.
:ls 此命令查看本 vim 程序已經打開了多少個文件, 在屏幕的最下方會顯示出如下數據:
1 %a "usevim.html" 行 162
2 # "xxxxxx.html" 行 0
其中:
1 表示打開的文件序號, 這個序號很有用處.
%a 表示文件代號, % 表示當前編輯的文件,
# 表示上次編輯的文件
"usevim.html" 表示文件名.
行 162 表示光標位置.
:b 序號(代號) 此命令將指定序號(代號)的文件在本窗口打開, 其中的序號(代號)就是用 :ls 命令看到的.
:set diff 此命令用於比較兩個文件, 可以用:vsp filename命令打開另一個文件, 然後在每個文件窗口中輸入此命令,就能看到效果了.
多窗口時在窗口間跳轉:
c-w後按w 移動光標到下一個窗口
c-w後按h 移動光標到左邊窗口
c-w後按l 移動光標到右邊窗口
c-w後按j 移動光標到下邊窗口
c-w後按k 移動光標到上邊窗口
多窗口時調整窗口大小:
c-w後按+ 增加光標所在窗口高度
c-w後按- 減少光標所在窗口高度
c-w後按< 增加光標所在窗口寬度
c-w後按- 減少光標所在窗口寬度
默認會改變窗口大小一行或一列,如果要一次調整多行或多列,在以上操作前輸入要調整改變的值
=====================================================================================
上面的使用轉載了一些其他人的,也自己補充了很多,下面是自己一些其他經驗的補充
=====================================================================================
1. 替換行尾^M
很多gb2312編碼的文件用vim用utf-8模式打開就會看到行尾的^M,使用vim替換命令即可全部替換:
:%s/^M//g
替換簡單,只是^M不是普通打出來的(^M顯示藍色),需要按ctrl+v+m纔可以。
2. 自動對齊
vim中=爲自動對齊命令,主要是對齊代碼縮進,以下是常用的自動對齊方式:
=G 從當前行開始到文件結束處進行自動對齊
5== 從當前行開始向下對齊5行(包括當前行)
v鍵進入選擇模式,選中多行,按=,即可將選中的這幾行進行自動對齊
3. 粘貼時取消縮進與註釋
默認粘貼時所有行會自動縮進與註釋,導致粘貼後格式混亂,運行以下命令即可取消,恢復正常粘貼:
:set paste
運行以下命令即恢復粘貼時縮進與註釋:
:set nopaste