繁体   English   中英

是否可以用“ ctrl + /”注释/取消注释vim中的一行

[英]Is it possible to comment/uncomment a line in vim with “ctrl+/”

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

我通过以下映射实现( 领导者 /要评论, 领导者 到不评论)

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>

他们不使用<C-/>作为键绑定,但是要获得完整的解决方案,请参见tcomment.vimvim-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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM