vim命令整理

光標(biāo)控制命令

h或^h                    向左移一個字符
j或^j或^n                向下移一行
k或^p                    向上移一行
l或空格                     向右移一個字符
G                        移到文件的最后一行
nG                       移到文件的第n行
w                        移到下一個字的開頭
W                        移到下一個字的開頭,忽略標(biāo)點(diǎn)符號
b                        移到前一個字的開頭
B                        移到前一個字的開頭,忽略標(biāo)點(diǎn)符號
L                        移到屏幕的最后一行
M                        移到屏幕的中間一行
H                        移到屏幕的第一行
e                        移到下一個字的結(jié)尾
E                        移到下一個字的結(jié)尾,忽略標(biāo)點(diǎn)符號
(                        移到句子的開頭
)                        移到句子的結(jié)尾
{                        移到段落的開頭
}                        移到下一個段落的開頭
0或|                     移到當(dāng)前行的第一列
n|                       移到當(dāng)前行的第n列
^                        移到當(dāng)前行的第一個非空字符
$                        移到當(dāng)前行的最后一個字符
+或return                移到下一行的第一個字符
-                        移到前一行的第一個非空字符

在vi中添加文本

a                        在光標(biāo)后插入文本
A                        在當(dāng)前行插入文本
i                        在光標(biāo)前插入文本
I                        在當(dāng)前行前插入文本
o                        在當(dāng)前行的下邊插入新行
O                        在當(dāng)前行的上邊插入新行
:r file                  讀入文件file內(nèi)容,并插在當(dāng)前行后
:nr file                 讀入文件file內(nèi)容,并插在第n行后
escape                   回到命令模式
^v char                  插入時(shí)忽略char的指定意義,這是為了插入特殊字符

在vi中刪除文本

x                        刪除光標(biāo)處的字符,可以在x前加上需要刪除的字符數(shù)目
nx                       從當(dāng)前光標(biāo)處往后刪除n個字符
X                        刪除光標(biāo)前的字符,可以在X前加上需要刪除的字符數(shù)目
nX                       從當(dāng)前光標(biāo)處往前刪除n個字符
dw                       刪至下一個字的開頭
ndw                      從當(dāng)前光標(biāo)處往后刪除n個字
dG                       刪除行,直到文件結(jié)束
dd                       刪除整行
ndd                      從當(dāng)前行開始往后刪除
db                       刪除光標(biāo)前面的字
ndb                      從當(dāng)前行開始往前刪除n字
:n,md                    從第m行開始往前刪除n行
d或d$                    從光標(biāo)處刪除到行尾
dcursor_command          刪除至光標(biāo)命令處,如dG將從當(dāng)產(chǎn)膽行刪除至文件的末尾
^h或backspace            插入時(shí),刪除前面的字符
^w                       插入時(shí),刪除前面的字

修改vi文本

每個命令前面的數(shù)字表示該命令重復(fù)的次數(shù)
rchar                    用char替換當(dāng)前字符
R text escape            用text替換當(dāng)前字符直到換下Esc鍵
stext escape             用text代替當(dāng)前字符
S或cctext escape         用text代替整行
cwtext escape            將當(dāng)前字改為text
Ctext escape             將當(dāng)前行余下的改為text
cG escape                修改至文件的末尾
ccursor_cmd text escape  從當(dāng)前位置處到光標(biāo)命令位置處都改為text

在vi中查找與替換

/text                    在文件中向前查找text
?text                    在文件中向后查找text
n                        在同一方向重復(fù)查找
N                        在相反方向重復(fù)查找
ftext                    在當(dāng)前行向前查找text
Ftext                    在當(dāng)前行向后查找text
ttext                    在當(dāng)前行向前查找text,并將光標(biāo)定位在text的第一個字符
Ttext                    在當(dāng)前行向后查找text,并將光標(biāo)定位在text的第一個字符
:set ic                  查找時(shí)忽略大小寫
:set noic                查找時(shí)對大小寫敏感
:s/oldtext/newtext       用newtext替換oldtext
:m,ns/oldtext/newtext    在m行通過n,用newtext替換oldtext
&                        重復(fù)最后的:s命令
:g/text1/s/text2/text3   查找包含text1的行,用text3替換text2
:g/text/command          在所有包含text的行運(yùn)行command所表示的命令
:v/text/command          在所有不包含text的行運(yùn)行command所表示的命令

