VIM打造為超級IDE

先附上鏈接

手把手教你把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 的命令。在命令模式下,指令:!commandcommand?是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)用名為“宏名”的宏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容