是否可以使用"ctrl + /"在vim中注释/取消注释一行

Dan*_*iel 1 vim

新手在这里.我正在寻找一种更简单的方法VIM来评论/取消注释(只有一行评论,这是最常见的评论类型)C++代码只使用一个快捷键,如Ctrl+ /(不进入可视模式).是否可以通过映射而不使用第三方插件(例如书呆子)来实现此效果?谢谢

Mic*_*ski 5

我通过以下映射实现它(leader/评论,leader?取消注释)

map <leader>/ :s/^\(\s*\)/\1\/\/ <CR>:noh<CR>
map <leader>? :s/^\(\s*\)\/\/\(\s*\)/\1<CR>:noh<CR>
Run Code Online (Sandbox Code Playgroud)
  • ^\(\s*\) 从一行开头到第一个非空白字符匹配.
  • \1\/\/\1随后的相同空格替换捕获的空格()//

其余的东西<CR>:noh<CR>会关闭搜索模式突出显示,以免在缓冲区中突出显示所有前导空格.

我只将它们用作普通模式映射,而不是插入模式.在正常模式下(使用mapleader,,我可以做一些事情,比如4,/评论接下来的4行,但是在内部评论所有东西都不够聪明{}.

它不像NERDCommenter产生的那样整洁.例如,它会变成这样:

if (thing) {
  doSomething();
}
Run Code Online (Sandbox Code Playgroud)

进入:

// if (thing) {
  // doSomething();
// }
Run Code Online (Sandbox Code Playgroud)

当这样的事情会更好.

// if (thing) {
//   doSomething();
// }
Run Code Online (Sandbox Code Playgroud)

autocmd//经常使用的-comment语言中应用映射:

autocmd FileType c,cpp,php,javascript map <leader>/ :s/^\(\s*\)/\1\/\/ <CR>:noh<CR>
autocmd FileType c,cpp,php,javascript map <leader>? :s/^\(\s*\)\/\/\(\s*\)/\1<CR>:noh<CR>
Run Code Online (Sandbox Code Playgroud)