先附上鏈接
手把手教你把Vim改裝成一個IDE編程環(huán)境(圖文)手把手教你把Vim改裝成一個IDE編程環(huán)境(圖文) -- 續(xù)1在Fedora下成功將Vim打造成適用于C/C++的IDE把VIM打造成一個真正的IDE(1)?:這是一個系列,后面還有幾篇
一、兩行合并為一行:
int
main(int argc,char argv)
假如要把上面兩行并為一行,只需要定位于int這行,然后按J(大寫),即可。
二、撤消和重做
以前很傻,只知道按u來撤消,不知道重做。不一小心,撤消過頭就傻了。原來重做是Ctrl+r。
另外,大寫U用來撤消整行。
三、連續(xù)插入n個感嘆號
以前以為用i/a不能進行連續(xù)多個字符的插入,原來錯了!
Hello World
比如要在上面這句話后面插入10個"!",總不能真的打10個吧?
只要在普通模式下把光標(biāo)定位于d,然后按10a!……不對啊,才一個!,別急,再按兩下Esc!哈哈,出來10個!了吧!這個貌似不太常用,但挺好玩,呵呵~
四、快速保存退出
之前我會用兩個退出方法:
保存并退出:wq
不保存并退出:q!
現(xiàn)在保存并退出有更快的方法──直接在普通模式下按ZZ即可。
另外,用:e!可以不保存文件并重新載入這個文件。
五、移動和滾動
直接按w/b來按單詞滾動,w是向前移動一個單詞,b是向后移動一個單詞,我居然不常用!虧我還常常dwdw的來刪除詞。
另外,Ctrl+D向下滾屏,Ctrl+U向上滾屏,比我之前hjkl(左下右上)的有效率多了……汗
不知道在哪里?
:set number,來顯示行號,:set nonu取消行號,行號+gg(或者 行號+G)直接到達該行。
六、查找時忽略大小寫和歷史查找
有時查找單詞時需要忽略大小寫,只要設(shè)置下面的就可以了
:setignorecase
還有另外一種忽略搜索時大小寫的方法更好用,只要在待搜索字符串后加個\c就可以了
/stringYouWantToSearch\c
假如進行過幾次查找,想繼續(xù)以之前查過的關(guān)鍵詞查找時,只要按/,然后上下鍵來選擇即可
同理,按下:,然后上下鍵,也可以翻看執(zhí)行過的歷史紀(jì)錄,不過僅限于當(dāng)前的編輯。
七、快速查找
你要找當(dāng)前光標(biāo)定位處的字段,難道要慢吞吞輸入/和字段嗎?不必了!直接按*號,Vim就會把當(dāng)前的字段作為查找內(nèi)容,找下一處。
對了,:set
hlsearch可以將查找的內(nèi)容設(shè)置成高亮。這樣就好看了。反之,加上:set
nohlsearch就可以了。上面的ignorecase也可以加no。
八、定義標(biāo)記
現(xiàn)在才發(fā)現(xiàn)定義標(biāo)記這個超有用的東西!真是后悔莫及?。?/p>
以前在一個C文件里,從一個方法跳到另一個方法,跳來跳去,都是記行數(shù)的……
原來,按下ma,就會給光標(biāo)所在處標(biāo)記了一個a,接下來可以通過`a來訪問這個地方!注意,符號`是數(shù)字1左邊那個符號,此外,通過'a,可以訪問那個位置的行首,注意,符號'是單引號。
打命令:marks可以看到所有的標(biāo)記。
而''或``,就可以在最近的兩個標(biāo)記之間相互跳轉(zhuǎn)!
???????當(dāng)你用"G" 命令跳到另一個地方,Vim會記住你從什么地方跳過去的。這個位置成為一個標(biāo)記,要回到原來的地方,使用如下命令:'',''命令可以在兩個位置上跳來跳去。而CTRL-O 命令則跳到一個"較老"的地方 (提示: O 表示 older)。CTRL-I 則跳到一個 "較新" 的地方.
:jumps
命令能輸出一個你可以跳往的位置的列表。最后一個你使用的標(biāo)記會用">" 符號標(biāo)記出來。
Vim
允許你在文本中放置自定義的標(biāo)記。命令"ma" 用 a 標(biāo)記當(dāng)前的光標(biāo)位置。你可以在文本中使用26 個標(biāo)記 (a 到 z)。這些標(biāo)記是不可見的,只是一個由Vim 記住的位置。要跳到一個你定義的標(biāo)記,可以使用命令`{mark},這里 {mark} 是指定義標(biāo)記的那個字母。所以,移到標(biāo)記a 的命令是:?`a你可以用如下命令取得所有的標(biāo)記的列表::marks
到有一些特殊的標(biāo)記,包括:
'
跳轉(zhuǎn)前的光標(biāo)位置
''
最后編輯的光標(biāo)位置
[
最后修改的開始位置
]
最后修改的結(jié)束位置
注:mark僅在當(dāng)前文件跳轉(zhuǎn)有效,jumps可在多個文件之間來回跳轉(zhuǎn)
九、替換文本(這個沒看懂怎么用................)
* 用cw或ce來將光標(biāo)所處的單詞替換掉,效果是一樣的;
*
按cc的話,直接替換整行。 另外,用S也能達到同樣的效果;
*
按C=c$,替換當(dāng)前至行尾的內(nèi)容;
* s
的話,是替換當(dāng)前的字符,跟r的功能一樣;
*
以前刪除一行至末尾用d$,原來D就行了;
上面的大多數(shù)都可以加數(shù)字!
十、可視選擇(這個我沒怎么用過.....)
* 按v進行選擇,如果想控制頭和尾,按o/O進行切換;
*
如果是大寫的V,則按行進行選擇;
十一、刪除單詞和替換句子、復(fù)制單詞
* 一般來說,用dw/de刪除單詞需要將光標(biāo)定位于單詞開頭(de不會刪除單詞后的空格,dw會刪除單詞后的空格),用dw/de時需移到單詞開頭是因為dw/de會從光標(biāo)所在的那個字符(包括該字符)開始刪除直到該單詞結(jié)束,但是如果用daw,則無需這樣,只要光標(biāo)在這個單詞上就可以了(daw會將空格一起刪除,daw=Delete
a Word),如果不包括空格,就是diw;
*
替換句子的話,就用cis就行了(目前我試驗出來的可以被用以標(biāo)示一句話結(jié)束的標(biāo)點符號是英文的問號?和句號. )
?接下來看下復(fù)制: yy命令復(fù)制當(dāng)前整行的內(nèi)容到vi緩沖區(qū) yw復(fù)制當(dāng)前光標(biāo)所在位置到單詞尾字符的內(nèi)容到vi緩存區(qū),相當(dāng)于復(fù)制一個單詞,而yaw/yiw也是復(fù)制一個單詞,但光標(biāo)可以處在該單詞的任何位置,比起yw的需要移動到單詞的首字符要方便?! ?b>y$復(fù)制光標(biāo)所在位置到行尾內(nèi)容到緩存區(qū) y^復(fù)制光標(biāo)所在位置到行首內(nèi)容到緩存區(qū) #yy 例如:5yy就是復(fù)制5行 #yw 例如:2yw就是復(fù)制兩個單詞
如果要復(fù)制第m行到第n行之間的內(nèi)容,可以在末行模式中輸入m,ny例如:3,5y復(fù)制第三行到第五行內(nèi)容到緩存區(qū)。
十二、模式轉(zhuǎn)換
Vim作為一種強大的編輯工具,是通過鍵盤來實現(xiàn),而不是通過鼠標(biāo)來實現(xiàn)的。這一點很重要。
vim
有三種常見的模式,Normail
Mode(命令模式),Insert
Mode(輸入模式)和Visual Mode(視圖模式)。
這幾種模式的切換是也是很直接方便的,比如在命令模式下,要求輸入字符,只要輸入i就進入輸入模式而根據(jù)要輸入位置和當(dāng)前光標(biāo)的關(guān)系不同,有不同的切換。總之可以把命令模式和輸入模式的切換有Append,Insert,Replace,Subsitute 記作AIRS,這種記憶方法特別方便英文單詞的意思是空氣,vim在命令模式和輸入模式的切換就像空氣一樣,無影無形。而AIRS的英文字母的大小寫意思是不一樣的。小寫的表示characterwise(字符),大寫的表示linewise(行)[if !vml]
[endif]
十三、 刪除、復(fù)制指定個數(shù)個字符
比如 :?5yl????????復(fù)制光標(biāo)后的5個字符(包括光標(biāo)所在的那個字符)
?5yh
復(fù)制光標(biāo)前的五個字符(不包括光標(biāo)所在的那個字符)
5dl
刪除光標(biāo)后的5個字符(包括光標(biāo)所在的那個字符)
?5dh
刪除光標(biāo)前的5個字符(不包括光標(biāo)所在的那個字符)
十四、強大的替換功能
替換::%s/old_string/new_string/g。或者:3,7s/old_string/new_string/g
在一個目錄下替換文本中的某個字符串
sed -i 's/orig_string/new_string/g' *
http://www.nonozone.net/vim-model-commonly-used-in-the-replacement-summary.html
http://gooss.org/vim-tips-replace-the-ingenious-use-of-4/
http://gooss.org/vim-tips-replace-the-ingenious-use-of-3/
十五、同時編輯多個文件
在vim的普通模式下輸入?:e
filename,可以打開并編輯新的文件,但如果當(dāng)前文件還沒有保存的話,會有錯誤提示,這時需使用:w?先將其保存才行。
如果正在用vim編輯著多個文件,可以用?ctrl+^?在他們之間來回切換,比如現(xiàn)在同時打開了6個文件,則就有6個不同的緩沖區(qū),比如現(xiàn)在在編輯文件1,想切換到文件5去,則需要先把本文件保存(通過 :e ),然后再按5,再按ctrl+^,就切換到文件5了。
:rew???讀入編輯名單中的第一個文件,
:last 讀入編輯名單中的最后一個文件。:next會關(guān)閉光前文件打開下個文件開始編輯,但當(dāng)前文件也需要先:w保存。,但?:set
hidden?允許在有未保存的修改時切換緩沖區(qū),此時的修改由vim 負(fù)責(zé)保存.
你打開了幾個窗口,現(xiàn)在你想退出Vim,你可以分別關(guān)閉每一個窗口。更快的方法是:
:qall
這表示 "quit
all"(全部退出)。如果任何一個窗口沒有存盤,Vim都不會退出。同時光標(biāo)會自動跳到那個窗口,你可以用":write" 命令保存該文件或者":quit!" 放棄修改。如果你知道有窗口被改了,而你想全部保存,則執(zhí)行如下命令::wall這表示"write all"(全部保存)。但實際上,它只會保存修改過的文件。Vim知道保存一個沒有修改過的文件是沒有意義的。另外,還有":qall" 和"wall" 的組合命令::wqall這會保存所有修改過的文件并退出Vim?。最后,下面的命令由于退出Vim 并放棄所有修改:
:qall!
注意,這個命令是不能撤消的。
或者也可以用多窗口來在一個界面中編輯多個文件,如下:
vim -o a b
c 打開多個文件,每個文件一個窗口(水平分割)
vim -O a b c
打開多個文件,每個文件一個窗口(垂直分割)
或者:
打開一個?:sp 另外一個文件?(水平分割):vsp 文件名(垂直分割)如此就可以在一個窗口打開2個或多個文件了??梢允褂?ctrl + 兩次按 w在多個窗口的文件中切換
窗口大小調(diào)整:(輸入順序:ctrl+shift+w 行數(shù) +/-/>/<)
ctrl+shift+w,
5, - 當(dāng)前窗口縮小5行(高度,(如不指定行數(shù),默認(rèn)為1)
ctrl+shift+w, 5, +
當(dāng)前窗口增加5行(高度,(如不指定行數(shù),默認(rèn)為1)
ctrl+shift+w, 5, >
當(dāng)前窗口增加5列(寬度,(如不指定列數(shù),默認(rèn)為1)
ctrl+shift+w, 5, <
當(dāng)前窗口增加5列(寬度,(如不指定列數(shù),默認(rèn)為1)
ctrl+shift+w,
= 使所有窗口幾乎一樣大
ctrl+shift+w,
_(下劃線) 使當(dāng)前窗口最大化
十六、執(zhí)行shell命令
在 vi 中也可以執(zhí)行 shell 的命令。在命令模式下,指令:!command,command?是shell 命令。例如指令:!date 會把目前的時間和日期顯示到螢?zāi)簧?。要是你想把shell 命令的結(jié)果放到文件中,可以用:r
!command。比如r
!date 會把現(xiàn)在的時間放到光標(biāo)所在的行的下一行。可以指定行數(shù),例如:20r
!date?會把現(xiàn)在的時間放到第二十行。
如果你要下一連串的shell 命令但又不想離開vi,你可以在line mode 下指令sh。這個指令會建立一個shell,如果要離開sh回到vim,可輸入exit,或按ctrl-D 。
也可以選擇檔案中的文字作為shell 命令的輸入。輸出的結(jié)果會把替換掉你輸入的文字。例如:2,5!sort?會把第二列到第五列的文字依序排列,而原來的文字就會被覆蓋。
十七、編輯得更快一點
按詞移動
w
按下w會前進一個詞。
b
按下b會后退一個詞。
這里,就像在Vim中的大部分情況下一樣,在這兩個命令前面加上一個數(shù)字可以讓它們重復(fù)做多次。
移動到行首或行末
$
$會讓你移動到所在行的末尾。
^
^會讓你移動到所在行的開始。Home鍵也可以做相似的事。不過^會移動到第一個非空的字符處,而Home會移動到行首。
這兩個命令也接受數(shù)字參數(shù),比如
2$
會移動到下一行末。
在行上查找
f要查找的字符
f用來在一行上查找一個字符并移動到該字符所在處。比如
fx
用來移動到此行當(dāng)標(biāo)后第一個x處。如果有一個數(shù)字參數(shù),就可以指定移動到某個指定的匹配位置。
F
F用來向左查找。
移動到指定行
行號G
G命令會把你帶到用行號指定的行。如果使用沒有行號的G,將會移動到最后一行。
顯示當(dāng)前所在位置
:set number
Vim的可制定性是很強的,所以你可以通過:set設(shè)定很多選項。number就是其中之一。它是一個布爾選項,用來控制是否在最左邊顯示行號。
:set number
可以把它打開。
:setnonumber
則可以關(guān)閉此選項。
Ctrl+g
Ctrl+g會顯示當(dāng)然后在的位置。
向上和向下翻屏
Ctrl+u
會向上翻半屏
Ctrl+d
會向下翻半屏
刪除文本
dw
dw會刪除一個詞。你應(yīng)該可以看得出來,這里的w代表的就是word(詞).其實d后面可以加好多東西來控制刪除的對象。比如:
d$
會刪除從當(dāng)前位置到行末的所有內(nèi)容,同理,d^會刪除從當(dāng)前位置到行首的所有內(nèi)容。
數(shù)字放在哪
這里有一個疑問,如果想刪除三個詞,那么應(yīng)該怎么辦?是d3w,還是3dw。其實它們都能做到,不過原理不太一樣。d3w是一次刪除三個詞,而3dw是執(zhí)行三次刪除一個詞。其實這兩者可以混起來,比如2d3w。
改變文本
cc
用來刪除一行并進入輸入狀態(tài)。
cw
用來刪除一個詞并進入輸入狀態(tài)等。
替換字符
r替換的字符
r命令把當(dāng)標(biāo)處的字符替換成在r命令中指定的字符。
更改大小寫
~
通過~可以把光標(biāo)處的字符用它的大寫(如果現(xiàn)在是小寫)或小寫(如果現(xiàn)在是大寫)替換。
宏
Vim有著簡潔而強大的宏功能。
q宏名
按下 q+宏名 后會進入宏錄制狀態(tài),也就是說,此后發(fā)生的一切操作都會記錄到名為“宏名”的宏中。如果名為“宏名”的宏已經(jīng)存在,則將它覆蓋。
@宏名
會調(diào)用名為“宏名”的宏。