用了vi兩年,因為不用vi寫代碼作開發(fā),只是簡單的修改配置文件而已,因此,呵呵,兩年了還是一點不熟悉。最近因為公司要求需要學(xué)習(xí)在linux/unix上開發(fā)c/c++,只好努力學(xué)一下vi/vim了。
找了一本書,O'Reilly的Learning The VI Editor,chm的電子版本,認(rèn)真地學(xué)了一遍,總結(jié)了一下常用命令:
文件操作
vi +n file?打開文件并移動到第n行
vi +? file?打開文件并移動到最后一行
vi R file / view file ?只讀打開文件
:w??保存
:w!??覆蓋已存在的文件文件
:w newfile?保存為新文件
:wq??保存并退出
ZZ??保存并退出=:wq
:q??退出
:q!??退出不保存修改
:e!??退回到上一次保存的狀態(tài)
:1,10w newfile?將第一行到第10行保存為新文件
:.,$w >> file?將當(dāng)前位置到結(jié)尾的內(nèi)容添加到別的文件
:r file??讀取file文件的內(nèi)容
移動
Numeric + h|j|k|l?執(zhí)行n次操作
h??向左移動(一個字符)
j??向下移動一行
k??向上移動一行
l??向右移動(一個字符)?
e/E??移動到單詞的末尾
(/)??移動到當(dāng)前(一下)句的開始
{/}??移動到當(dāng)前(一下)段的開始
[[/]]??移動到當(dāng)前(一下)部分的開始
0??移動到行首
$??移動到行末
w??向后移動一個文本塊
W??向后移動一個文本塊(忽略標(biāo)點)
b??向前移動一個文本塊
B??向前移動一個文本塊(忽略標(biāo)點)
^??移動到當(dāng)前行的第一個非空白字符
回車/+??移動到下一行的開頭的第一個字符
-??移動到上一行的開頭的第一個字符
CTRL-F??下翻一屏
CTRL-B??上翻一屏
CTRL-D??下翻半屏
CTRL-U??下翻半屏
z + 回車?將當(dāng)前行移到屏幕頂部
z.??將當(dāng)前行移到屏幕中間
z-??將當(dāng)前行移到屏幕底部
CTRL-L/CTRL-R?重新刷新屏幕?
H??移到屏幕的第一行
nH??移到屏幕的第n行
M??移到屏幕的中間
L??移到屏幕的最后一行
nL??移到屏幕的最后一行前的n行
CTRL-L??顯示行信息
G??移動到文件的最后一行
nG??移動到文件的第n行
``??移動到上一個位置
編輯
i??在當(dāng)前位置前插入
I??在行首插入
a??在當(dāng)前位置后添加
A??在行末添加
o??在當(dāng)前行下方新建一個空行開始插入
O??在當(dāng)前行上方新建一個空行開始插入
s??刪除當(dāng)前字符然后進(jìn)入插入狀態(tài)
S??刪除當(dāng)前行然后進(jìn)入插入狀態(tài)
cw??修改當(dāng)前詞語(刪除然后進(jìn)入插入狀態(tài))
?c2b?刪除前面兩個詞語?
?c$?刪除本行當(dāng)前位置后所有的內(nèi)容
?c0?刪除本行當(dāng)前位置前所有的內(nèi)容
cc??修改當(dāng)前行(刪除然后進(jìn)入插入狀態(tài))
r??替換當(dāng)前字符(還保持命令狀態(tài))
R??連續(xù)替換(進(jìn)入替換狀態(tài))
~??修改當(dāng)前字符的大小寫
J??連接兩行
標(biāo)記
mx??將當(dāng)前位置標(biāo)記為x
'x??移動到標(biāo)記為x的行
`x??移動到標(biāo)記為x的位置
``/''??在兩次位置間切換
刪除
dw??刪除一個單詞
d2w??刪除兩個單詞
dd??刪除當(dāng)前行
d3d??刪除3行
d0??刪除當(dāng)前行中在光標(biāo)前的所有內(nèi)容
d$/D??刪除當(dāng)前行中在光標(biāo)后的所有內(nèi)容
db??刪除前一個單詞
x??刪除一個字符
3x??刪除3個字符
移動
p??粘貼
xp??相當(dāng)于交換兩個字符的位置
yw??復(fù)制一個單詞
.??重復(fù)上一個操作
.??取消上一個操作
?
搜索
/pattern?從前往后搜
?pattern?從后往前搜
n/N??和上一詞搜索方向相同(相反)再搜
fx/Fx??在同一行中查找下(上)一個x字符并移動光標(biāo)
替換
:s/old/new?替換當(dāng)前行的第一個匹配
:s/old/new/g?替換當(dāng)前行的全部匹配
:1,100s/old/new/g?替換1-100行的全部匹配
:1,$s/old/new/g?替換全部匹配=:%s/old/new/g
:g/pattern/s/old/new/g?查找滿足pattern條件的行并進(jìn)行替換
命令組合:
Change?Delete?Copy?from Cursor to ...
cH?dH?yH?top of screen
cL?dL?yL?bottom of screen
c+?d+?y+?next line
c5|?d5|?y5|?column 5 of current line
2c)?2d)?2y)?second sentence following
c{?d{?y{?previous paragraph
c/pattern d/pattern y/pattern pattern
cn?dn?yn?next pattern
cG?dG?yG?end of file
c13G?d13G?y13G?line number 13
(這里還是看書里面的原文吧。)