去年上半年開(kāi)始全面使用linux進(jìn)行開(kāi)發(fā)和娛樂(lè)了话肖,現(xiàn)在已經(jīng)回不去windows了北秽。
話歸正傳,在linux上一直使用vim最筒,慢慢熟悉了它的命令贺氓,才終于領(lǐng)悟了什么是編輯器之神。
最近抽空整理了這份速查表床蜘,收獲頗豐辙培,并分享給大家。
進(jìn)入vim
命令 | 描述 |
---|---|
vim filename | 打開(kāi)或新建文件,并將光標(biāo)置于第一行首 |
vim +n filename | 打開(kāi)文件悄泥,并將光標(biāo)置于第n行首 |
vim + filename | 打開(kāi)文件虏冻,并將光標(biāo)置于最后一行首 |
vim +/pattern filename | 打開(kāi)文件肤粱,并將光標(biāo)置于第一個(gè)與pattern匹配的串處 |
vim -r filename | 在上次正用vim編輯時(shí)發(fā)生系統(tǒng)崩潰弹囚,恢復(fù)filename |
vim filename….filename | 打開(kāi)多個(gè)文件,依次編輯 |
vim配置
命令 | 描述 |
---|---|
all | 列出所有選項(xiàng)設(shè)置情況 |
term | 設(shè)置終端類型 |
ignorance | 在搜索中忽略大小寫(xiě) |
list | 顯示制表位(Ctrl+I)和行尾標(biāo)志($) |
number | 顯示行號(hào) |
report | 顯示由面向行的命令修改過(guò)的數(shù)目 |
terse | 顯示簡(jiǎn)短的警告信息 |
warn | 在轉(zhuǎn)到別的文件時(shí)若沒(méi)保存當(dāng)前文件則顯示NO write信息 |
nomagic | 允許在搜索模式中领曼,使用前面不帶“\”的特殊字符 |
nowrapscan | 禁止vi在搜索到達(dá)文件兩端時(shí)鸥鹉,又從另一端開(kāi)始 |
mesg | 允許vi顯示其他用戶用write寫(xiě)到自己終端上的信息 |
:set number / set nonumber | 顯示/不顯示行號(hào) |
:set ruler /set noruler | 顯示/不顯示標(biāo)尺 |
:set hlsearch | 高亮顯示查找到的單詞 |
:set nohlsearch | 關(guān)閉高亮顯示 |
:syntax on | 語(yǔ)法高亮 |
:set nu | 顯示行號(hào) |
:set tabstop=8 | 設(shè)置tab大小,8為最常用最普遍的設(shè)置 |
:set softtabstop=8 | 4:4個(gè)空格,8:正常的制表符,12:一個(gè)制表符4個(gè)空格,16:兩個(gè)制表符 |
:set autoindent | 自動(dòng)縮進(jìn) |
:set cindent | C語(yǔ)言格式里面的自動(dòng)縮進(jìn) |
移動(dòng)光標(biāo)
命令 | 描述 |
---|---|
k nk | 上 向上移動(dòng)n行 |
j nj | 下 向下移動(dòng)n行 |
h nh | 左 向左移動(dòng)n行 |
l nl | 右 向右移動(dòng)n行 |
Space | 光標(biāo)右移一個(gè)字符 |
Backspace | 光標(biāo)左移一個(gè)字符 |
Enter | 光標(biāo)下移一行 |
w/W | 光標(biāo)右移一個(gè)字至字首 |
b/B | 光標(biāo)左移一個(gè)字至字首 |
e或E | 光標(biāo)右移一個(gè)字至字尾 |
) | 光標(biāo)移至句尾 |
( | 光標(biāo)移至句首 |
} | 光標(biāo)移至段落開(kāi)頭 |
{ | 光標(biāo)移至段落結(jié)尾 |
n$ | 光標(biāo)移至第n行尾 |
H | 光標(biāo)移至屏幕頂行 |
M | 光標(biāo)移至屏幕中間行 |
L | 光標(biāo)移至屏幕最后行 |
0 | (注意是數(shù)字零)光標(biāo)移至當(dāng)前行首 |
^ | 移動(dòng)光標(biāo)到行首第一個(gè)非空字符上去 |
$ | 光標(biāo)移至當(dāng)前行尾 |
gg | 移到第一行 |
G | 移到最后一行 |
f | 移動(dòng)光標(biāo)到當(dāng)前行的字符a上 |
F | 相反 |
% | 移動(dòng)到與制匹配的括號(hào)上去(),{}庶骄,[]毁渗,<>等 |
nG | 移動(dòng)到第n行上 |
G | 到最后一行 |
屏幕滾動(dòng)
命令 | 描述 |
---|---|
Ctrl+u | 向文件首翻半屏 |
Ctrl+d | 向文件尾翻半屏 |
Ctrl+f | 向文件尾翻一屏 |
Ctrl+b | 向文件首翻一屏 |
nz | 將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部 |
插入文本類
命令 | 描述 |
---|---|
i | 在光標(biāo)前 |
I | 在當(dāng)前行首 |
a | 光標(biāo)后 |
A | 在當(dāng)前行尾 |
o | 在當(dāng)前行之下新開(kāi)一行 |
O | 在當(dāng)前行之上新開(kāi)一行 |
r | 替換當(dāng)前字符 |
R | 替換當(dāng)前字符及其后的字符单刁,直至按ESC鍵 |
s | 從當(dāng)前光標(biāo)位置處開(kāi)始灸异,以輸入的文本替代指定數(shù)目的字符 |
S | 刪除指定數(shù)目的行,并以所輸入文本代替之 |
ncw/nCW | 修改指定數(shù)目的字 |
nCC | 修改指定數(shù)目的行 |
刪除命令
命令 | 描述 |
---|---|
x/X | 刪除一個(gè)字符羔飞,x刪除光標(biāo)后的肺樟,而X刪除光標(biāo)前的 |
dw | 刪除一個(gè)單詞(刪除光標(biāo)位置到下一個(gè)單詞開(kāi)始的位置) |
dnw | 刪除n個(gè)單詞 |
dne | 也可,只是刪除到單詞尾 |
do | 刪至行首 |
d$ | 刪至行尾 |
dd | 刪除一行 |
ndd | 刪除當(dāng)前行及其后n-1行 |
dnl | 向右刪除n個(gè)字母 |
dnh | 向左刪除n個(gè)字母 |
dnj | 向下刪除n行,當(dāng)前行+其上n行 |
dnk | 向上刪除n行,當(dāng)期行+其下n行 |
cnw[word] | 將n個(gè)word改變?yōu)閣ord |
C$ | 改變到行尾 |
cc | 改變整行 |
shift+j | 刪除行尾的換行符逻淌,下一行接上來(lái)了 |
復(fù)制粘貼
命令 | 描述 |
---|---|
p | 粘貼用x或d刪除的文本 |
ynw | 復(fù)制n個(gè)單詞 |
yy | 復(fù)制一行 |
ynl | 復(fù)制n個(gè)字符 |
y$ | 復(fù)制當(dāng)前光標(biāo)至行尾處 |
nyy | 拷貝n行 |
撤銷
命令 | 描述 |
---|---|
u | 撤銷前一次的操作 |
shif+u(U) | 撤銷對(duì)該行的所有操作 |
搜索及替換
命令 | 描述 |
---|---|
/pattern | 從光標(biāo)開(kāi)始處向文件尾搜索pattern |
?pattern | 從光標(biāo)開(kāi)始處向文件首搜索pattern |
n | 在同一方向重復(fù)上一次搜索命令 |
N | 在反方向上重復(fù)上一次搜索命令 |
cw newword | 替換為newword |
n | 繼續(xù)查找 |
. | 執(zhí)行替換 |
:s/p1/p2/g | 將當(dāng)前行中所有p1均用p2替代,g表示執(zhí)行 用c表示需要確認(rèn) |
:n1,n2 s/p1/p2/g | 將第n1至n2行中所有p1均用p2替代 |
:g/p1/s//p2/g | 將文件中所有p1均用p2替換 |
:1,$ s/string1/string2/g | 在全文中將string1替換為string2 |
書(shū)簽
命令 | 描述 |
---|---|
m[a-z] | 在文中做標(biāo)記么伯,標(biāo)記號(hào)可為a-z的26個(gè)字母 |
`a | 移動(dòng)到標(biāo)記a處 |
visual模式
命令 | 描述 |
---|---|
v | 進(jìn)入visual 模式 |
V | 進(jìn)入行的visual 模式 |
ctrl+v | 進(jìn)如塊操作模式用o和O改變選擇的邊的大小 |
在所有行插入相同的內(nèi)容如include< | 將光標(biāo)移到開(kāi)始插入的位置,按CTRL+V進(jìn)入VISUAL模式卡儒,選擇好模塊后按I(shift+i)田柔,后插入要插入的文本俐巴,按[ESC]完成 |
行方式命令
命令 | 描述 |
---|---|
:n1,n2 co n3 | 將n1行到n2行之間的內(nèi)容拷貝到第n3行下 |
:n1,n2 m n3 | 將n1行到n2行之間的內(nèi)容移至到第n3行下 |
:n1,n2 d | 將n1行到n2行之間的內(nèi)容刪除 |
:n1,n2 w!command | 將文件中n1行至n2行的內(nèi)容作為command的輸入并執(zhí)行之 |
若不指定n1,n2硬爆,則表示將整個(gè)文件內(nèi)容作為command的輸入 |
宏
命令 | 描述 |
---|---|
q[a-z] | 開(kāi)始記錄但前開(kāi)始的操作為宏欣舵,名稱可為【a-z】,然后用q終止錄制宏 |
reg | 顯示當(dāng)前定義的所有的宏摆屯,用@[a-z]來(lái)在當(dāng)前光標(biāo)處執(zhí)行宏[a-z] |
窗口操作
命令 | 描述 |
---|---|
:split | 分割一個(gè)窗口 |
:split file.c | 為另一個(gè)文件file.c分隔窗口 |
:nsplit file.c | 為另一個(gè)文件file.c分隔窗口邻遏,并指定其行數(shù) |
ctrl+w | 在窗口中切換 |
:close | 關(guān)閉當(dāng)前窗口 |
文件及其他
命令 | 描述 |
---|---|
:q | 退出vi |
:q! | 不保存文件并退出vi |
:e filename | 打開(kāi)文件filename進(jìn)行編輯 |
:e! | 放棄修改文件內(nèi)容,重新載入該文件編輯 |
:w | 保存當(dāng)前文件 |
:wq | 存盤(pán)退出 |
:ZZ | 保存當(dāng)前文檔并退出VIM |
:!command | 執(zhí)行shell命令command |
:r!command | 將命令command的輸出結(jié)果放到當(dāng)前行 |
:n1,n2 write temp.c | |
:read file.c | 將文件file.c的內(nèi)容插入到當(dāng)前光標(biāo)所在的下面 |