我試圖使用:'<,'>s!^!// !
在可視模式下注釋突出顯示的代碼。是否可以編輯正則表達式,以便它在註釋代碼時取消註釋?使用正則表達式在Vim中評論/取消註釋
回答
其他一些答案提到了插件。我目前使用NERD commenter,它提供了一個ci
(評論反轉)命令,可以做你想做的。
對於初學者,這裏有幾種方法可以避免評論已經評論過的行。爲了簡單起見,我將假定註釋字符都在第一列。任何一個都接受一個範圍,例如你的問題中的可視範圍'<,'>
。
:s#^\(// \)\@!#// #
:v#^// #s!^!// !
OK,如果你真的想要的切換線是否被註釋掉一個命令,那麼你必須捕捉線是初始評價,然後用表達式替換:
:%s!^\(// \|\)!\=strpart('// ', strlen(submatch(1)))
:help /\(
:help /\@!
:help :g
:help sub-replace-expression
好,我懷疑你可以只使用一個正則表達式做到這一點,這就是爲什麼蒂姆教皇寫了一個擴展對於究竟:
然後你必須do是gc
來評論一條線或一個視覺選擇,並gc
來取消註釋它!
有幾種插件可用於評論和取消註釋跨多種語言的代碼。話雖如此,你可能會想在這種情況下使用兩個單獨的正則表達式。例如,假設我有一些代碼...
var x = 5;
// Does stuff 5 times
for (var i = 0; i < x; i++) {
// stuff
}
當我運行表示,這正則表達式我不想讓已經註釋行是註釋。所以最好做類似的事情,但反過來(例如:'<,'>s!^// !!
)。
此外,\ze
和\zs
運算符在這裏可以用來保留空白。而:*
是:'<,'>
的快捷方式。比如我可以做
:*s!^\s*\zs// !!
這將只刪除字符//
從與他們或與他們之前的空格開頭的行。
我使用的一個骯髒但非常靈活的技巧是利用:normal
命令,該命令將模擬您在給定範圍內給出的按鍵順序。
例如,要發表評論,請選擇你的整個行視覺模式(使用V
)並輸入命令:
:normal i//
這是安靜不言自明:i
打開編輯模式,並且//
它寫入(因爲你進入了編輯模式);該命令將應用於每條選定的行,並將光標定位到該行的開頭(因爲我們選擇了整行V
而不是v
;否則它會變得棘手)。有了同樣的想法,你可以刪除評論使用可視化的選擇:
:normal xx
(這不正是它說:刪除前兩個字符,你可以鍵入鍵盤上)。
有這種方法的優點幾個,其中包括:
- 如果您使用不同的註釋符號(
{ , /*, //, #, %
)幾種不同的語言,它只是一個改變一個筆畫問題。 你真的可以發揮創意與正常的命令,因爲你可以利用該命令的範圍標誌,並從字面上做任何事情:
:normal A //Hello world
再次,感覺很自然的,因爲你只是餵養一個帶有按鍵的命令,您可以在選擇時使用它。你甚至可以使用this技巧在模式之間切換。
- 1. 正則表達式使用Grails取代JavaScript註釋評論
- 2. 評論正則表達式
- 3. Vim NERD-Commenter:如何取消註釋第一級評論,而不取消註釋嵌套評論?
- 4. 註釋&正則表達式
- 5. 評論/取消註釋vim中的多個固定行
- 6. vim 7.4在Vim中沒有插件的評論/取消註釋行
- 7. VIM正則表達式匹配直列評論
- 8. 使用正則表達式從git日誌獲取評論塊
- 9. 設置CTRL + /評論和取消註釋vim
- 10. 使用正則表達式在Javascript中刪除HTML評論
- 11. 正則表達式不匹配評論
- 12. 正則表達式匹配的評論
- 13. 正則表達式匹配PHP評論
- 14. 正則表達式 - 匹配評論
- 15. 正則表達式的C#評論
- 16. 使用bash在gedit中評論和取消註釋
- 17. vim的正則表達式解釋
- 18. Xcode評論取消註釋問題
- 19. 正則表達式在Dreamweaver註釋css
- 20. ImageMagick - 使用正則表達式在for循環中註釋?
- 21. 使用正則表達式在bash中刪除XML註釋
- 22. 評論/取消註釋Eclipse中的特定格式
- 23. 評論/取消註釋NetBeans快捷方式中的代碼塊
- 24. 提取PDF註釋/評論
- 25. 正則表達式「Url」外部註釋
- 26. C#正則表達式來註釋console.log
- 27. 正則表達式的註釋
- 28. 正則表達式排除註釋
- 29. Php註釋正則表達式
- 30. 使用JavaScript正則表達式來提取評論從在一個函數
謝謝,命令不正是我想要的,但我已經決定要使用插件通過幾個問題的答案的建議。 – justindeguzman