国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vim 的哲學(xué)(四)

xiao7cn / 2581人閱讀

摘要:的哲學(xué)第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個系列帶來一些動態(tài)演示。所以目前為止你學(xué)會上述四個動作指令就足夠了。以詞為單位使得我們可以更精確也是更具語義化的移動光標(biāo),并且要比逐個字符的移動要快得多。

Vim 的哲學(xué)第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個系列帶來一些動態(tài)演示。原本我打算錄視頻的,但是文章都寫了那么些篇了,現(xiàn)在再錄視頻似乎晚了些,所以我研究了一下如何錄制高質(zhì)量的 GIF 動畫(第三方軟件都不好用,最后我還是用 QuickTime 和一段腳本來完成錄制,挺酷的~)。接下來先奉上第一彈:

查漏補(bǔ)缺

上一期的基礎(chǔ)配置我遺漏了一個蠻重要的選項:shiftround,這個選項真的很貼心很好用,遺憾的是官方文檔對此語焉不詳。我特意 Google 了一下才發(fā)現(xiàn)挺少有人解釋這個選項的?,F(xiàn)在我也忘記了當(dāng)初我是怎么知道它的,然后我發(fā)現(xiàn)用文字也還挺難解釋清楚,所以還是看動畫吧:

round 在這里應(yīng)該是取整的意思。當(dāng)你的縮進(jìn)不成倍時,開啟這個選項將會讓 Vim 自動幫你把周圍的縮進(jìn)化零為整,你就不需要手動去填/刪空格了。順便提前講一下,縮進(jìn)的指令是 <> 鍵,它們支持移動指令(馬上講到),也支持?jǐn)?shù)字前綴。對當(dāng)前行執(zhí)行縮進(jìn)是 <<>>,也就是連按兩次。我們在以后會詳細(xì)介紹關(guān)于縮進(jìn)的知識。

OK,加上它在你的基礎(chǔ)配置里,我們開始新的旅程!

移動與編輯

現(xiàn)在我們知道使用 Vim 的一個很重要的原則就是遠(yuǎn)離鼠標(biāo),遠(yuǎn)離可視化的定位裝置(當(dāng)然除了鍵盤以外),原因我就不再贅述了。在此原則之下,必然要有一些方式來幫助我們選中目標(biāo)然后做出我們希望的更改,也就是移動和編輯。

在常規(guī)模式里有兩個很重要的概念,一個叫做“動作”(Motions),另一個叫做“操作”(Operators)。動作,是指你能讓光標(biāo)移動到哪里,而操作則需要結(jié)合動作來決定你可以對文本做什么。通過二者的結(jié)合,我們可以逐漸體會 Vim 是如何貫徹保持簡單這一原則的。

hjkl 雖然簡單,但是在很多場合之下它們太沒效率了,對么?從現(xiàn)在開始我希望你記住:我們通常不用 hjkl 做大量的光標(biāo)移動。如果你發(fā)現(xiàn)你經(jīng)常抽瘋似的按這四個鍵在屏幕里來回移動,那你就已經(jīng)錯了!這四個鍵真正的主要用處是作為其他動作和操作的輔助鍵來使用的,隨著我們的深入學(xué)習(xí)你會越來越理解這一點。

那么除此之外我們還有什么選擇呢?

橫向移動 :help left-right-motions

當(dāng)我們以行/段為單位來審視我們的文本時,Vim 為我們提供了一些橫向移動的快捷動作。

移動指令 移動效果
0 移動光標(biāo)至行首
$ 移動光標(biāo)至行尾
^ 移動光標(biāo)至行首的第一個非空白符的字符
g_ 移動光標(biāo)至行尾的最后一個非空白符的字符
f{char} F{char} 向前(右)或向后(左)移動光標(biāo)至指定的字符({char})處,光標(biāo)停留在該字符之上
t{char} T{char} 向前(右)或向后(左)移動光標(biāo)至指定的字符({char})處,光標(biāo)停留在該字符前/后面

通過上面這個表格,我們可以獲取到以下信息:

