vim怎么快速的注释一段代码

vim by Xudong Zhang @ 2016-12-11 22:35:43

如题,像atom那样ctrl+/快速注释一片代码。

如果能够自动识别语言就更好了,python用#,js用//.


我之前都是ctrl+v然后shift+i然后#或者//搞定。

然后觉得还是不够方便,我又不喜欢装太多插件,搜了一段配置,简单改改如下:

autocmd FileType javascript,c,cpp,java      let b:comment_leader = '\/\/ '
autocmd FileType sh,python,conf             let b:comment_leader = '# '
autocmd FileType mail                       let b:comment_leader = '> '
autocmd FileType vim                        let b:comment_leader = '" '
noremap <silent> <Leader>cc :<C-E>s/^/<C-r>=b:comment_leader<CR>/<CR>:nohlsearch<CR>
noremap <silent> <Leader>cu :<C-E>s/^\V<C-r>=b:comment_leader<CR>//e<CR>:nohlsearch<CR>

我设置的<Leader>,所以注释一段就是v选中然后,cc就可以了,,cu是反注释,快捷键可以根据自己需要修改。

简单解释下,根据文件的类型设定一个注释的前缀变量b:comment_leader,然后按快捷键时执行了s/^/CHAR的替换操作(将行首替换成CHAR)。

  1. :进入命令模式
  2. <C-E>是ctrl-e, 光标来到命令输入行的行尾
  3. s/^/<C-r>=b:comment_leader<CR>, 是回车执行输入的命令很好理解,麻烦一点的地方是<C-r>=b:comment_leader,这里是获取一个变量或者表达式的值,具体文档看这里
  4. :nohlsearch<CR>是去掉搜索的高亮,当进行了搜索或替换时,查找的内容会被高亮显示,这个是取消高亮的,不要这部分也不影响注释的功能。
  5. 如果还有其他的语言要支持,只需要依照样例添加久可以了,只是特殊字符如/需要转义。
by Xudong Zhang @2016-12-11 22:54:13.577 +0800 CST


我来回答

Markdown格式技巧

  • 行尾添加2个空格或者添加一个空行就能换行
  • 斜体: *hello* 或者 _world_
  • 加粗: **hello** 或者 __world__
  • 代码块: 添加空行,然后代码缩进4个空格
  • 特殊字符: 用\避免转义;\*就是*本身
  • python: `__name__`可以以代码形式输出__name__
  • 一个简单的例子

切换到移动版