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,想在鍵盤上敲字,見我毫不熱心,便又嘆一口氣,顯出極惋惜的樣子。

相關推薦

[Vim]註釋程式碼姿勢

註釋程式碼的四種姿勢 之前的部落格計劃又因為懶各種各樣的原因延後了,想著總不能這麼一直拖下去,於是就有了這篇部落格… 我們給程式碼添加註釋基本上有兩種場景,一種是給模組、類、函式編寫docstring,而另一種則是臨時將已經存在的程式碼註釋掉。當我們想臨時註

OllyDbg快速查詢指定程式碼方法

1.程式碼執行法:從“大本營”開始,F8執行,找到目標地點。重新除錯找到目標函式。2.字串檢索法:滑鼠右鍵-Search for-All referenced text strings,列出程式程式碼中引用的字串。GOTO到目標地址即可。3.API檢索法(1):滑鼠右鍵-Se

Css3實現漸變效果程式碼分享

一、八卦圖背景 程式碼: background: radial-gradient(circle at 50% 59%, #D2CAAB 3%, #364E27 4%, #364E27 11%, rgba(54,78,39,0) 12%, rgba(54,78,39,0)) 50px

Android studio程式碼實現打電話+點選事件方式

?Android系統架構(重點) 第一層:應用層Application 第二層:應用框架層Application Framework 第三層:Android底層類庫層 Libraries、Dalvik虛擬機器 第四層:linux核心層 linux kernel Android是執行在

php基礎演算法:冒泡,選擇,插入和快速排序法 程式碼練習

function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])

水平遍歷二叉樹 程式碼中包含前序、中序、後序和水平遍歷

水平遍歷二叉樹要求一層一層從上往下從左往右遍歷,例如: 上面二叉樹的遍歷順序為:2、4、5、1、3 思路:利用佇列先進先出的性質 1、將根節點放入佇列 2、while迴圈佇列,只要佇列不為空,就取出第一個節點。獲取資料 3、將第二步取出的節點的左子節點和右子節點

實現斐波拉契數列的方式python程式碼

斐波那契數列 1. 斐波拉契數列簡介 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契

HIVE的安裝配置、mysql的安裝、hive建立表、建立分割槽、修改表等內容、hive beeline使用、HIVE的資料匯入方式、使用Java程式碼執行hive的sql命令

1.上傳tar包 這裡我上傳的是apache-hive-1.2.1-bin.tar.gz 2.解壓 mkdir -p /home/tuzq/software/hive/ tar -zxvf apache-hive-1.2.1-bin.tar.gz  -C /home/

二叉樹的遍歷(java程式碼)

程式碼1: 四種遍歷方式 package 第四章; import java.util.LinkedList; /** * @author 許湘揚 * @email [email protected] * @detail 先序建立 各種遍

java 內部類 使用細節(含程式碼)

一: 內部類     定義在類體部,方法體部,甚至比方法體更小的程式碼塊內部的類(if 語句裡面等)    1.靜態內部類(內部類中最簡單的形式)         1.宣告在類體部,方法體外,並且使用static修飾的內部類         2.訪問特點可以類比靜態變數和靜

為什麼我不贊成在程式碼中寫註釋:談寫註釋的幾境界

程式碼中的註釋是有價值的,通常也是必須的,但沒有註釋更好。本文會解釋其原因。 我的目標是,當我閱讀我編寫程式碼時,應該完全清楚它的作用。名稱,結構,程式碼背後的意圖 – 都需要儘可能的清晰和明顯。 我常常希望通過註釋來增加更多的細節以及待改進的描述,我擔心將來看程式碼時候會面臨看不懂的困惑,所以註

Java新增事件監聽的方法程式碼例項

1.Java事件監聽處理——自身類實現ActionListener介面,作為事件監聽器   class EventListener1 extends JFrame implements ActionListener { private JButton btBlue, btDia

學習黑帽SEO優化技術必須要掌握的暗鏈程式碼

暗鏈、黑鏈又叫隱藏連結,指的是正常的連結通過一些方法,如:把連結放入js程式碼中,使用display:none等等,從而使使用者在正常瀏覽網頁的時候無法看到這個連結。下面給大家分享的四種暗鏈操作技術是很實用的,不過建議大家慎用!掌握即可! 作用:通過在網站權重較高的網站新增隱藏連結,提高自身網站在搜

提示框程式碼

<head> <title>影象效果演示</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script> /

java中許可權修飾符,靜態程式碼塊,構造程式碼塊,構造方法執行順序。

一、java中類有四種許可權 1、要想僅能在本類中訪問使用private修飾。 2、要想本包中的類都可以訪問不加修飾符即可。 3、要想本包中的類與其他包中的子類可以訪問使用protected修飾。(不在同一包中時,只能在子類裡面可以呼叫,其他測試類建物件都不行,只給不同包中的子

MyBatis Generator生成程式碼方式

專案目錄如下:dubbo是上一篇部落格裡寫的,程式碼就沒刪可以借鑑學習 由於MyBatis屬於一種半自動的ORM框架,所以主要的工作就是配置Mapping對映檔案,但是由於手寫對映檔案很容易出錯,所以可利用MyBatis生成器自動生成實體類、DAO介面和Mapper對映

Pearson相關係數公式的形式及Python程式碼實現

原文:http://blog.csdn.net/zhangjunjie789/article/details/51737366 兩個變數之間的皮爾遜相關係數定義為兩個變數之間的協方差和標準差的商。 第一種形式(也就是定義的形式): 第二種形式: 第三種形式: 第四種形

vim建立程式碼時自動化添加註釋

開啟~/.vimrc檔案,在最後一行下面新增如下如下程式碼: autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" "新建.py,.cc,.java,.sh, "定義函式SetT

Java中的程式碼

以下程式碼演示了建立一個物件並呼叫方法各個程式碼塊之間的優先關係: public classPerson { static{ System.out.println("1.我是靜態塊,優先於構造塊執行!並且只有建立第一個物件的時候執行一次!"); }

Http 請求訪問程式碼 HttpGet HttpPost HttpPut HttpDelete

邏輯: String url = "http://www.baidu.com"; //將要訪問的url字串放入HttpPost中 HttpPost httpPost = new HttpPost(url); //請求頭 放置一些修改http請求頭和cookie httpPost.setHeader("Acc