在vi中復(fù)制文本

yy                       將當(dāng)前行的內(nèi)容放入臨時(shí)緩沖區(qū)
nyy                      將n行的內(nèi)容放入臨時(shí)緩沖區(qū)
p                        將臨時(shí)緩沖區(qū)中的文本放入光標(biāo)后
P                        將臨時(shí)緩沖區(qū)中的文本放入光標(biāo)前
dsfsd "(a-z)nyy          復(fù)制n行放入名字為圓括號內(nèi)的可命名緩沖區(qū),省略n表示當(dāng)前行
"(a-z)ndd                刪除n行放入名字為圓括號內(nèi)的可命名緩沖區(qū),省略n表示當(dāng)前行
"(a-z)p                  將名字為圓括號的可命名緩沖區(qū)的內(nèi)容放入當(dāng)前行后
"(a-z)P                  將名字為圓括號的可命名緩沖區(qū)的內(nèi)容放入當(dāng)前行前

在vi中撤消與重復(fù)

u                        撤消最后一次修改
U                        撤消當(dāng)前行的所有修改
.                        重復(fù)最后一次修改
,                        以相反的方向重復(fù)前面的f、F、t或T查找命令
;                        重復(fù)前面的f、F、t或T查找命令
"np                      取回最后第n次的刪除(緩沖區(qū)中存有一定次數(shù)的刪除內(nèi)容,一般為9)
n                        重復(fù)前面的/或?查找命令
N                        以相反方向重復(fù)前面的/或?命令

保存文本和退出vi

:w                       保存文件但不退出vi
:w file                  將修改保存在file中但不退出vi
:wq或ZZ或:x              保存文件并退出vi
:q!                      不保存文件,退出vi
:e!                      放棄所有修改,從上次保存文件開始再編輯

vi中的選項(xiàng)

:set all                 打印所有選項(xiàng)
:set nooption            關(guān)閉option選項(xiàng)
:set nu                  每行前打印行號
:set showmode            顯示是輸入模式還是替換模式
:set noic                查找時(shí)忽略大小寫
:set list                顯示制表符(^I)和行尾符號
:set ts=8                為文本輸入設(shè)置tab stops
:set window=n            設(shè)置文本窗口顯示n行

vi的狀態(tài)

:.=                      打印當(dāng)前行的行號
:=                       打印文件中的行數(shù)
^g                       顯示文件名、當(dāng)前的行號、文件的總行數(shù)和文件位置的百分比
:l                       使用字母"l"來顯示許多的特殊字符,如制表符和換行符

在文本中定位段落和放置標(biāo)記

