2014-01-25 80 views

回答

1

其他一些答案提到了插件。我目前使用NERD commenter,它提供了一個ci(評論反轉)命令,可以做你想做的。

對於初學者,這裏有幾種方法可以避免評論已經評論過的行。爲了簡單起見,我將假定註釋字符都在第一列。任何一個都接受一個範圍,例如你的問題中的可視範圍'<,'>

:s#^\(// \)\@!#// # 
:v#^// #s!^!// ! 

OK,如果你真的想要的切換線是否被註釋掉一個命令,那麼你必須捕捉線是初始評價,然後用表達式替換:

:%s!^\(// \|\)!\=strpart('// ', strlen(submatch(1))) 

 

:help /\(
:help /\@! 
:help :g 
:help sub-replace-expression 
+0

謝謝,命令不正是我想要的,但我已經決定要使用插件通過幾個問題的答案的建議。 – justindeguzman

0

好,我懷疑你可以只使用一個正則表達式做到這一點,這就是爲什麼蒂姆教皇寫了一個擴展對於究竟

然後你必須do是gc來評論一條線或一個視覺選擇,並gc來取消註釋它!

0

有幾種插件可用於評論和取消註釋跨多種語言的代碼。話雖如此,你可能會想在這種情況下使用兩個單獨的正則表達式。例如,假設我有一些代碼...

var x = 5; 

// Does stuff 5 times 
for (var i = 0; i < x; i++) { 
    // stuff 
} 

當我運行表示,這正則表達式我不想讓已經註釋行是註釋。所以最好做類似的事情,但反過來(例如:'<,'>s!^// !!)。

此外,\ze\zs運算符在這裏可以用來保留空白。而:*:'<,'>的快捷方式。比如我可以做

:*s!^\s*\zs// !! 

這將只刪除字符//從與他們或與他們之前的空格開頭的行。

1

我使用的一個骯髒但非常靈活的技巧是利用:normal命令,該命令將模擬您在給定範圍內給出的按鍵順序。

例如,要發表評論,請選擇你的整個行視覺模式(使用V)並輸入命令:

:normal i// 

這是安靜不言自明:i打開編輯模式,並且//它寫入(因爲你進入了編輯模式);該命令將應用於每條選定的行,並將光標定位到該行的開頭(因爲我們選擇了整行V而不是v;否則它會變得棘手)。有了同樣的想法,你可以刪除評論使用可視化的選擇:

:normal xx 

(這不正是它說:刪除前兩個字符,你可以鍵入鍵盤上)。

有這種方法的優點幾個,其中包括:

  • 如果您使用不同的註釋符號({ , /*, //, #, %)幾種不同的語言,它只是一個改變一個筆畫問題。
  • 你真的可以發揮創意與正常的命令,因爲你可以利用該命令的範圍標誌,並從字面上做任何事情:

    :normal A //Hello world

  • 再次,感覺很自然的,因爲你只是餵養一個帶有按鍵的命令,您可以在選擇時使用它。你甚至可以使用this技巧在模式之間切換。