1. 程式人生 > >[Vim]註釋程式碼的四種姿勢

[Vim]註釋程式碼的四種姿勢

註釋程式碼的四種姿勢

之前的部落格計劃又因為各種各樣的原因延後了,想著總不能這麼一直拖下去,於是就有了這篇部落格…

我們給程式碼添加註釋基本上有兩種場景,一種是給模組、類、函式編寫docstring,而另一種則是臨時將已經存在的程式碼註釋掉。當我們想臨時註釋程式碼時,如果使用的是IDE,那麼這是一件非常簡單的事情,只需要框選程式碼然後按一組快捷鍵就可以了。可是Vim並沒有提供添加註釋的快捷鍵,這對於新手來說是一個無法避免的坑。

不過Vim的優勢也在於它的靈活性,區區註釋是沒辦法難倒Vimer的。上帝關閉了一扇窗,卻為你打開了另外四扇窗!下面我將通過介紹Vim中註釋程式碼的四種姿勢,帶你感受Vim的強大之處。

一 瘋狂原始人

說到註釋,稍微對Vim熟悉一些的人應該會下意識地敲出這套華麗的連招:[I|^i|0i]{Comment}<ESC>

  • I代表從本行的第一個非空字元插入,i代表從當前位置插入
  • ^將游標移動到本行的第一個非空字元,0將游標移動到本行的第一個字元(所以I和^i的效果其實是一樣的)
  • {Comment}代表註釋符號,比如Python中的#,C中的//
  • 最後按<ESC>鍵退出插入模式

以上就是最原始的添加註釋的方法啦,符合直覺,在臨時註釋一行的時候非常方便。可是一次只能註釋一行,要註釋的行數一多的話,這種方法是萬萬行不通的,如果每一行都去手動添加註釋,那真是一個“瘋狂原始人”!

二 重複的工作應該交給機器人

每次都像上面那麼敲,顯然不符合一個Vimer該有的氣質。那麼有什麼方法能把我們從重複的勞動中解放出來呢?答案是巨集,巨集就是Vim世界中的機器人,它會機械地重複你教給它的動作。

讓我們嘗試錄製一個巨集:q{Name}[I|^i|0i]{Comment}<ESC>jq

  • 第一個q代表開始錄製一個巨集
  • {Name}是儲存巨集的暫存器的名稱,可以是一個字母或者數字
  • [I|^i|0i]{Comment}<ESC>完成一行的註釋
  • j將游標移動到下一行
  • 最後一個q結束巨集的錄製

這串添加註釋的巨集會儲存在你指定的暫存器裡面,只需要呼叫@{Name}

就可以重放巨集了。當你想註釋多行程式碼時,只需要在巨集呼叫的前面加上次數就行,比如[email protected]{Name}。看,機器人跑起來了!

三 機器人做不到的事

巨集雖然方便,可是它畢竟只是一個沒思想的機器人,只能幫我們做一些重複的工作,有些事巨集是做不到的。設想一下,如果要註釋的程式碼行數一多,一下子算不出來要重放幾次,巨集就顯得有些力不從心了。(當然你可以選擇直接使用多行註釋)

難道我們就沒有更好的辦法了嗎?當然不是。這時候就要請出Vim的查詢替換功能了::{Start},{End}s/^/{Comment}<ENTER>

  • 冒號:開始一行命令
  • {Start}代表註釋開始的行數,{End}代表註釋結束的行數,中間用逗號,隔開
  • s(substitute)命令用於替換字串
  • 第一個斜槓/後面跟著一個正則表示式,匹配被替換的字串,這裡用^匹配一行的起始位置
  • 第二個斜槓/後面跟著替換的內容,也就是註釋符號{Comment}
  • 最後按回車鍵<ENTER>執行命令

查詢替換功能不僅僅可以用於生成註釋,在不同的場景下還可以開發出更多不同的實用功能。

四 塊sao操作

上面使用查詢替換功能的方式看似已經完美了,可是在實際使用的時候還是不太舒服,究其原因是因為查詢替換使用起來太麻煩了,每次都要敲很多的字元,太反直覺。作為一個合格的Vimer當然不可以滿足於這種看起來美好,實際上麻煩的糖衣炮彈。

在Vim中,有一個“VISUAL BLOCK”模式,可以給我們提供更直觀的註釋方法:[<C+v>|<C+q>]{Lineno}G0I{Comment}<ESC>

  • <C+v>啟動塊操作模式,由於Windows上面<C+v>跟貼上的快捷鍵衝突了,所以被替換為<C+q>
  • {Lineno}代表行數,G將游標跳轉到前面指定的行,這裡你也可以使用hjkl或者別的方式跳轉,這也是VISUAL BLOCK模式的優勢:直觀
  • 0將游標移動到本行的第一個字元,防止有些程式碼不被框選到
  • I開啟插入模式(注意,這裡不可以使用i)
  • {Comment}代表註釋符號
  • <ESC>退出插入模式

當你按下<ESC>的那一刻,就會發現所有被框選到的程式碼都加上了註釋,perfect!

怎麼取消註釋

這是一道送分題:把插入註釋的操作換成x(刪除字元),查詢替換則把前兩個字元(..)替換為空即可。

有沒有更懶的方法

什麼?你還想更懶???很好,非常有前途…

著名的Vim外掛開發者Martin Grenfell開發了一款外掛NERD Commenter。安裝外掛之後,只需要在VISUAL模式(v鍵)下選中程式碼塊,然後按<leader>cc或者<leader>cb就可以添加註釋了,取消註釋則是<leader>cu

外掛具體的細節在這就不介紹了,如果有需要了解的請移步專案根目錄

總結

到這裡有些讀者可能會問,既然有現成的外掛,為什麼前面還要講那麼多廢話呢?其實,本篇的重點不在於學習怎麼添加註釋,而在於通過這四種不同的添加註釋的姿勢,學習到一個Vimer該有的思考方式。看,我給圓回來了

而且,畢竟不是所有環境都有現成的外掛嘛,授人以魚不如授人以漁,希望本篇能對你有所幫助。

孔乙己自己知道不能和大佬們談天,便只好向萌新說話。有一回對我說道,“你用過Vim麼?”我略略點一點頭。他說,“用過Vim,我便考你一考。Vim裡面的註釋,怎樣做的?”我想,Python都不會寫的人,也配考我麼?便回過臉去,不再理會。孔乙己等了許久,很懇切的說道,“不能註釋罷?我教給你,記著!這些方法應該記著。將來做大佬的時候,裝逼要用。”我暗想我和大佬的等級還很遠呢,而且大佬也從不屑於註釋程式碼;又好笑,又不耐煩,懶懶的答他道,“誰要你教,不是按i然後加麼?”孔乙己顯出極高興的樣子,將兩個指頭的長指甲敲著螢幕,點頭說,“對呀對呀!註釋有四樣加法,你知道麼?”我愈不耐煩了,努著嘴走遠。孔乙己剛開啟Vim,想在鍵盤上敲字,見我毫不熱心,便又嘆一口氣,顯出極惋惜的樣子。

相關推薦

no