2014-03-27 95 views
0

在我的代碼中,我有多個分散的行,它們幫助我調試程序並顯示執行過程中發生了什麼。有沒有一種簡單而快速的方法來評論和取消註釋(切換)vim中的這些固定行?我想到了在蟒蛇有特殊標記標誌這些線(例如//)是這樣的:評論/取消註釋vim中的多個固定行

print "Debug!" # // 

,每次一個sepcific快捷鍵被按下所有這一切最終以「#‘一些可選的描述性文字’行// 「分別評論或取消註釋。

我已經看過NERD Commenter,但是從我讀的行中得到評論/取消註釋,每次都必須選擇?

+0

您使用哪種語言?查看某種可以在運行程序時打開或關閉的日誌框架可能會更好。或者可能是一個命令行標誌。 – FDinoff

+0

我使用python(剛剛更新了答案)。我想添加'if(debugFlag == True):...',但我不太喜歡它,因爲它進一步擴展了與程序邏輯無關的代碼, (最低限度)減慢程序。 – efie

+1

Python有一個日誌框架。 http://docs.python.org/2/library/logging。html你應該可以很容易地禁用它。我不擔心該計劃的放緩。除非您確定(使用分析器)日誌報表實際上是問題。 – FDinoff

回答

2

首先,找到一個模式,選擇正確的線條。如果您有:set hls,它將有助於發現比賽。我認爲像/#.*\/\/$是你想要的東西。

接下來,選擇行註釋掉與

:g/<pattern>/s/^/#/

如果#將註釋掉該行,並與

:g/<pattern>/s/^# // 

取消註釋它們現在,你想要一個命令來切換。您可以使用變量來跟蹤切換狀態,也可以通過檢查匹配的行來嘗試找出當前狀態。使用變量似乎更簡單。

變量可能是全局的,緩衝區本地的,或腳本本地的。我喜歡使用腳本局部變量以避免混亂命名空間。在這種情況下,使用腳本局部變量可能意味着vim在切換緩衝區時會感到困惑,所以讓我們使用一個緩衝區局部變量,如b:commentToggle

第一次調用該函數時,它注意到該變量未設置,因此請使用search()查找以#(這裏有一個空格!)開始的行,並以我們已有的模式結束。 n標誌表示不移動光標,並且w表示環繞文件末尾(例如使用'wrapscan'集合進行搜索)。如果找到該模式,search()函數返回行號(從1開始!),否則返回0。請參閱:help search()

這似乎是一個小的測試工作:

fun! CommentToggle() 
    if !exists('b:commentToggle') 
    let b:commentToggle = !search('^# .*#.*\/\/$', 'nw') 
    endif 
    if b:commentToggle == 1 
    g/#.*\/\/$/s/^/#/
    else 
    g/#.*\/\/$/s/^# //e 
    endif 
    let b:commentToggle = !b:commentToggle 
endfun 
nnoremap <F4> :call CommentToggle()<CR> 

如果你想要把#在第一個非空的前面,然後在search()命令中使用^\s*#; s/\ze\S/# /s/\S/\1# /第一行:g行; s/^\s*\zs# //在第二個:g行。請參閱:help /\zs:help /\ze:help sub-replace-special

+0

這是python我認爲它使用'#'作爲註釋 – FDinoff

+0

首先,非常感謝!關於你的最後一段:我打開一個文件1,切換到插入#,打開文件2,切換到插入#,切換到文件1,切換到刪除#。這個工作,但如果我現在切換到文件2並切換,#不會被刪除,但另一個#被添加,並進一步切換隻刪除第二個#。這可能不是你想要的? – efie

+0

此外,如果將#插入到第一個非空白字符原來的位置(以保持縮進並使其更加令人愉悅)而不是在開頭處,那將會很好。我試過:g /#。* \/\/$/s/\ S /#/但問題是,第一個非空白字符也被刪除。 – efie

相關問題