Vim 的許多指令都是成對兒的(非常重要),學(xué)習(xí)各種指令時嘗試成對兒去練習(xí)會事半功倍。

空白符(空格,Tab)在 Vim 里是很重要的,許多命令都有不同的版本來應(yīng)對有/沒有空白符的狀況。這主要是為了滿足不同的人群習(xí)慣,比如說碼字兒的不是很在乎多一兩個空格,但是寫代碼的就不一樣了。

有些命令脫胎于正則表達(dá)式(相信你注意到了),所以結(jié)合正則來學(xué)習(xí)也能幫助你理解它們。

最后兩行的那幾個移動指令可能有一點不好理解,但是它們實在是太有用了,請你親自試一下。以后我再深入介紹它們。

這還沒完,對于橫向移動來說,最麻煩的是當(dāng)“回繞”(wrap)出現(xiàn)的時候。所謂回繞是指,當(dāng)一行(段)的字符數(shù)目超過屏幕的可視寬度范圍時,編輯器會將超出的部分自動轉(zhuǎn)移到下一行來顯示,但是這并非換行,也就是說沒有插入換行符,只是在顯示上不讓字符超出屏幕的最大寬度范圍而已。

這個特性當(dāng)然不是 Vim 特有的,幾乎所有的編輯器都支持回繞,可是 Vim 對待回繞是和其他編輯器完全不同的,尤其是在編輯長文檔時會讓你覺得有些古怪。我不會在本章詳細(xì)介紹關(guān)于回繞的一切,因為本系列面向的讀者主要是程序員。對于編寫代碼這樣的工作,只要你遵循良好的編碼規(guī)范(你應(yīng)該這么做),那就很少會出現(xiàn)應(yīng)對回繞的情況。所以目前為止你學(xué)會上述四個動作指令就足夠了。未來的某一天我會專門寫一篇如何打造專業(yè)的 Markdown 編輯功能,在那時候我們再回過頭來好好談?wù)劵乩@。

現(xiàn)在我列出橫向移動時如果遇到回繞行我們可以做什么,這樣你可以自己試一下:

移動指令 移動效果
gh gj gk gl 讓光標(biāo)在回繞行內(nèi)做四方向移動
g0 移動光標(biāo)至當(dāng)前回繞行的行首
g$ 移動光標(biāo)至當(dāng)前回繞行的行尾
g^ 移動光標(biāo)至當(dāng)前回繞行的行首的第一個非空白符的字符
gm 移動光標(biāo)至當(dāng)前回繞行的中間位置(或盡可能接近中間的位置)
關(guān)于 g

你或許已經(jīng)注意到 g 鍵的多次出現(xiàn)了,似乎它和其他指令相互配合可以產(chǎn)生許多新指令。沒錯,在 Vim 中有那么幾個“萬能的”指令修飾鍵,g 是其中之一。如果你好奇還有多少指令是用 g 來修飾的,你可以鍵入 :help g 來查看一個列表。另外你應(yīng)該知道這份列表其實是索引文檔的一部分,你可以時常打開索引(:help index.text)來考察下自己對 Vim 到底有多熟悉。

縱向移動 :help up-down-motions

縱向移動的指令比較多,我還是先介紹幾個簡單并且最有用的:

移動指令 移動效果
gg 讓光標(biāo)跳轉(zhuǎn)到文檔的最開始處
G 讓光標(biāo)跳轉(zhuǎn)到文檔的最后一行
{count}G :{count} 讓光標(biāo)跳轉(zhuǎn)到指定的行號,即 {count} 所代表的行號
{count}% 讓光標(biāo)跳轉(zhuǎn)到指定的百分比位置,比如說第一行是 0%,最后一行是 100% 等
H 讓光標(biāo)移動到當(dāng)前屏幕的頂部(High Position),不滾屏
M 讓光標(biāo)移動到當(dāng)前屏幕的中部(Middle Position),不滾屏
L 讓光標(biāo)移動到當(dāng)前屏幕的底部(Low Position),不滾屏