{                        在第一列插入{來定義一個段落
[[                       回到段落的開頭處
]]                       向前移到下一個段落的開頭處
m(a-z)                   用一個字母來標(biāo)記當(dāng)前位置,如用mz表示標(biāo)記z
'(a-z)                   將光標(biāo)移動到指定的標(biāo)記,如用'z表示移動到z

在vi中連接行

J                        將下一行連接到當(dāng)前行的末尾
nJ                       連接后面n行

光標(biāo)放置與屏幕調(diào)整

H                        將光標(biāo)移動到屏幕的頂行
nH                       將光標(biāo)移動到屏幕頂行下的第n行
M                        將光標(biāo)移動到屏幕的中間
L                        將光標(biāo)移動到屏幕的底行
nL                       將光標(biāo)移動到屏幕底行上的第n行
^e(ctrl+e)               將屏幕上滾一行
^y                       將屏幕下滾一行
^u                       將屏幕上滾半頁
^d                       將屏幕下滾半頁
^b                       將屏幕上滾一頁
^f                       將屏幕下滾一頁
^l                       重繪屏幕
z-return                 將當(dāng)前行置為屏幕的頂行
nz-return                將當(dāng)前行下的第n行置為屏幕的頂行
z.                       將當(dāng)前行置為屏幕的中央
nz.                      將當(dāng)前行上的第n行置為屏幕的中央
z-                       將當(dāng)前行置為屏幕的底行
nz-                      將當(dāng)前行上的第n行置為屏幕的底行

vi中的shell轉(zhuǎn)義命令

:!command                執(zhí)行shell的command命令,如:!ls
:!!                      執(zhí)行前一個shell命令
:r!command               讀取command命令的輸入并插入,如:r!ls會先執(zhí)行l(wèi)s,然后讀入內(nèi)容
:w!command               將當(dāng)前已編輯文件作為command命令的標(biāo)準(zhǔn)輸入并執(zhí)行command命令,如:w!grep all
:cd directory            將當(dāng)前工作目錄更改為directory所表示的目錄
:sh                      將啟動一個子shell,使用^d(ctrl+d)返回vi
:so file                 在shell程序file中讀入和執(zhí)行命令

vi中的宏與縮寫

(避免使用控制鍵和符號,不要使用字符K、V、g、q、v、*、=和功能鍵)

:map key command_seq     定義一個鍵來運(yùn)行command_seq,如:map e ea,無論什么時(shí)候都可以e移到一個字的末尾來追加文本
:map                     在狀態(tài)行顯示所有已定義的宏
:umap key                刪除該鍵的宏
:ab string1 string2      定義一個縮寫,使得當(dāng)插入string1時(shí),用string2替換string1。當(dāng)要插入文本時(shí),鍵入string1然后按Esc鍵,系統(tǒng)就插入了string2
:ab                      顯示所有縮寫
:una string              取消string的縮寫

在vi中縮進(jìn)文本

^i(ctrl+i)或tab          插入文本時(shí),插入移動的寬度,移動寬度是事先定義好的
:set ai                  打開自動縮進(jìn)
:set sw=n                將移動寬度設(shè)置為n個字符
n<<                      使n行都向左移動一個寬度
n>>                      使n行都向右移動一個寬度,例如3>>就將接下來的三行每行都向右移動一個移動寬度
:10,100>              第10行至第100行縮進(jìn)
:20,80<              第20行至第80行反縮進(jìn)

VIM快捷鍵大全

Vim是一個超級牛的編輯器,可以說是專為程序員設(shè)計(jì)的編輯器,強(qiáng)大的有些不可思議 。不過其學(xué)習(xí)曲線稍顯陡峭,前兩天在網(wǎng)上找到一個小圖表,比較全,如果對表中所列的命令學(xué)習(xí)熟悉以后,處理日常的文本就已經(jīng)足夠,所以貼出來,大家參考參考。

Vim的牛B之處不在于其功能之繁多,更不在于其學(xué)習(xí)曲線之陡峭,而在于這些命令大都可以進(jìn)行組合 ,比如,9yy命令表示復(fù)制9行內(nèi)容,9表示要復(fù)制的行數(shù),同樣100dd表示刪除100行,當(dāng)數(shù)字和命令合作的時(shí)候,就比單純的命令更強(qiáng)大,同樣,c命令表示擦除,w表示word即單詞,那么cw就表示擦除一個單詞,c5w就表示刪除5個單詞等等。將這些簡單命令合成在一起,就可以發(fā)揮出難以想象的強(qiáng)大功能,而且可以使你的編輯工作充滿樂趣。

宏命令(Macros)

高級一些的編輯器,都會包含宏功能,vim當(dāng)然不能缺少了,在vim中使用宏是非常方便的:

:qx 開始記錄宏,并將結(jié)果存入寄存器x
q 退出記錄模式
@x 播放記錄在x寄存器中的宏命令
稍微解釋一下,當(dāng)在normal模式下輸入:qx后,你對文本的所有編輯動作將會被記錄下來,再次輸入q即退出了記錄模式,然后輸入@x對剛才記錄下來的命令進(jìn)行重復(fù),此命令后可跟數(shù)字,表示要重復(fù)多少次,比如@x20,可以重復(fù)20次。這個在文本的批處理中是非常有用的。

同時(shí)編輯多個文件

在vim眾多的插件中,有一個叫minibuffer的插件,就是下面所說的標(biāo)簽頁功能了,可以支持同時(shí)編輯多個文件。

標(biāo)簽命令

:tabe fn 在一個新的標(biāo)簽頁中編輯文件fn
gt 切換到下一個標(biāo)簽頁
gT 切換到上一個標(biāo)簽頁
:tabr 切換到第一個標(biāo)簽頁
:tabl 切換到最后一個標(biāo)簽頁
:tabm [N] 把當(dāng)前tab移動到第N個tab之后
對,正如你所想象的那樣,跟eclipse, ue等的標(biāo)簽頁是一個意思!

窗口命令

ctrl+w s 水平分割窗口
ctrl+w w 切換窗口
ctrl+w q 退出當(dāng)前窗口(由于同時(shí)有多個文件,此命令不會影響其他窗口)
ctrl+w v 垂直分割窗口
其他

vim在保存之前不會對文件做實(shí)際的修改,只是加載到緩沖區(qū)中,對文件的編輯其實(shí)是對緩沖區(qū)的編輯,直到:w時(shí)才會存入物理文件。

:e file 把file加載到新的緩沖區(qū)中
:bn 跳轉(zhuǎn)到下一個緩沖區(qū)
:bd 刪除緩沖區(qū)(關(guān)閉文件)
:sp fn 分割窗口,并將fn加載到新的窗口中
退出編輯器

:w 將緩沖區(qū)寫入文件,即保存修改
:wq 保存修改并退出
:x 保存修改并退出
:q 退出,如果對緩沖區(qū)進(jìn)行過修改,則會提示
:q! 強(qiáng)制退出,放棄修改
查找替換

/pattern 向后搜索字符串pattern
?pattern 向前搜索字符串pattern
n 下一個匹配(如果是/搜索,則是向下的下一個,?搜索則是向上的下一個)
N 上一個匹配(同上)
:%s/old/new/g 搜索整個文件,將所有的old替換為new
:%s/old/new/gc 搜索整個文件,將所有的old替換為new,每次都要你確認(rèn)是否替換
復(fù)制粘貼

dd 刪除光標(biāo)所在行
dw 刪除一個字(word)
x 刪除當(dāng)前字符
X 刪除前一個字符
D 刪除到行末
yy 復(fù)制一行,此命令前可跟數(shù)字,標(biāo)識復(fù)制多行,如6yy,表示從當(dāng)前行開始復(fù)制6行
yw 復(fù)制一個字
y$ 復(fù)制到行末
p 粘貼粘貼板的內(nèi)容到當(dāng)前行的下面
P 粘貼粘貼板的內(nèi)容到當(dāng)前行的上面
]p 有縮進(jìn)的粘貼,vim會自動調(diào)節(jié)代碼的縮進(jìn)
“a 將內(nèi)容放入/存入a寄存器,可以支持多粘貼板
附:比如常用的一個寄存器就是系統(tǒng)寄存器,名稱為+,所以從系統(tǒng)粘貼板粘貼到vim中的命令為”+p,注意此處的+不表示操作符,二十一個寄存器。

移動光標(biāo)

在vim中移動光標(biāo)跟其他的編輯器中有很大的區(qū)別,不過一旦學(xué)會了,就會飛速 的在文本中移動了。

h,j,k,l 上,下,左,右
ctrl-f 上翻一頁
ctrl-b 下翻一頁
% 跳到與當(dāng)前括號匹配的括號處,如當(dāng)前在{,則跳轉(zhuǎn)到與之匹配的}處
w 跳到下一個字首,按標(biāo)點(diǎn)或單詞分割
W 跳到下一個字首,長跳,如end-of-line被認(rèn)為是一個字
e 跳到下一個字尾
E 跳到下一個字尾,長跳
b 跳到上一個字
B 跳到上一個字,長跳
0 跳至行首,不管有無縮進(jìn),就是跳到第0個字符
^ 跳至行首的第一個字符
$ 跳至行尾
gg 跳至文件的第一行
gd 跳至當(dāng)前光標(biāo)所在的變量的聲明處
[N]G 跳到第N行,如0G,就等價(jià)于gg,100G就是第100行
fx 在當(dāng)前行中找x字符,找到了就跳轉(zhuǎn)至
; 重復(fù)上一個f命令,而不用重復(fù)的輸入fx
tx 與fx類似,但是只是跳轉(zhuǎn)到x的前一個字符處
Fx 跟fx的方向相反
),( 跳轉(zhuǎn)到上/下一個語句

  • 查找光標(biāo)所在處的單詞,向下查找

查找光標(biāo)所在處的單詞,向上查找

`. 跳轉(zhuǎn)至上次編輯位置
在屏幕上移動

H 移動光標(biāo)到當(dāng)前屏幕上最上邊的一行
M 移動光標(biāo)到當(dāng)前屏幕上中間的一行
L 移動光標(biāo)到當(dāng)前屏幕上最下邊的一行
書簽

ma 把當(dāng)前位置存成標(biāo)簽a
`a 跳轉(zhuǎn)到標(biāo)簽a處
編輯

r 替換一個字符
J 將下一行和當(dāng)前行連接為一行
cc 刪除當(dāng)前行并進(jìn)入編輯模式
cw 刪除當(dāng)前字,并進(jìn)入編輯模式
c$ 擦除從當(dāng)前位置至行末的內(nèi)容,并進(jìn)入編輯模式
s 刪除當(dāng)前字符并進(jìn)入編輯模式
S 刪除光標(biāo)所在行并進(jìn)入編輯模式
xp 交換當(dāng)前字符和下一個字符
u 撤銷
ctrl+r 重做
. 重復(fù)上一個編輯命令
~ 切換大小寫,當(dāng)前字符
g~iw 切換當(dāng)前字的大小寫
gUiw 將當(dāng)前字變成大寫
guiw 將當(dāng)前字變成小寫

將當(dāng)前行右移一個單位
<< 將當(dāng)前行左移一個單位(一個tab符)
== 自動縮進(jìn)當(dāng)前行
插入模式

i 從當(dāng)前光標(biāo)處進(jìn)入插入模式
I 進(jìn)入插入模式,并置光標(biāo)于行首
a 追加模式,置光標(biāo)于當(dāng)前光標(biāo)之后
A 追加模式,置光標(biāo)于行末
o 在當(dāng)前行之下新加一行,并進(jìn)入插入模式
O 在當(dāng)前行之上新加一行,并進(jìn)入插入模式
Esc 退出插入模式
可視模式

標(biāo)記文本

v 進(jìn)入可視模式,單字符模式
V 進(jìn)入可視模式,行模式
ctrl+v 進(jìn)入可視模式,列模式 ,類似于UE的列模式
o 跳轉(zhuǎn)光標(biāo)到選中塊的另一個端點(diǎn)
U 將選中塊中的內(nèi)容轉(zhuǎn)成大寫
O 跳轉(zhuǎn)光標(biāo)到塊的另一個端點(diǎn)
aw 選中一個字
ab 選中括號中的所有內(nèi)容,包括括號本身
aB 選中{}括號中的所有內(nèi)容
ib 選中括號中的內(nèi)容,不含括號
iB 選中{}中的內(nèi)容,不含{}
對標(biāo)記進(jìn)行動作

塊右移
< 塊左移
y 復(fù)制塊
d 刪除塊
~ 切換塊中內(nèi)容的大小寫
好了,這張簡表就說到這里,當(dāng)然它涵蓋的范圍有限,但是正如片頭說的那樣,vim的強(qiáng)大之處在于這些命令可以組合起來使用,那樣才能體現(xiàn)出其強(qiáng)大的編輯功能。我在網(wǎng)上找到的這個文檔也順便貼出來,大家可以同時(shí)參考。如果有機(jī)會,我盡量找些例子來說明這些命令在實(shí)際中的用法,那樣才可以更好的使用它,提高我們的工作效率。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內(nèi)容