摘要:原文練上一年再來總結(jié)的使用技巧轉(zhuǎn)眼上的賊船有一年多了。一般來說,盡量多用是不錯(cuò)的選擇。中的移動(dòng)光標(biāo)的方式有很多,我來舉幾個(gè)我實(shí)際使用過程中應(yīng)用比較頻繁的技巧顯示相對(duì)行號(hào)。我無意間發(fā)現(xiàn)的一個(gè)十分實(shí)用的技巧,比顯示行號(hào)更好用。
原文:練上一年再來總結(jié)的vim使用技巧
轉(zhuǎn)眼上vim的“賊船”有一年多了。從PHP到C,都在用。想要真正用vim于日常的編碼工作,必然需要一些插件的支持。不過本文并不打算總結(jié)插件,筆者認(rèn)為vim的兩個(gè)精髓:組合和重復(fù)跟插件也沒有什么關(guān)系。
命令模式應(yīng)該是常態(tài)在大多數(shù)編輯器中,相信大家都喜歡敲幾個(gè)單詞就“保存(ctrl+s)”一下。而在vim中,保存是:w,而且需要在命令模式下進(jìn)行。因此,往往要按Esc:w多達(dá)三個(gè)鍵才能保存。很多初學(xué)者十分詬病這個(gè)設(shè)計(jì)。事實(shí)上,經(jīng)常使用Esc切換到命令模式才是vimer需要練就的第一個(gè)重要的反射行為。可以毫不夸張的說,只要你不在輸入文字,就應(yīng)該切換在命令模式下,命令模式應(yīng)該是常態(tài)!
HJKL讓右手歇歇,畢竟右手“很累”這是vim中的光標(biāo)上下左右的移動(dòng),剛開始使用vim的同學(xué)可能覺得這并沒有什么卵用,我用鍵盤上的上下左右就可以了!我們知道,vim的大部分快捷鍵需要在命令模式下完成,而且HJKL也是需要在命令模式下才生效的,如果你經(jīng)常在插入模式下工作,當(dāng)然不會(huì)去用HJKL。然而,當(dāng)你真正開始更多的使用命令模式的時(shí)候,你會(huì)懶到不想把右手挪到“上下左右”那兒去,這個(gè)時(shí)候HJKL成為無需思考的反射行為。HJKL的好處就是減少了右手的位移距離。畢竟右手還有很多“事情”要做。
讓你的操作可重復(fù)我們來舉個(gè)例子,假設(shè)如下文本
one two three four five six
我希望改成
"one","two","four","five","six"
首先光標(biāo)定位在該行的行首,可使用^。然后鍵入f?(?表示空格),此時(shí)光標(biāo)定位在one和two之間的空格處,然后鍵入c?","(修改空格,進(jìn)入插入模式,然后增加","):
one","two three four five six
接著按;.,光標(biāo)將先查找下一個(gè)空格,即重復(fù)f?,這個(gè)空格位于two和three之間,然后.可以重復(fù)上一次的修改操作,即c?",":
one","two","three four five six
接著重復(fù)按若干次;.即可完成所有中間字符的修改:
one","two","three","four","five","six
最后應(yīng)用I和A,添加開始和最后的雙引號(hào)就可以了。
通過這個(gè)例子,vimer必須要領(lǐng)會(huì)的一個(gè)精髓是:讓你的操作可重復(fù)!!。如果上面的例子,我們用l或者->來定位空格的話,由于one、two、three這些單詞的長度是不確定的,我們無法事先知道需要按多少次l,所以l定位是不可重復(fù)的。而通過f可以重復(fù)我們的查找操作,從而精確的定位到空格。另外,如果我們通過xi","代替c?","也是不可重復(fù)的,因?yàn)?b>xi","表示先刪除空格,然后進(jìn)入插入模式后鍵入",",這樣就是兩次分開的修改操作,而最近的操作變成了“進(jìn)入插入模式后鍵入","”,如果通過.重復(fù)這個(gè)操作,是無法刪除空格的。
這需要大量的實(shí)踐和練習(xí),才能改掉鼠標(biāo)流的思維定式。一般來說,盡量多用f、c、r是不錯(cuò)的選擇。另外,盡可能的利用A、a、o、O來進(jìn)入插入模式,而不是每次通過i進(jìn)入插入模式。
高效移動(dòng)光標(biāo)移動(dòng)效率是vim程序員達(dá)到甚至超過鼠標(biāo)流程序員的關(guān)鍵技能。vim中的移動(dòng)光標(biāo)的方式有很多,我來舉幾個(gè)我實(shí)際使用過程中應(yīng)用比較頻繁的技巧:
set relativenumber(顯示相對(duì)行號(hào))。我無意間發(fā)現(xiàn)的一個(gè)十分實(shí)用的技巧,比set number顯示行號(hào)更好用。通過這個(gè)設(shè)置,行號(hào)的顯示會(huì)根據(jù)當(dāng)前的光標(biāo)的相對(duì)位置顯示成偏移數(shù),并動(dòng)態(tài)變化。這個(gè)好處是,可以利用數(shù)字+j 數(shù)字+k來進(jìn)行多行跳轉(zhuǎn),因?yàn)槭蔷幾g行數(shù),所以數(shù)字不會(huì)太大。否則就算要向下移動(dòng)10行,我們可能也需要用138gg。
w、e、b:按照單詞進(jìn)行前后光標(biāo)跳轉(zhuǎn),也可以組合數(shù)字進(jìn)行跳轉(zhuǎn),不過以我的經(jīng)驗(yàn),與其去算要跳多少個(gè)單詞,不如多按幾次吧。
I、A:移動(dòng)到行首或行末的第一個(gè)字符處,并進(jìn)入插入模式。
H、M、L:光標(biāo)分別跳轉(zhuǎn)到可視區(qū)域的最上面、中間、最下面。
Ctrl+D、Ctrl+U:有時(shí),需要看的文本不在可視區(qū)域,通過這些組合進(jìn)行上下翻頁。
^、$、0:光標(biāo)移動(dòng)到行首和行尾(0是絕對(duì)行首)。不過因?yàn)?b>^和$都需要同時(shí)按住shift,而且數(shù)字鍵我們往往難以盲打,所以我一般直接使用I+Esc、A+Esc。
%:移動(dòng)到與當(dāng)前括號(hào)匹配的括號(hào)處。
gj、gk:有時(shí)可視區(qū)域不夠?qū)挘恍械淖址泻芏?,?dǎo)致了wrap。那么通過jk是無法直觀的定位到同一物理行,卻不在同一個(gè)可視行里的位置,此時(shí)需要gj和gk。
f、F:通過上面的例子,我們知道,f是find的意思,可以在一行內(nèi)查找某個(gè)字符出現(xiàn)的位置,并直接跳轉(zhuǎn)過去。比如f<可以從當(dāng)前光標(biāo)開始向右,找到第一個(gè)<,并移動(dòng)過去。F是向左查找。
;:重復(fù)上一次的f查找操作
.:重復(fù)上一次的修改操作,跟;可以說是好基友,經(jīng)常用來實(shí)現(xiàn)一些簡單的重復(fù)操作,比錄制宏要簡單很多。經(jīng)常有意識(shí)的使用這種簡單重復(fù),是vimer編輯思路進(jìn)階的分水嶺。
高效修改vim的另一個(gè)優(yōu)勢(shì)是高效修改。在vim下修改就要改掉傳統(tǒng)鼠標(biāo)流的思維方式,切忌提到修改就按i。有很多高效的修改辦法,而且這些辦法往往是可重復(fù)的。下面舉一些我常用的例子:
r:替換模式,替換當(dāng)前光標(biāo)所在位置的一個(gè)字符。雖然你同樣可以i進(jìn)入插入模式,然后刪掉那個(gè)字符,再輸入需要的字符,但這種操作是鼠標(biāo)流思維方式。替換是一個(gè)可重復(fù)操作,多用沒壞處。
cw:change word可以刪除從當(dāng)前位置到一個(gè)單詞的結(jié)尾,并進(jìn)入插入模式。這種操作常用于修改一個(gè)變量。比如對(duì)于:int count=0;希望把count改成cnt,那么當(dāng)光標(biāo)位于c字符處的時(shí)候,按cw可直接刪除count,并進(jìn)入插入模式。然后直接繼續(xù)輸入cnt即可。
caw:change a word可以刪除當(dāng)前光標(biāo)所在位置的單詞。對(duì)于int count=0;的例子,如果此時(shí)光標(biāo)在count中間某處,比如u處,直接鍵入caw可以達(dá)到同樣的效果。所以caw更強(qiáng)大一些。
c$、c^:舉一反三,可以猜到c$是從當(dāng)前位置刪除到行尾,并進(jìn)入插入模式。
ci":change inside "可以用于修改當(dāng)前位置附近,在相同配對(duì)的"中的內(nèi)容。比如對(duì)于const char *str="hello world";。當(dāng)在雙引號(hào)中間的任意位置鍵入ci"可以直接清空字符串,并繼續(xù)輸入新的希望的字符串。
ci(、ci[:舉一反三change inside ( change inside [。
cit:這個(gè)比較特殊,可以直接編輯匹配的xml標(biāo)簽中的內(nèi)容!經(jīng)常編寫html的童鞋可以熟悉一下。
yi":yank inside " 猜猜是啥意思?類似ci"只是把編輯操作編程復(fù)制操作,因?yàn)?b>y是復(fù)制!是不是很強(qiáng)大。
ya":yank around " 復(fù)制整個(gè)字符串,包括雙引號(hào)。
yw、yaw、daw、d$...:好了,這些可以"發(fā)明"出來了。
o、O:向下向上增加空行
u、Ctrl+r:undo和redo
上面的例子體現(xiàn)了vim組合的思想,很多命令可以通過組合得到不同的效果。
Visual模式是鼠標(biāo)流后遺癥,不過也有妙用v、V、Ctrl+v是Visual模式,類似用鼠標(biāo)選中一些文本。我在早期使用vim時(shí)候,十分喜歡用v,比如要?jiǎng)h除一個(gè)單詞,我往往會(huì)用vwd,試圖用vw選中一個(gè)單詞,然后d刪除。這種方式明顯是鼠標(biāo)流的后遺癥。直到我學(xué)會(huì)上面介紹的一些技巧后,v已經(jīng)很少用了。不過Ctrl+v是Block Visual模式,類似選中列,這個(gè)技巧有時(shí)很有用。比如有如下文本:
one two three four
希望變成
"one, two, three, four"
首先將光標(biāo)定位到one的o處,Ctrl+v,3j,$,A,,,Esc,V,3j,J。這一套連招下來,出來了:
one, two, three, four,
如果要合的行數(shù)很多,就比較有優(yōu)勢(shì)了。問我怎么知道按3j,上文提到的set relativenumber幫到你。
總結(jié)在開發(fā)效率上,不敢說vim優(yōu)于IDE,不過vim的編輯和修改速度是比鼠標(biāo)快的。使用vim的過程就是自我否定和自動(dòng)重塑的過程,如果你不斷的學(xué)習(xí)技巧的話,編輯習(xí)慣會(huì)一再被推翻,一再重塑。不斷有新的理解注入到日常的工作中。最終會(huì)形成自己編輯風(fēng)格。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/24900.html
摘要:學(xué)習(xí)整理注意后文中帶尖括號(hào)的描述表示鍵盤按鍵,比如回車是指回車按鍵。輸入文件名回車即可進(jìn)入編輯器編輯該文件。按鍵回車進(jìn)入替換模式可以連續(xù)替換多個(gè)字符。所有的命令都必須敲回車鍵結(jié)束。 前言 本文的初衷 從知道 vim 開始我就有心學(xué)習(xí)并嘗試過幾次,每次都是暫時(shí)的心血來潮,最終全部不了了之,就連最基本的 vimtutor 我都是學(xué)個(gè)兩三節(jié)就半途而廢,所以這次干脆寫篇文章,利用幾次學(xué)習(xí)把這篇...
摘要:走過了這一年,公眾號(hào)的名稱前前后后改了三次,最后定格為閏土大叔。均價(jià),這價(jià)格絕對(duì)屬于太原市最便宜的樓盤之一了。據(jù)售樓部的朋友說,未來兩年太原的房價(jià)還會(huì)迎來新一波的漲價(jià)潮,到了年,太原會(huì)承辦全國青少年運(yùn)動(dòng)會(huì),簡稱青運(yùn)會(huì)。 前言 從年前就嚷嚷著要走出去走出去,轉(zhuǎn)眼間已經(jīng)到了年底依然在我的大太原呆著。年底了,不能免俗的我,也來寫一篇2017年度工作總結(jié)的文章,湊湊熱鬧。如果對(duì)你有一點(diǎn)點(diǎn)啟發(fā),...
摘要:走過了這一年,公眾號(hào)的名稱前前后后改了三次,最后定格為閏土大叔。均價(jià),這價(jià)格絕對(duì)屬于太原市最便宜的樓盤之一了。據(jù)售樓部的朋友說,未來兩年太原的房價(jià)還會(huì)迎來新一波的漲價(jià)潮,到了年,太原會(huì)承辦全國青少年運(yùn)動(dòng)會(huì),簡稱青運(yùn)會(huì)。 前言 從年前就嚷嚷著要走出去走出去,轉(zhuǎn)眼間已經(jīng)到了年底依然在我的大太原呆著。年底了,不能免俗的我,也來寫一篇2017年度工作總結(jié)的文章,湊湊熱鬧。如果對(duì)你有一點(diǎn)點(diǎn)啟發(fā),...
摘要:執(zhí)行效率很重要,但是在很多情況下,程序員的效率更重要的,而且語言的執(zhí)行效率是可以發(fā)展的。,但是很牛逼,可以了解一些上的高級(jí)語言,比如。很聰明最大的好處,就是足夠成熟,市場占有率高。所以說,很傻,但是很聰明。碼農(nóng)界有很多圣戰(zhàn),。 對(duì)于編程 語言來說,什么是生產(chǎn)力?我覺得,更高的抽象層次就是生產(chǎn)力。 執(zhí)行效率很重要,但是在很多情況下,程序員的效率更重要的,而且語言的執(zhí)行效率是可以發(fā)展的。該...
閱讀 3703·2021-11-24 09:39
閱讀 837·2019-08-30 14:22
閱讀 3077·2019-08-30 13:13
閱讀 2382·2019-08-29 17:06
閱讀 3003·2019-08-29 16:22
閱讀 1310·2019-08-29 10:58
閱讀 2494·2019-08-26 13:47
閱讀 1681·2019-08-26 11:39