{count} 是一個前綴標(biāo)記,意思是這個指令前面可以追加數(shù)字,比如說如果你鍵入 25G,那么光標(biāo)就會移動到當(dāng)前文檔的第 25 行去。這個特性非常重要,Vim 的強(qiáng)大和靈活在很大程度上都仰仗類似的前綴特性。

G{count}G 其實是同一個指令,只是帶上數(shù)字前綴與否會產(chǎn)生不同的效果,所以我分開寫了。這是第一次,一旦你了解了這個特點,以后我就沒必要分開了。

ggG 是一對經(jīng)典的搭檔,許多非常有用的操作都是它們倆配合完成的。舉個例子,《Vim 的哲學(xué)》所有的文字都是在Vim 里完成的,每一次到最后我都要把它們復(fù)制粘貼到 SegmentFault 博客的發(fā)表頁面做最后的檢查并且發(fā)布,如何全部復(fù)制過去?有很多辦法,我一般選擇如下兩種:

如果我使用 MacVim(GUI 環(huán)境),那么我先 command + a,然后 "+y 或者 "*y

如果我使用 CLI Vim(命令行環(huán)境),就變成一串指令:gg"+yG,拆開看:gg + "+y + G

喂喂,command + a 是全選吧,這是 Vim 的指令嗎?你別忽悠我喔~

我可沒有說你只能用 Vim 的內(nèi)置指令呀,了解你所處的環(huán)境,在不影響效率,不打亂節(jié)奏的前提下善于利用一切可以利用的工具,這不正是極客的特質(zhì)之一嗎?只不過我不是每次都有機(jī)會用到 MacVim 的,所以 gg + G 的經(jīng)典組合還是必須要掌握的。至于 "+y,這個涉及到寄存器(:help registers)的知識,我們稍后就會講到,別急。

以詞為單位的移動 :help word-motions

hjkl 是以字符為單位來移動的,橫向和縱向移動基本上都是以句/段為單位來使用的,然而有些情況下我們需要的是介于二者之間的移動單位,也就是以詞為單位。以詞為單位使得我們可以更精確(也是更具語義化)的移動光標(biāo),并且要比逐個字符的移動要快得多。

這里所說的詞特指的是像英語那樣的以空格(有時候也會是別的符號)為分隔符的詞——很遺憾,中文分詞是很大的挑戰(zhàn),Vim 沒有內(nèi)置這一功能。像這樣的詞都可以分出詞頭和詞尾,比如 word 這個詞,詞頭是 w,詞尾是 d。

于是在 Vim 中的詞組移動也按照詞分頭尾的特性分成了兩組:

移動指令 移動效果
w b 向前(右)或向后(左)移動光標(biāo)至下一個詞組的詞頭位置
e ge 向前(右)或向后(左)移動光標(biāo)至下一個詞組的詞尾位置

一些朋友喜歡尋找每一個指令對應(yīng)的含義,這樣有助于形象記憶。事實上,這些含義也不是我編造出來的,內(nèi)置的文檔里都有很詳細(xì)的描述,比如說上面這幾個分別是:

w:Words forward

b:words Backward

e:forward to the End of word

ge:backward to the End of word

你可能在想:我干嘛要關(guān)心詞頭和詞尾,好麻煩??!這個問題其實無關(guān)于 Vim 的哲學(xué),而是語言的哲學(xué)。

你看,咱們的漢語和英語是完全不同的兩個語種。在漢語里詞與詞的界限是靠意義來劃分,書寫形式則不太重要。用漢語寫一句話,你可以在詞組之間添加空格或者不添加空格,基本上不會對讀者產(chǎn)生影響(除了個別會產(chǎn)生歧義的特例)。而英文及其他類似語言則不然,它們加或不加空格的差別大了去了!一段英文如果沒有空格,那幾乎就是無法閱讀的。因此,對于母語為類似語種的人群來說,空格所劃分出的詞頭與詞尾是自然而然,司空見慣的事情,他們一點也不會覺得奇怪。不幸的是,作為程序員的我們也(被迫)得使用英語作為我們的主要書寫語言,因此你必須習(xí)慣去辨識和使用詞頭與詞尾。一旦你習(xí)慣了,你會發(fā)現(xiàn)它們非常有用。

