新手在这里。我正在VIM
中寻找一种更简单的方式来评论/取消注释(只有一行评论,这是最常见的评论类型)C++
代码只使用一个快捷方式 Ctrl + / (无需进入可视模式)。是否可以通过映射而不使用第三方插件(例如书呆子)来实现此效果?感谢
答案 0 :(得分:5)
我通过以下映射实现它( leader / 评论, leader ?取消注释)< / p>
map <leader>/ :s/^\(\s*\)/\1\/\/ <CR>:noh<CR>
map <leader>? :s/^\(\s*\)\/\/\(\s*\)/\1<CR>:noh<CR>
^\(\s*\)
从一行的开头到第一个非空白字符匹配。\1\/\/
用相同的空格替换捕获的空格(\1
),后跟//
剩余的内容<CR>:noh<CR>
会关闭搜索模式突出显示,以免在缓冲区中突出显示所有前导空格。
我只将它们用作普通模式映射,而不是插入模式。在正常模式下(使用mapleader作为,
,我可以执行 4 , / 之类的操作来评论接下来的4行,但是例如,在内部{}
中评论所有内容并不够聪明。
它不像NERDCommenter那样整洁。例如,它会转变:
if (thing) {
doSomething();
}
进入这个:
// if (thing) {
// doSomething();
// }
当这样的事情更可取时。
// if (thing) {
// doSomething();
// }
我在autocmd
- 我经常使用的评论语言中通过//
应用映射:
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>
答案 1 :(得分:3)
他们不使用<C-/>
作为键绑定,但对于非常完整的解决方案,请参阅tcomment.vim或vim-commentary
我使用以下quick'n'dirty解决方案,//
根据文件类型注释掉一行,但它有几个缺陷(例如.
不可重复):
" make // comment out a line
au FileType * nmap <buffer> // 0i# <Esc>
au FileType vim nmap <buffer> // I" <Esc>
au FileType sh,zsh,csh,tcsh,make nmap <buffer> // I# <Esc>
au FileType html,xhtml,xml,xslt,dtd,xsd nmap <buffer> // I<!-- <Esc>A --><Esc>
au FileType sql,haskell nmap <buffer> // I-- <Esc>
au FileType c nmap <buffer> // I/* <Esc>A */<Esc>
au FileType cpp nmap <buffer> // I// <Esc>