评论/取消注释vim中的多个固定行
在我的代码中,我有多个分散的行,这些行可以帮助我调试程序并显示执行过程中发生了什么。 有没有一种简单而快速的方法来评论和取消注释(切换)vim中的这些固定行? 我想在python中用一个特殊符号(比如//)来标记这些行:
print "Debug!" # //   
并且每次按下一个特定快捷键时,所有以“#”结尾的行都会分别进行注释或取消注释。
我已经看过NERD Commenter,但是从我读过的每条评论/取消注释的行都必须每次选择?
  首先,找到一个选择正确线条的模式。  如果您有:set hls ,这将有助于发现比赛。  我认为像/#.*//$这样的东西就是你想要的。 
接下来,用选定的行注释掉
:g/<pattern>/s/^/# /
  如果#会将该行注释掉,并将其注释掉 
:g/<pattern>/s/^# //
现在,你想要一个命令切换。 您可以使用变量来跟踪切换状态,也可以通过检查匹配的行来尝试找出当前状态。 使用变量似乎更简单。
  该变量可以是全局的,缓冲区本地的或脚本本地的。  我喜欢使用脚本局部变量以避免混乱命名空间。  在这种情况下,使用脚本局部变量可能意味着vim在切换缓冲区时会感到困惑,所以让我们使用一个缓冲区局部变量,比如b:commentToggle 。 
  第一次调用该函数时,它注意到该变量没有设置,所以使用search()来查找以#开头的行(这里有一个空格!),并以我们已有的模式结束。  n标志表示不移动光标, w表示绕回文件'wrapscan' (如使用'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/zeS/# /或s/S/1# /在第一行:g行;  和s/^s*zs# //在第二行:g行。  请参阅:help /zs , :help /ze和:help sub-replace-special 。 
