新手来了 我正在寻找一种更简单的方法VIM
来评论/取消评论(只有一行评论,这是最常见的评论类型),C++
只使用像+这样的快捷方式(不进入可视模式)的代码。不使用 nerd 等 3rd 方插件,是否可以通过映射实现这种效果?谢谢Ctrl/
问问题
106 次
2 回答
5
我通过以下映射实现它(leader/评论,leader?取消评论)
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
我通过我经常使用的//
-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>
于 2013-11-13T17:04:08.973 回答
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>
于 2013-11-13T18:27:22.193 回答