我发现并修改了一些我发现的vimrc代码,用于评论vim的当前行/块:
"
" Commenting blocks
"
autocmd FileType c,cpp,java noremap <buffer> <Leader>c :s,^\(\s*\)[^// \t]\@=,\1// ,e<CR>:nohls<CR>zvj
autocmd FileType sh,python noremap <buffer> <Leader>c :s,^\(\s*\)[^# \t]\@=,\1# ,e<CR>:nohls<CR>zvj
autocmd FileType vim noremap <buffer> <Leader>c :s,^\(\s*\)[^\" \t]\@=,\1\" ,e<CR>:nohls<CR>zvj
autocmd Filetype c,cpp,java noremap <buffer> <Leader>u :s,^\(\s*\)// \s\@!,\1,e<CR>:nohls<CR>zvj
autocmd Filetype sh,python noremap <buffer> <Leader>u :s,^\(\s*\)# \s\@!,\1,e<CR>:nohls<CR>zvj
autocmd Filetype vim noremap <buffer> <Leader>u :s,^\(\s*\)\" \s\@!,\1,e<CR>:nohls<CR>zvj
原始代码使用autocmd FileType
行来设置变量以定义该行的注释。它看起来与此相似:
autocmd FileType c,cpp,java let b:cmtldr=//
autocmd FileType sh,python let b:cmtldr=#
autocmd FileType vim let b:cmtldr=\"
noremap <buffer> <Leader>c :s,^\(\s*\)[^&b:cmtldr \t]\@=,\1&b:cmtldr ,e<CR>:nohls<CR>zvj
但是这对我来说不起作用,它只是粘贴在文字字符串“&amp; b:cmtldr”中(我也尝试过没有&amp;),所以我把它改成了第一个代码块。但是,我的OCD不会让我失望。我在这个上下文中已经做了一些搜索如何在vim中使用变量,但我尝试过没有帮助。有什么建议吗?
答案 0 :(得分:1)
这里有两个错误的语法:
:let
与:set
不同,因此您必须在此处使用表达式,并且应该看起来像let b:cmtldr="\""
。您无法将变量值放入正则表达式,您必须使用\=
将其置于替换字符串中。最好在这里使用:execute
或<C-r>
:
noremap \c :s,\v(\s*)(\V<C-r>=escape(b:cmdldr, '\,')<CR>\v|\s)@!,\=submatch(1).b:cmtldr,e<CR>:nohl<CR>zvj
(我猜你实际上并不是指<buffer>
:它只会对你从命令行打开的第一个文件进行评论。)
为什么重新发明轮子,已经有很多评论插件?我个人使用NERD Commenter。它可以配置为使用\c
进行评论,默认情况下它使用<Leader>cc
进行评论(有更多可用选项)。