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