為了讓你看到正確使用詞頭詞尾的效果,我放一張圖給你對比一下差別。在這張圖里,我分別演示了四種操作:

在句首,向右刪除兩個單詞,使用詞頭作為動作指令(w

在句首,向右刪除兩個單詞,使用詞尾作為動作指令(e

在句尾,向左刪除兩個單詞,使用詞頭作為動作指令(b

在句尾,向左刪除兩個單詞,使用詞尾作為動作指令(ge

每一步操作之后,注意觀察光標(biāo)停留的位置和最終的效果:

這些結(jié)果或許是你期望的,也可能不是,但這不要緊,沒有哪一種是絕對正確或錯誤的,重要的是你需要了解它們之間的差別,于是你可以在必要的時候選擇正確的方式。

不過故事還沒完,以上四個指令各自還有一個變體,分別是:W,B,E,gE。要了解它們的作用,我們得先聊一下詞的定界符。

對于詞和詞之間,空格是唯一的區(qū)隔標(biāo)準(zhǔn)嗎?很顯然不是。像這樣的詞:i_am_a_word,Vim 會視為 1 個詞,但是 i-am-a-word,Vim 則會視為 7 個詞!這是因為 Vim 允許你為其指定可以被視作詞組定界符的字符,于是當(dāng) Vim 遇到這些字符的時候,就會認(rèn)為是一個詞的結(jié)束。默認(rèn)情況下,_ 不是定界符,所以它會被視作一個詞的組成部分。

然而有些時候我們希望把這些定界符也當(dāng)作詞組的一部分,這樣我們可以移動的快速一點,這時大寫版本的詞組移動指令就派上用場了,它們永遠(yuǎn)都只把空白符(空格、TAB、EOL)視作詞組的定界符。

你會覺得自己定義定界符很酷吧?我會把它放在高級設(shè)置那一篇來講。

基礎(chǔ)編輯 :help operator

Vim 內(nèi)置了 15 個編輯指令(還有一些變體),但是一般來說我們用不到那么多。在本節(jié)我們來學(xué)習(xí)其中的五種(共計 10 個):

刪除 :help d

如果你把光標(biāo)對準(zhǔn)某個字符,然后按下 d(delete),你會發(fā)現(xiàn)什么都沒有發(fā)生?不要驚訝,編輯操作是要配合移動指令來干活的,我之前花大力氣介紹一堆移動指令不是漫無目的的不是?

OK,精彩的來了。當(dāng)你按下 d,Vim 會說:“好的伙計,你想要刪除對吧?接下來請告訴我你要刪什么?”

如果你要刪一個詞,按下 dw,也就是 delete word。

如果你要刪除兩個詞,按下 d2w 或者 2dw,它們的效果是一樣的,但是它們代表的含義略有差別:

d2w 意思是:刪除 -> 2 個 -> 詞

2dw 意思是:2 次 -> 刪除 -> 1 個詞

在這個例子里,兩種操作的結(jié)果不會產(chǎn)生歧義,所以你能得到一樣的效果。但是以后你會發(fā)現(xiàn)在某些特定的條件下,數(shù)字前綴在不一樣的地方會產(chǎn)生不一樣的效果(不只局限于刪除操作)。所以,正確的理解操作的含義是有必要的,請記?。?/p>

  

理解操作的含義,而不是背誦操作的順序。就好像你說話說的是你想要表達(dá)的意思,而不是字詞的某種排列組合。有些時候你顛倒字詞的順序不會影響你要表達(dá)的意思,因為不存在歧義,但有些時候則正好相反,切記切記!

如果我要刪除一整行怎么辦?簡單:dd。

那如果我想要從光標(biāo)的位置開始一直刪除到行結(jié)束呢?那還用我教你?d$!不過 Vim 還有另外一個版本等價于 d$,它是:D。

哦,那這么說如果我使用 0d$ 或者 0D,就是和 dd 等價的咯?

啊哈~聰明的童鞋,很抱歉你錯了!但是不怪你,這是一個很重要的區(qū)別,我們來多帶帶看一下示范:

看明白了嗎?其實差異是非常明顯的,dd 是連同行尾的行結(jié)束符(EOL)一起刪除的,所以粘貼的時候也會連著行結(jié)束符一起粘貼;而 0D0d$ 則不會包含行結(jié)束符。

你可能還納悶?zāi)?,不是演示刪除的嗎?為什么刪掉的東西還能再粘貼回來呢?嗯,可能刪除這個詞不太恰當(dāng),如果改叫剪切是不是忽然就覺得貼切起來了?

Vim 的刪除操作和我們常見的剪切非常相似,事實上 Vim 的刪除指的是從你的眼前把目標(biāo)文字移除到寄存器中,之后你還可以從寄存器里把刪除的部分再粘貼回來。Vim 擁有一堆各式各樣的寄存器,擅于使用寄存器可以讓你的編輯工作變得異常輕松。今后我們會多帶帶介紹寄存器的進(jìn)階使用。

讓我來問你一個問題:如果要刪除一個字符該怎么辦?你或許已經(jīng)了解到 x 可以刪除光標(biāo)所在的那個字符,X 可以刪除光標(biāo)左邊的那個字符,但是你是否知道這兩個功能也是從 d 演化出來的呢?試著找找答案吧。

改寫 :help c

在你執(zhí)行完刪除之后,緊接著按下 i(insert),你就等于在改寫之前刪除的內(nèi)容了。如何把這兩步簡化成一步?答案就是 c(change)了。對于 c,真的沒什么好講的,你學(xué)會了 d 就等于學(xué)會了 c,因為 c 就等于 d 完了緊接著 i 而已。

而且其他相關(guān)聯(lián)的操作也是類似的,比如說:

c2w:改寫兩個詞

cl:改寫光標(biāo)所在位置的字符,并且 s 等價于 cl

cc:改寫光標(biāo)所在的一整行,并且 S 等價于 cc

c^c$:從光標(biāo)所在位置開始一直改寫到行頭/行尾,并且 C 等價于 c$

s 比較少用,因為通常改一個字符我們會使用 r,也就是替換(replace),但是 s 在編輯中文的時候有妙用,容我在這里賣個關(guān)子,等到打造專業(yè) Markdown 編輯器的時候再說(實在是不能都說了,要不然這篇結(jié)束不了了)。

Scc 多節(jié)省一次按鍵,而且也比較好按(在標(biāo)準(zhǔn)鍵位上),所以推薦用 S 來代替 cc

復(fù)制 :help y

復(fù)制是幾個基礎(chǔ)編輯操作里怪癖略多的一個。首先是它的命名,yyank 的首字母,但是 yank 又是什么?它和拷貝(復(fù)制)有什么關(guān)系呢?

這也和寄存器有關(guān)。你看,Vim 的復(fù)制/剪切(刪除)/粘貼操作都是基于它底層的寄存器的,由于 c 已經(jīng)被改寫(change)占用了,而 Vim 的復(fù)制實質(zhì)上是把目標(biāo)文本拉拽(yank)到寄存器中備用,所以……好了你知道了就是了,咱不解釋那么多,反正 y 就是復(fù)制了,愛咋咋地~

另外一個怪癖出在 Y 身上,按照之前刪除和改寫的經(jīng)驗,你一定會認(rèn)為 Y 就等同于 y$ 唄,(Vim 亂入:“呵呵,圖樣圖森破!你以為我會讓你這么輕易就掌握訣竅嗎,少年?”)可是很不幸你又錯了。這一回,Y 又和 yy 等價了……

我一直都沒鬧清楚為什么到了復(fù)制這里就和刪除/改寫不一樣了,就連官方的幫助文檔都是這么說的:

  

如果你希望 Y 是從光標(biāo)處復(fù)制到行尾(這樣更合乎邏輯,不過不兼容 Vi),你可以使用 :map Y y$

看起來唯一的原因就是為了和老 Vi 兼容,但是我們完全不在乎這一點!后面的 :map Y y$ 是鍵位映射,雖然我們還沒講到,不過這一句你已經(jīng)可以把它放到你的 .vimrc 里了,重啟 Vim 之后你會發(fā)現(xiàn) Y 的表現(xiàn)和 C D 它們保持一致了,謝天謝地!

粘貼 :help p

粘貼就單純多了,只有兩個指令:

操作指令 移動效果
p 自光標(biāo)所在位置向右粘貼默認(rèn)寄存器里的內(nèi)容
P 自光標(biāo)所在位置向左粘貼默認(rèn)寄存器里的內(nèi)容

默認(rèn)寄存器里的內(nèi)容取決于你在粘貼前最后的編輯動作,有可能是刪除或復(fù)制的一段文本,也有可能是其他的。由于我們還沒有詳細(xì)介紹強(qiáng)大的寄存器功能,你或許會偶爾感到有些不便,在這里我先介紹一個最常用的技巧:

有時候,我們需要完成如下操作:

在某處復(fù)制或刪除(剪切)了一些文本

在另外一處刪除一些文本

把之前復(fù)制或刪除(剪切)的文本粘貼到這里

你看,這實際上是要用 A 處的文本來替換 B 處的文本,但由于默認(rèn)寄存器只保留了最后一次的復(fù)制/刪除(剪切)內(nèi)容,所以當(dāng)你完成第 2 步的時候,你在第 1 步準(zhǔn)備好的文本已經(jīng)沒了……大多數(shù)人是這么做的:

在某處復(fù)制或刪除(剪切)了一些文本

來到另外一處,先把這些文本粘貼到空白的地方

把需要替換的文本刪除

清理多余的空白(如果需要的話)

實際上,我們可以讓 Vim 不把指定的內(nèi)容放入默認(rèn)寄存器,這樣就不會覆蓋預(yù)先準(zhǔn)備好的內(nèi)容了,這等同于徹底刪除而不是剪切。Vim 的默認(rèn)寄存器是 ""(也叫匿名寄存器,:h quotequote),它保存常規(guī)的復(fù)制/刪除等操作的內(nèi)容,Vim 還有一個名字很酷的寄存器叫做:黑洞寄存器(Blackhole Register,:h quote_),它的按鍵是 "_。如果你在鍵入任何操作之前先輸入 "_,操作的結(jié)果將不會被任何寄存器保留下來,就好像丟入了一個深淵黑洞,再也回不來了……(好傷感 T_T)

因此,我們可以這么玩:

在某處復(fù)制或刪除(剪切)了一些文本

使用黑洞寄存器刪除需要替換的內(nèi)容,例如刪除一行:"_dd

直接粘貼,搞定!

我把這個過程也錄了下來,你可以對照看看:

我真是愛死這玩意兒了!不過你要知道,就上例而言黑洞寄存器不是唯一的辦法,說不定你更喜歡別的操作組合,比如下面這個:

這一套“組合拳”沒有用黑洞寄存器,它的好處是如果我反悔了,我還可以撤銷之前的操作把被替換的內(nèi)容找回來。整個過程的按鍵順序是這樣的:y$ -> gt -> gP -> D。

請允許我用更加具有語義的方式來重復(fù)一遍上面的操作:

y$:從光標(biāo)所在位置(行首)復(fù)制到行尾(不包括換行符)

gt:切換至下一個標(biāo)簽頁

gP:自光標(biāo)位置向左粘貼剛才復(fù)制的內(nèi)容,結(jié)束之后把光標(biāo)向右移動一個字符(這就是 g 的作用,為了把末尾的 . 保留住。你也可以使用 Pl 實現(xiàn)一樣的目標(biāo))

D :自光標(biāo)位置刪除到行尾

我希望你理解我這樣重復(fù)一遍的原因,它包含了體現(xiàn) Vim 哲學(xué)的三個側(cè)面:

每一步都保持簡單的顆粒操作

從不死記硬背,而是去表達(dá)你的意圖,用你自己的方式

條條大路通 Vim,何必死撞一棵樹?

好吧,第三點純粹是我在胡扯,哈哈。

大小寫轉(zhuǎn)換

大小寫轉(zhuǎn)換其實不算什么大事,本來我也猶豫還要不要介紹一下,但是考慮到這個在編程的時候還挺有用的,于是索性一并說了吧,反正也不多……

操作指令 移動效果
~ 轉(zhuǎn)換光標(biāo)所在字符的大小寫(嚴(yán)格來說,這不是一個操作指令)
g~ 轉(zhuǎn)換字符的大小寫(這個才真的是)
gu 強(qiáng)制轉(zhuǎn)換成小寫
gU 強(qiáng)制轉(zhuǎn)換成大寫

解釋一下頭兩個,~ 不是操作指令,是因為它沒辦法和移動指令結(jié)合,它就只會轉(zhuǎn)換當(dāng)前光標(biāo)所在位置的那個字符。如果你有多個字符需要轉(zhuǎn)換,你就只能一個一個按過去。g~ 才是轉(zhuǎn)換大小寫的正式版,它可以結(jié)合移動指令。比方說按下 g~3j 會把往下 3 行的字符大小寫都轉(zhuǎn)換了(小寫變大寫,大寫變小寫)。不過 Vim 有一個選項叫做 tildeop(:h tildeop),它默認(rèn)是關(guān)閉的,如果你開啟它,~ 就會變成和 g~ 一樣了。這選項我記得很熟,因為我經(jīng)常在團(tuán)隊里做重構(gòu)工作,這種改寫命名的活兒一再重復(fù),我索性就把 ~ 變成真正的操作指令了。

另外,毫無意外的,它們幾個都有直接操作當(dāng)前一整行的快捷版本,分別是:g~~ guu gUU。

  

趣味知識:你知道 ROT13 加密編碼嗎?這可能是世界上最簡單的加密手段了,有意思的是 Vim 也內(nèi)置了 ROT13 編碼/解碼功能。閑來無事的時候可以拿來逗別人玩哦!切換 ROT13 編碼/解碼的操作指令是:g?(:help g?)

縮進(jìn)與排版
操作指令 移動效果
gq 自動應(yīng)用排版規(guī)則
gw 自動應(yīng)用排版規(guī)則(光標(biāo)位置不變)
= 自動應(yīng)用縮進(jìn)規(guī)則
< > 手動應(yīng)用縮進(jìn)規(guī)則(左右兩個方向)

前面兩個在編寫代碼時不太常用,倒是在編寫文檔時能發(fā)揮作用,因此它們不是重點,請自行查閱文檔并嘗試。

后面兩個就比較常用了,所謂“自動應(yīng)用縮進(jìn)規(guī)則”,前提是你得有可用的縮進(jìn)規(guī)則。Vim 內(nèi)置了非常多種語言的縮進(jìn)規(guī)則,那些沒有內(nèi)置的也基本上都可以在網(wǎng)上找到合適的縮進(jìn)規(guī)則插件。此前我們也在基礎(chǔ)設(shè)置里打開了 filetype indent on,所以此時如果你打開一份源碼文件,然后按下 gg=G,“唰”的一下——整個世界清靜了。

還記得吧?gg 是去文件的最開始處,G 則是去文件的最后一行,所以這條命令的含義是:“從文件的開始處應(yīng)用自動縮進(jìn)規(guī)則直到文件的最后一行”。當(dāng)然你可以不必總是對整個文件進(jìn)行自動縮進(jìn),之前我們提到過的移動指令都可以搭配使用,之后我們還要介紹更加強(qiáng)大靈活的文本對象選擇指令,搭配上自動縮進(jìn)那叫一個如虎添翼~

至于 <> 就沒什么新鮮的了,手動縮進(jìn)唄!縮進(jìn)的寬度是由 shiftwidth 指定的,咱們上次已經(jīng)設(shè)置過了的有木有?另外它們也有針對當(dāng)前行的快捷版本,你已經(jīng)知道了,是吧?

  

想知道你的 Vim 內(nèi)置了那些語言的縮進(jìn)規(guī)則?鍵入這條命令::e $VIMRUNTIM/indent

Bonus

你現(xiàn)在可以嘗試把這些最常用的指令應(yīng)用在你的日常工作里了,如果你能堅持去尋找最有效率的操作方式,你終將會明白其實根本用不著裝太多的插件。我很樂意進(jìn)一步幫助你,所以你如果在使用中有任何疑問請不要客氣盡管詢問我,我也喜歡看看有什么新的挑戰(zhàn),所以來吧~


其實,第四篇本來想直接講文本對象的,但是我擔(dān)心新手會看不太懂,于是把文本對象一再往后擠。擠到現(xiàn)在才發(fā)現(xiàn),天啊!這篇太長了,實在是不能再繼續(xù)下去了。于是,我們只好對文本對象說拜拜了~咱們下期再見!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24789.html

相關(guān)文章

  • Vim 哲學(xué)(一)

    摘要:之所以能卓爾不群靠地就是一種自成一派且精悍有效的編輯器哲學(xué)當(dāng)然也是,就好像網(wǎng)游千千萬卻唯有一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。征服其實是一種領(lǐng)悟,我融入了的哲學(xué)而已。這也是好東西,它比上一個更貼近的哲學(xué)。 就在幾個小時以前,我回答了一個關(guān)于推薦開發(fā)工具的問題,很多朋友表示喜歡和鼓勵,非常感謝!我也很想多寫一些細(xì)節(jié),于是便起意開一個系列來聊聊我多次提到的 Vim。 ...

    honhon 評論0 收藏0
  • Vim替換小技巧(兼淺談Vim哲學(xué)

    摘要:本文將以此為起點,介紹一些替換小技巧。實話實說,使用命令來替換有違于大多數(shù)程序員的習(xí)慣。接下更進(jìn)一步,教多幾個小技巧。這么一來,替換將僅在當(dāng)前大括號內(nèi)生效。在替換局部變量時,比起全局替換,這樣的替換方式無疑會更高效。 想必用過Vim的人都知道,在Vim里面,以下命令可以替換當(dāng)前文件的內(nèi)容: :[range]s/{要被替換的模式}/{替換的內(nèi)容}/[flags] 其中range指定替換命...

    ConardLi 評論0 收藏0
  • Vim 哲學(xué)(二)

    摘要:為什么要有模式呢以上其實已經(jīng)講述了一些原因,但真正的價值還在于接下來要講到的哲學(xué)。鼠標(biāo)與快捷鍵的操作治標(biāo)不治本,它們沒能從根本上解決這個問題。 學(xué)會用不同的角度去看待和理解這個世界,你收獲的永遠(yuǎn)會比你想象的更多。 上回我分享了如何掌握基礎(chǔ)移動的心得體會,而對于很重要的模式卻只是一帶而過,這其實是有原因的。過去我有過幾次教新手 Vim 的經(jīng)歷,按照慣常的方式先告訴他們模式切換,...

    ashe 評論0 收藏0
  • Vim 哲學(xué)(三)

    摘要:插件鍵位映射技巧性的配置等等都是錦上添花,它們有助于你進(jìn)一步提高效率以及個性化你的工作環(huán)境,但是對于哲學(xué)的理解幫助甚少。為你開啟語法高亮。你可以自定義各種語言的語法高亮,無非就是根據(jù)這些規(guī) 如果沒有挑戰(zhàn),人生將多么無趣! 兩種副本 在我的硬盤上總是保留著(至少)兩份 Vim 的配置文件。其中一份是所謂完全正式版,它的文件名是 .vimrc,到本系列結(jié)束的時候,我們將了解其中...

    klinson 評論0 收藏0
  • Vim - 適合自己,才是最好

    摘要:原文鏈接適合自己的,才是最好的被稱為編輯器之神,是我用過之后才體會到的,用之前實在不敢對它做出什么評價。最初的不適,換來的是效率的飛升。感悟在學(xué)習(xí)使用的過程中,我最大的感悟就是適合自己的,才是最好的。 原文鏈接:Vim - 適合自己的,才是最好的 Vim 被稱為編輯器之神,是我用過之后才體會到的,用之前實在不敢對它做出什么評價。在大學(xué)時代,Vim 的大名就已如雷貫耳,但由于它陡峭的學(xué)...

    legendmohe 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<