注释/取消注释vim中的多个固定行

注释/取消注释vim中的多个固定行,vim,comments,Vim,Comments,在我的代码中,我有多行分散的代码,它们可以帮助我调试程序,并向我展示执行过程中发生的事情。在vim中有没有一种简单快捷的方法来注释和取消注释(切换)这些固定行?我想用一个特殊的符号(例如//)来标记这些行,就像python中这样: print "Debug!" # // 每次按下sepcific快捷键时,以“#”结尾的所有行(某些可选描述性文本“/”)都会分别被注释或取消注释 我看过《书呆子评论员》,但从我读到的内容来看,每次都必须选择要注释/未注释的行。首先,找到一种选择正确行的模式。

在我的代码中,我有多行分散的代码,它们可以帮助我调试程序,并向我展示执行过程中发生的事情。在vim中有没有一种简单快捷的方法来注释和取消注释(切换)这些固定行?我想用一个特殊的符号(例如//)来标记这些行,就像python中这样:

print "Debug!" # //   
每次按下sepcific快捷键时,以“#”结尾的所有行(某些可选描述性文本“/”)都会分别被注释或取消注释


我看过《书呆子评论员》,但从我读到的内容来看,每次都必须选择要注释/未注释的行。

首先,找到一种选择正确行的模式。如果您有
:设置hls
,它将有助于识别匹配项。我认为像
/\\/$
这样的东西就是你想要的

下一步,用注释注释掉所选行

:g/<pattern>/s/^/# /
现在,您需要一个命令来切换。您可以使用变量跟踪切换状态,也可以通过检查匹配的行来确定当前状态。使用变量似乎更简单

变量可以是全局变量、缓冲区本地变量或脚本本地变量。我喜欢使用脚本局部变量来避免名称空间混乱。在这种情况下,使用脚本局部变量可能意味着在切换缓冲区时vim会感到困惑,所以让我们使用缓冲区局部变量,比如
b:commentToggle

第一次调用该函数时,它会注意到变量未设置,因此请使用
search()
查找以
#
开头(有空格!)并以我们已有的模式结尾的行。
n
标志表示不移动光标,
w
表示环绕文件末尾(如使用
'wrapscan'
集进行搜索)。
search()
函数返回行号(基于1!),如果找到模式,则返回0。请参阅
:帮助搜索()

这似乎适用于一个小测试:

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>
有趣!CommentToggle()
如果!存在('b:commentToggle')
让b:commentToggle=!搜索(“^...*.\/\/$”,“nw”)
恩迪夫
如果b:commentToggle==1
g/\/\/$/s/^/#/
其他的
g/\/\/$/s/^\\///e
恩迪夫
让b:commentToggle=!b:好的
结束
nnoremap:callcommenttoggle()

如果要将
#
放在第一个非空的前面,请在
搜索()中使用
^\s*#
<第一行
:g
中的code>s/\ze\s/#/
s/\s/\1#/
;和第二行的
:g
中的
s/^\s*\zs/
。请参见
:help/\zs
:help/\ze
:help sub replace special

首先,找到一个选择正确行的模式。如果您有
:设置hls
,它将有助于识别匹配项。我认为像
/\\/$
这样的东西就是你想要的

下一步,用注释注释掉所选行

:g/<pattern>/s/^/# /
现在,您需要一个命令来切换。您可以使用变量跟踪切换状态,也可以通过检查匹配的行来确定当前状态。使用变量似乎更简单

变量可以是全局变量、缓冲区本地变量或脚本本地变量。我喜欢使用脚本局部变量来避免名称空间混乱。在这种情况下,使用脚本局部变量可能意味着在切换缓冲区时vim会感到困惑,所以让我们使用缓冲区局部变量,比如
b:commentToggle

第一次调用该函数时,它会注意到变量未设置,因此请使用
search()
查找以
#
开头(有空格!)并以我们已有的模式结尾的行。
n
标志表示不移动光标,
w
表示环绕文件末尾(如使用
'wrapscan'
集进行搜索)。
search()
函数返回行号(基于1!),如果找到模式,则返回0。请参阅
:帮助搜索()

这似乎适用于一个小测试:

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>
有趣!CommentToggle()
如果!存在('b:commentToggle')
让b:commentToggle=!搜索(“^...*.\/\/$”,“nw”)
恩迪夫
如果b:commentToggle==1
g/\/\/$/s/^/#/
其他的
g/\/\/$/s/^\\///e
恩迪夫
让b:commentToggle=!b:好的
结束
nnoremap:callcommenttoggle()

如果要将
#
放在第一个非空的前面,请在
搜索()中使用
^\s*#
<第一行
:g
中的code>s/\ze\s/#/
s/\s/\1#/
;和第二行的
:g
中的
s/^\s*\zs/
。请参见
:help/\zs
:help/\ze
:help sub replace special

首先,找到一个选择正确行的模式。如果您有
:设置hls
,它将有助于识别匹配项。我认为像
/\\/$
这样的东西就是你想要的

下一步,用注释注释掉所选行

:g/<pattern>/s/^/# /
现在,您需要一个命令来切换。您可以使用变量跟踪切换状态,也可以通过检查匹配的行来确定当前状态。使用变量似乎更简单

变量可以是全局变量、缓冲区本地变量或脚本本地变量。我喜欢使用脚本局部变量来避免名称空间混乱。在这种情况下,使用脚本局部变量可能意味着在切换缓冲区时vim会感到困惑,所以让我们使用缓冲区局部变量,比如
b:commentToggle

第一次调用该函数时,它会注意到变量未设置,因此请使用
search()
查找以
#
开头(有空格!)并以我们已有的模式结尾的行。
n
标志表示不移动光标,
w
表示环绕文件末尾(如sear)