先附上鏈接
手把手教你把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不能進(jìn)行連續(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)直接到達(dá)該行谦纱。
六看成、查找時忽略大小寫和歷史查找
有時查找單詞時需要忽略大小寫,只要設(shè)置下面的就可以了
:setignorecase
還有另外一種忽略搜索時大小寫的方法更好用跨嘉,只要在待搜索字符串后加個\c就可以了
/stringYouWantToSearch\c
假如進(jìn)行過幾次查找川慌,想繼續(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)記這個超有用的東西讶踪!真是后悔莫及啊泊交!
以前在一個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也能達(dá)到同樣的效果牧挣;
*
按C=c$,替換當(dāng)前至行尾的內(nèi)容醒陆;
* s
的話瀑构,是替換當(dāng)前的字符,跟r的功能一樣刨摩;
*
以前刪除一行至末尾用d$寺晌,原來D就行了;
上面的大多數(shù)都可以加數(shù)字澡刹!
十呻征、可視選擇(這個我沒怎么用過.....)
* 按v進(jìn)行選擇,如果想控制頭和尾罢浇,按o/O進(jìn)行切換陆赋;
*
如果是大寫的V沐祷,則按行進(jìn)行選擇;
十一攒岛、刪除單詞和替換句子赖临、復(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的需要移動到單詞的首字符要方便∷〕恚 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ìn)入輸入模式而根據(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)簧掀ㄎ骸R悄阆氚裺hell 命令的結(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會前進(jìn)一個詞沿后。
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
用來刪除一行并進(jìn)入輸入狀態(tài)霎冯。
cw
用來刪除一個詞并進(jìn)入輸入狀態(tài)等铃拇。
替換字符
r替換的字符
r命令把當(dāng)標(biāo)處的字符替換成在r命令中指定的字符。
更改大小寫
~
通過~可以把光標(biāo)處的字符用它的大寫(如果現(xiàn)在是小寫)或小寫(如果現(xiàn)在是大寫)替換沈撞。
宏
Vim有著簡潔而強大的宏功能慷荔。
q宏名
按下 q+宏名 后會進(jìn)入宏錄制狀態(tài),也就是說缠俺,此后發(fā)生的一切操作都會記錄到名為“宏名”的宏中显晶。如果名為“宏名”的宏已經(jīng)存在,則將它覆蓋壹士。
@宏名
會調(diào)用名為“宏名”的宏磷雇。