轉(zhuǎn)載自?http://blog.csdn.net/nicky_zs/article/details/6941648
h ?向左移動(dòng)光標(biāo)
j ?向下移動(dòng)光標(biāo)
k ?向上移動(dòng)光標(biāo)
l ?向右移動(dòng)光標(biāo)
以上四個(gè)是在一行之內(nèi)移動(dòng)光標(biāo)的方法拧粪〖玷荆可直接用于normal模式闷供,也可用在其他命令后面壹粟,表示范圍痊银,比如dl是向右刪除一個(gè)字符。還可以加上計(jì)數(shù)昭卓,d3l是向右刪除三個(gè)字符笨枯。有時(shí)候,長度很長的一行會(huì)被折成多行顯示锯蛀,要在一行之內(nèi)的上下折行內(nèi)移動(dòng)灭衷,則使用命令gj和gk。
x??刪除字符(等于dl)
dd??刪除一行(同樣的命令重復(fù)兩次表示對整行進(jìn)行操作)
u??撤銷
Ctrl+r?重做
U??撤銷當(dāng)前一行的操作
i??插入
I??行首插入
a??追加
A??行末追加
s??替換
S??替換一行
o??另起一行
O??上面另起一行
ZZ??退出并保存
:q!??強(qiáng)制退出
:e!??放棄所有修改重新載入文件
:help?幫助
:help x?xxx的幫助
w??向前移動(dòng)一個(gè)word旁涤,光標(biāo)停留在word首字符
b??向后移動(dòng)一個(gè)word翔曲,光標(biāo)停留在word首字符
e??向前移動(dòng)一個(gè)word,光標(biāo)停留在word尾字符
ge??向后移動(dòng)一個(gè)word拭抬,光標(biāo)停留在word尾字符
W??向前移動(dòng)一個(gè)Word部默,光標(biāo)停留在Word首字符
B??向后移動(dòng)一個(gè)Word,光標(biāo)停留在Word首字符
E??向前移動(dòng)一個(gè)Word造虎,光標(biāo)停留在Word尾字符
gE??向后移動(dòng)一個(gè)Word傅蹂,光標(biāo)停留在Word尾字符
$??將光標(biāo)移動(dòng)到當(dāng)前行行尾
^??將光標(biāo)移動(dòng)到當(dāng)前行行首的第一個(gè)非空白字符
0??將光標(biāo)移動(dòng)到當(dāng)前行行首,同Home鍵
fx??在當(dāng)前行上向右查找字符x
Fx??在當(dāng)前行上向左查找字符x
tx??在當(dāng)前行上向右查找字符x算凿,并將光標(biāo)停留在該字符的前一個(gè)字符上
Tx??在當(dāng)前行上向左查找字符x份蝴,并將光標(biāo)停留在該字符的前一個(gè)字符上
;??重復(fù)命令
,??重復(fù)命令,但是方向相反
%??跳轉(zhuǎn)到當(dāng)前光標(biāo)的括號匹配的括號上氓轰,若當(dāng)前光標(biāo)不在括號上婚夫,則先找到下一個(gè)括號
G??把光標(biāo)移動(dòng)到最后一行
33G??把光標(biāo)移動(dòng)到第33行
gg??把光標(biāo)移動(dòng)到第一行
33gg?把光標(biāo)移動(dòng)到第33行
50%??把光標(biāo)移動(dòng)到文件50%的地方
H??把光標(biāo)移動(dòng)到當(dāng)前屏幕的第一行
M??把光標(biāo)移動(dòng)到當(dāng)前屏幕的最中間一行
L??把光標(biāo)移動(dòng)到當(dāng)前屏幕的最后一行
Ctrl+G?得到當(dāng)前文件的行信息
:set?number 顯示行號 nonumber不顯示行號 ruler顯示列號 noruler不顯示列號
Ctrl+U?使當(dāng)前文本向上滾動(dòng)半屏
Ctrl+D?使當(dāng)前文本向下滾動(dòng)半屏
Ctrl+Y?使當(dāng)前文本向上滾動(dòng)一行
Ctrl+E?使當(dāng)前文本向下滾動(dòng)一行
Ctrl+F?使當(dāng)前文本向上滾動(dòng)一屏
Ctrl+B?使當(dāng)前文本向下滾動(dòng)一屏
zz??把當(dāng)前行放在屏幕正中央
zt??把當(dāng)前行放在屏幕頂端
zb??把當(dāng)前行放在屏幕底端
/abc?在文本中向后查找abc
?abc?在文本中向前查找abc
n??查找下一個(gè)
N??查找上一個(gè)
:set?ignorecase查找時(shí)忽略大小寫 noignorecase查找時(shí)不忽略大小寫
\<??標(biāo)記word的開始
\>??標(biāo)記word的結(jié)束? /\只會(huì)查找到the而查找不到there
*??向后查找光標(biāo)所在的word,使用word標(biāo)記
#??向前查找光標(biāo)所在的word署鸡,使用word標(biāo)記
g*??向后查找光標(biāo)所在的word案糙,不使用word標(biāo)記
g#??向前查找光標(biāo)所在的word,不使用word標(biāo)記
:set?hlsearch高亮顯示結(jié)果 nohlsearch不高亮顯示結(jié)果
:nohl?去掉高亮顯示
:set?incsearch邊輸入邊搜索 nowrapscan文件結(jié)束時(shí)不要回到開頭
^??匹配行首
$??匹配行尾
.??匹配任何字符
\s ?匹配空白字符
+ ?匹配一個(gè)或多個(gè)
\??轉(zhuǎn)義
``??跳轉(zhuǎn)到前一視圖
Ctrl+O?跳轉(zhuǎn)到早些時(shí)候停置光標(biāo)的位置
Ctrl+I?跳回到后來停置光標(biāo)的更新的位置
ma??將當(dāng)前光標(biāo)下的位置標(biāo)記為a(從a到z共26個(gè)位置可以用)
`a??跳轉(zhuǎn)到標(biāo)記為a的位置
'a??跳轉(zhuǎn)到位置a所在行的行首
dw??刪除下一個(gè)詞語
d3w??刪除下面3個(gè)詞語
cw??刪除下一個(gè)詞語并進(jìn)入插入模式
c3w??刪除下面3個(gè)詞語并進(jìn)入插入模式
cc??刪除一整行并進(jìn)入插入模式
x??代表dl
X??代表dh
D??代表d$
C??代表c$
s??代表cl
S??代表cc
ra??將當(dāng)前字符替換為a
5ra??將當(dāng)前5個(gè)字符都替換為a
.??重復(fù)上一次所做出了改動(dòng)的命令
v??進(jìn)入字符Visual模式
V??進(jìn)入行Visual模式
Ctrl+V?進(jìn)入列Visual模式
o??在Visual模式下讓光標(biāo)到達(dá)被選中的內(nèi)容的另一頭
O??在列Visual模式下讓光標(biāo)到達(dá)另一個(gè)對角線上的一頭
p??把用d或者x命令刪除的內(nèi)容粘貼到光標(biāo)后面
P??把用d或者x命令刪除的內(nèi)容粘貼到光標(biāo)前面
3p??放置3份副本
xp??交換光標(biāo)所在位置的字符和光標(biāo)所在位置的后一個(gè)字符
y??復(fù)制文本靴庆,隨后也可以用p取出
daw??刪除光標(biāo)所在的word
cis??修改光標(biāo)所在的sentence
R??進(jìn)入替換模式
~??改變光標(biāo)所在字符的大小寫时捌,并將光標(biāo)移動(dòng)到下一個(gè)字符上
:edit?foo.txt在vim中開始編輯另一個(gè)文件
:edit!?foo.txt強(qiáng)制丟棄當(dāng)前未保存的修改
:next?轉(zhuǎn)到下一個(gè)文件,可以縮寫為:n
:next!?強(qiáng)制丟棄未保存的修改并轉(zhuǎn)到下一個(gè)文件
:wnext?保存當(dāng)前文件的修改并轉(zhuǎn)到下一個(gè)文件
:previous?轉(zhuǎn)到上一個(gè)文件
:wprevious?保存當(dāng)前文件的修改并轉(zhuǎn)到上一個(gè)文件
:last?轉(zhuǎn)到最后一個(gè)文件
:first?轉(zhuǎn)到第一個(gè)文件
:2next?轉(zhuǎn)到下面第二個(gè)文件
:bn ?轉(zhuǎn)到下一個(gè)文件炉抒,若到最后一個(gè)文件奢讨,則轉(zhuǎn)到第一個(gè)文件
:bp ?轉(zhuǎn)到上一個(gè)文件,若到第一個(gè)文件焰薄,則轉(zhuǎn)到最后一個(gè)文件
:args?查看整個(gè)列表中有哪些文件
:args?a.txt b.txt c.txt重新定義一個(gè)文件列表
:args?*.txt打開所有txt文件
Ctrl+^?快速切換到上一個(gè)文件
`"??移動(dòng)光標(biāo)到上一次離開該文件時(shí)光標(biāo)所在的位置
`.??移動(dòng)光標(biāo)到最后一次對文件做出修改的位置
mA??設(shè)置當(dāng)前位置為全局標(biāo)記A(大寫字母)
`A??跳轉(zhuǎn)到全局位置A拿诸,即使它不在當(dāng)前文件內(nèi)
:set?backup生成備份文件
"fy??把選中的內(nèi)容復(fù)制到寄存器f中
"fp??把寄存器f中的內(nèi)容粘貼出來
"wdaw?把光標(biāo)所在的word刪除并放入寄存器w中
:write?>> logfile把當(dāng)前文件寫入(追加)到logfile中
vim -R?只讀打開
vim -M?強(qiáng)制禁止修改打開
:edit?a.txt打開文件a.txt
:saveas?b.txt把當(dāng)前緩沖區(qū)存入b.txt并同時(shí)打開b.txt進(jìn)行編輯
:file?c.txt把當(dāng)前文件的名字改為c.txt
:split?分割一個(gè)窗口并在新窗口中打開同樣的文件扒袖,可以縮寫為:sp
:split?a.txt分割一個(gè)窗口并在新窗口中打開a.txt
Ctrl+w w?跳轉(zhuǎn)到另一個(gè)窗口
Ctrl+w Ctrl+w?同上
:close?關(guān)閉當(dāng)前窗口
:only?關(guān)閉其他窗口
:new?分割一個(gè)新的空窗口
:3split?分割出的窗口高度為3
Ctrl+w +?增加當(dāng)前窗口的高度
Ctrl+w -?減小當(dāng)前窗口的高度
3Ctrl+w _?設(shè)置當(dāng)前窗口的高度為3
Ctrl+w =?平分所有窗口
Ctrl+w _?最大化當(dāng)前窗口
:vsplit?垂直分割窗口,可以縮寫為:vsp
:vnew?垂直新建分割窗口
Ctrl+w h?到左邊的窗口
Ctrl+w j?到下邊的窗口
Ctrl+w k?到上邊的窗口
Ctrl+w l?到右邊的窗口
Ctrl+w t?到頂端的窗口
Ctrl+w b?到底端的窗口
Ctrl+w H?向左移動(dòng)窗口
Ctrl+w J?向下移動(dòng)窗口
Ctrl+w K?向上移動(dòng)窗口
Ctrl+w L?向右移動(dòng)窗口
:qall?關(guān)閉所有窗口
:wall?保存所有窗口的文件
:wqall?保存并關(guān)閉所有窗口
:qall!?強(qiáng)制關(guān)閉所有窗口
vim -o?a.txt b.txt c.txt為每一個(gè)文件打開一個(gè)水平分割窗口
vim -O?a.txt b.txt c.txt為每一個(gè)文件打開一個(gè)垂直分割窗口
vimdiff?a.txt b.txt打開a.txt和b.txt并進(jìn)行比較(這個(gè)是shell中的命令)
:vertical diffsplit a.txt打開分割窗口用于比較當(dāng)前文件和a.txt
:set?scrollbind同步滾動(dòng) noscrollbind不同步滾動(dòng)
qa??將后續(xù)命令錄制在寄存器a中(從a到z有26個(gè)可用)
q??停止錄制
@a??執(zhí)行寄存器a中錄制的命令
@@??執(zhí)行剛剛執(zhí)行過的寄存器中的命令
qA??向寄存器a中追加命令
"Ayy?將當(dāng)前行追加復(fù)制到寄存器A中
:[range]s+from+to+[flags]?把range范圍內(nèi)的from替換成to
:[range]s=from=to=[flags]?把range范圍內(nèi)的from替換成to
:[range]s/from/to/[flags]?把range范圍內(nèi)的from替換成to
range為空時(shí)亩码,只對當(dāng)前行有效
range為%時(shí)季率,對所有行都有效
flags為空時(shí),只替換指定行的第一個(gè)from
flags有g(shù)時(shí)蟀伸,替換指定行的所有from
flags有c時(shí)蚀同,要求用戶對每次替換進(jìn)行確認(rèn)
flags有p時(shí)缅刽,要求:s命令列出所有改變的行
flags有e時(shí)啊掏,要求:s命令在沒有找到任何匹配時(shí)也不要報(bào)錯(cuò)
:1,5s/from/to/g?把第1行到第5行中所有的from替換成to
:3s/from/to/g?把第3行中所有的from替換成to
:.write a.txt?把當(dāng)前行寫入a.txt
:.,$s/from/to/g?把當(dāng)前行到文件結(jié)束所有的from替換成to
:?^Chapter?,/^Chapter/s/from/to/g?把上一個(gè)Chapter到下一個(gè)Chapter之間的所有from替換成to
:.+3,$-5s/from/to/g?把當(dāng)前+3行到倒數(shù)第5行的全部from替換成to
:'a,'bs/from/to/g?把從a標(biāo)記的行到b標(biāo)記的行(包含a和b行)中全部from替換成to,注意是單引號不是倒引號
:[range]g/{pattern}/{command}?在range范圍內(nèi)找到匹配pattern的行然后執(zhí)行command命令
這里的command必須是:開頭的命令衰猛,而不能直接使用normal模式下的命令迟蜜,除非使用|:normal|
Ctrl+V?進(jìn)入塊選擇/塊編輯模式
$??將塊選擇中的每一行都擴(kuò)展至行尾
h??停止上面的狀態(tài)
Ixxx??在被選中的塊的前面插入xxx
0Ixxx??在被選中的塊的每一行的行首插入xxx
Axxx??在被選中的塊的后面追加xxx
$Axxx 在被選中的塊的每一行的行尾追加xxx
cxxx??在被選中的塊中刪除被選中的塊并以xxx替代
Cxxx??在被選中的塊中刪除被選中的塊一直到第一行行尾,并以xxx替代
rx????把被選中的塊中的所有字符都替換成x
~??交換大小寫
U??小寫變大寫
u??大寫變小寫
>??將被選中的塊向右移動(dòng)一個(gè)shift單位啡省,空出來的地方填補(bǔ)空格
<??同上娜睛,但是是向左移動(dòng),但是移動(dòng)的單位同時(shí)受限于左邊的邊界
J??將下一行附在當(dāng)前行的末尾卦睹,本行的尾空格與下一行的頭空格全都只用一個(gè)空格代替
gJ??同上畦戒,但是不對原文本內(nèi)容做任何改動(dòng)
:read?a.txt將a.txt讀入并放在當(dāng)前行的下一行
:$r??a.txt將a.txt讀入并放在當(dāng)前文件的最后
:0r??a.txt將a.txt讀入并放在當(dāng)前文件的最開始
:.,$w?tmp將當(dāng)前行到最后一行寫入tmp文件中
:.,$w!?tmp將當(dāng)前行到最后一行寫入tmp文件中,即使tmp已存在
:.write?>>tmp將當(dāng)前行追加到tmp文件
gU??將字符變大寫
gUl??將當(dāng)前字符變大寫
gUw??將當(dāng)前字符至該word結(jié)束變大寫
gU$??將當(dāng)前字符至行尾變大寫
gUgU?將當(dāng)前整行變大寫结序,可省略為gUU
gu??將字符變小寫
gul??將當(dāng)前字符變小寫
guw??將當(dāng)前字符至該word結(jié)束變小寫
gu$??將當(dāng)前字符至行尾變小寫
gugu?將當(dāng)前整行變小寫障斋,可省略為guu
g~??改變字符大小寫
g~l??改變當(dāng)前字符大小寫
g~w??改變當(dāng)前字符至該word結(jié)束大小寫
g~$??改變當(dāng)前字符至行尾大小寫
g~g~?改變整行字符大小寫,可省略為g~~
:[range]![shell command]?以range范圍內(nèi)的文本作為輸入去執(zhí)行command命令徐鹤,并將結(jié)果覆蓋寫回range中
或者用光標(biāo)移動(dòng)符代替:[range]
:read ![shell command]?運(yùn)行command并將輸出寫到當(dāng)前行的下面
:0r ![shell command]??同上垃环,輸出被寫入文件開頭
:write ![shell command]?運(yùn)行command并將整個(gè)文件寫入到command的輸入
:.w ![shell command]??同上,只會(huì)將當(dāng)前行輸入給command
Ctrl+L?重繪屏幕
:%s/\/4/g?將文件中所有的單詞four替換成4
vim *.cpp
qq:%s/\/GetAnswer/ge:wnq9999@q?將所有cpp文件打開并把所有的GetResp單詞換成GetAnswer
:%s/[,]?,.?/\2 \1/?將文件中所有的First, Last形式替換成Last First形式
g Ctrl+g?統(tǒng)計(jì)字?jǐn)?shù)(要統(tǒng)計(jì)某一塊具體的字?jǐn)?shù)可以使用visual模式)
K??查找man頁
:%s/\s\+$//??刪除所有行末空白
vim中的幾個(gè)文本對象:aw 一個(gè)單詞; ?as 一個(gè)句子; ?ap 一個(gè)段落
zfap創(chuàng)建一個(gè)段落的折行
zc關(guān)閉折行
zo打開折行
在Insert模式下:
刪除光標(biāo)前的一個(gè)字符
刪除光標(biāo)所在的一個(gè)字符
Ctrl+W刪除光標(biāo)前的一個(gè)單詞
Ctrl+U刪除光標(biāo)前的一個(gè)行(按照輸入順序返敬,不一定直接刪到行首)
Ctrl+p ?補(bǔ)全單詞
Ctrl+n ?補(bǔ)全單詞(向前查找)
Ctrl+x Ctrl+f補(bǔ)全文件名
Ctrl+x Ctrl+l補(bǔ)全整行內(nèi)容
Ctrl+a補(bǔ)全上一次insert模式下插入的內(nèi)容
Ctrl+v插入一個(gè)由ascii碼表示的符號遂庄,三位ascii碼或者遇到第一個(gè)非數(shù)字時(shí)生效
q: ? 顯示命令歷史
試出來的bash快捷鍵:
Ctrl + A:將光標(biāo)移動(dòng)到最左端
Ctrl + B:將光標(biāo)向左移動(dòng)一個(gè)字符
Ctrl + C:^C(向進(jìn)程發(fā)送SIGINT信號)
Ctrl + D:退出Shell
Ctrl + H:向左刪除一個(gè)字符
Ctrl + I ?:顯示所有自動(dòng)補(bǔ)全的候選項(xiàng)
Ctrl + J:(貌似)回車
Ctrl + L:在保留當(dāng)前命令輸入行的情況下清屏
Ctrl + M:(貌似)回車
Ctrl + O:(貌似)回車
Ctrl + P:相當(dāng)于向上的箭頭,顯示命令歷史
Ctrl + Q:解除鎖屏
Ctrl + R:在命令歷史中查找
Ctrl + S:鎖屏
Ctrl + T:交換最后輸入的兩個(gè)字符的位置
Ctrl + U:清空當(dāng)前輸入的命令行
Ctrl + V:^V(暫時(shí)不清楚是什么)
Ctrl + W:向左刪除一個(gè)單詞
Ctrl + XX:將光標(biāo)在行首行尾來回移動(dòng)
Ctrl + Y:(貌似)粘貼了某些文本
Ctrl + Z:輸入命令時(shí)沒用劲赠,進(jìn)程在前臺(tái)運(yùn)行時(shí)將其放到后臺(tái)并停止
Shift + PageUp:向上滾屏
Shift + PageDown:向下滾屏
轉(zhuǎn):{
跳轉(zhuǎn)到函數(shù)涛目、變量定義處:
[+ctrl+i 跳轉(zhuǎn)到函數(shù)、變量和#define
]+ctrl+i
[+ctrl+d 跳轉(zhuǎn)到#define處
ctrl+i 向前跳到前幾次光標(biāo)位置
ctrl+o 向后跳到后幾次光標(biāo)位置
函數(shù)體跳轉(zhuǎn):
總結(jié)是:
1凛澎,相同就跳到函數(shù)的開頭:(如果都是左括號或者都是右括號)霹肝,不同就跳到函數(shù)的結(jié)尾:
{ 和 } 用來跳到函數(shù)的開頭。
[] 和 ][ 用來跳到函數(shù)的結(jié)尾预厌。
2阿迈,左右左右,“左”在前面轧叽。前后前后苗沧,“前”也在前面刊棕。因此左括號打頭則表示向前,右括號打頭則表示向后:
[[ 和 [] 用來向前跳
]] 和 ][ 用來向后跳
[[ 用來跳到光標(biāo)前面的一個(gè)函數(shù)開始處待逞。如果光標(biāo)在函數(shù)體內(nèi)的話甥角,那就是所在函數(shù)的開始處。
][ 用來跳到光標(biāo)后面的一個(gè)函數(shù)結(jié)尾處识樱。如果光標(biāo)在函數(shù)體內(nèi)的話嗤无,那就是所在函數(shù)的結(jié)尾處。
]] 用來跳到光標(biāo)后面的一個(gè)函數(shù)開始處怜庸。如果光標(biāo)在函數(shù)體內(nèi)的話当犯,那就是下一個(gè)函數(shù)的開始處。
[] 用來跳到光標(biāo)前面的一個(gè)函數(shù)結(jié)尾處割疾。如果光標(biāo)在函數(shù)體內(nèi)的話嚎卫,那就是上一個(gè)函數(shù)的結(jié)尾處。
{}
如何選中括號中的內(nèi)容 進(jìn)行:
將光標(biāo)移至括號內(nèi)宏榕,按shift+v進(jìn)入行選模式拓诸,然后
i{ - 選小括號中內(nèi)容,不包括小括號
a{ - 選小括號中內(nèi)容麻昼,包括小括號
ib - 選中括號中內(nèi)容奠支,不包括括號
ab - 選中括號中內(nèi)容,包括括號
i{ - 選大括號中內(nèi)容抚芦,不包括大括號
a{ - 選大括號中內(nèi)容倍谜,包括大括號
:h text-objects
下面還有些相關(guān)的tips,未全部驗(yàn)證:
vi{ 選中{}中間的內(nèi)容,不包括{}
va{ 選中{}中間內(nèi)容燕垃,包括{}
vi( 選中()中間內(nèi)容
vi< 選中<>中間內(nèi)容
vi[ 選中[]中間內(nèi)容
vit 選中中間的內(nèi)容
vi” 選中”"中間內(nèi)容
vi’ 選中”中間的內(nèi)容
vis 選中一個(gè)句子
vib 選中一個(gè)block
viw選中一個(gè)單詞
vip 選中一個(gè)段落
}