[Vim]注释代码的四种姿势

注释代码的四种姿势

之前的博客计划又因为各种各样的原因延后了,想着总不能这么一直拖下去,于是就有了这篇博客…

我们给代码添加注释基本上有两种场景,一种是给模块、类、函数编写docstring,而另一种则是临时将已经存在的代码注释掉。当我们想临时注释代码时,如果使用的是IDE,那么这是一件非常简单的事情,只需要框选代码然后按一组快捷键就可以了。可是Vim并没有提供添加注释的快捷键,这对于新手来说是一个无法避免的坑。

不过Vim的优势也在于它的灵活性,区区注释是没办法难倒Vimer的。上帝关闭了一扇窗,却为你打开了另外四扇窗!下面我将通过介绍Vim中注释代码的四种姿势,带你感受Vim的强大之处。


一 疯狂原始人

说到注释,稍微对Vim熟悉一些的人应该会下意识地敲出这套华丽的连招:[I|^i|0i]{Comment}<ESC>

  • I代表从本行的第一个非空字符插入,i代表从当前位置插入
  • ^将光标移动到本行的第一个非空字符,0将光标移动到本行的第一个字符(所以I和^i的效果其实是一样的)
  • {Comment}代表注释符号,比如Python中的#,C中的//
  • 最后按<ESC>键退出插入模式

以上就是最原始的添加注释的方法啦,符合直觉,在临时注释一行的时候非常方便。可是一次只能注释一行,要注释的行数一多的话,这种方法是万万行不通的,如果每一行都去手动添加注释,那真是一个“疯狂原始人”!

二 重复的工作应该交给机器人

每次都像上面那么敲,显然不符合一个Vimer该有的气质。那么有什么方法能把我们从重复的劳动中解放出来呢?答案是宏,宏就是Vim世界中的机器人,它会机械地重复你教给它的动作。

让我们尝试录制一个宏:q{Name}[I|^i|0i]{Comment}<ESC>jq

  • 第一个q代表开始录制一个宏
  • {Name}是保存宏的寄存器的名称,可以是一个字母或者数字
  • [I|^i|0i]{Comment}<ESC>完成一行的注释
  • j将光标移动到下一行
  • 最后一个q结束宏的录制

这串添加注释的宏会保存在你指定的寄存器里面,只需要调用@{Name}就可以重放宏了。当你想注释多行代码时,只需要在宏调用的前面加上次数就行,比如10@{Name}。看,机器人跑起来了!

三 机器人做不到的事

宏虽然方便,可是它毕竟只是一个没思想的机器人,只能帮我们做一些重复的工作,有些事宏是做不到的。设想一下,如果要注释的代码行数一多,一下子算不出来要重放几次,宏就显得有些力不从心了。(当然你可以选择直接使用多行注释)

难道我们就没有更好的办法了吗?当然不是。这时候就要请出Vim的查找替换功能了::{Start},{End}s/^/{Comment}<ENTER>

  • 冒号:开始一行命令
  • {Start}代表注释开始的行数,{End}代表注释结束的行数,中间用逗号,隔开
  • s(substitute)命令用于替换字符串
  • 第一个斜杠/后面跟着一个正则表达式,匹配被替换的字符串,这里用^匹配一行的起始位置
  • 第二个斜杠/后面跟着替换的内容,也就是注释符号{Comment}
  • 最后按回车键<ENTER>执行命令

查找替换功能不仅仅可以用于生成注释,在不同的场景下还可以开发出更多不同的实用功能。

四 块sao操作

上面使用查找替换功能的方式看似已经完美了,可是在实际使用的时候还是不太舒服,究其原因是因为查找替换使用起来太麻烦了,每次都要敲很多的字符,太反直觉。作为一个合格的Vimer当然不可以满足于这种看起来美好,实际上麻烦的糖衣炮弹。

在Vim中,有一个“VISUAL BLOCK”模式,可以给我们提供更直观的注释方法:[<C+v>|<C+q>]{Lineno}G0I{Comment}<ESC>

  • <C+v>启动块操作模式,由于Windows上面<C+v>跟粘贴的快捷键冲突了,所以被替换为<C+q>
  • {Lineno}代表行数,G将光标跳转到前面指定的行,这里你也可以使用hjkl或者别的方式跳转,这也是VISUAL BLOCK模式的优势:直观
  • 0将光标移动到本行的第一个字符,防止有些代码不被框选到
  • I开启插入模式(注意,这里不可以使用i)
  • {Comment}代表注释符号
  • <ESC>退出插入模式

当你按下<ESC>的那一刻,就会发现所有被框选到的代码都加上了注释,perfect!

怎么取消注释

这是一道送分题:把插入注释的操作换成x(删除字符),查找替换则把前两个字符(..)替换为空即可。

有没有更懒的方法

什么?你还想更懒???很好,非常有前途…

著名的Vim插件开发者Martin Grenfell开发了一款插件NERD Commenter。安装插件之后,只需要在VISUAL模式(v键)下选中代码块,然后按<leader>cc或者<leader>cb就可以添加注释了,取消注释则是<leader>cu

插件具体的细节在这就不介绍了,如果有需要了解的请移步项目根目录


总结

到这里有些读者可能会问,既然有现成的插件,为什么前面还要讲那么多废话呢?其实,本篇的重点不在于学习怎么添加注释,而在于通过这四种不同的添加注释的姿势,学习到一个Vimer该有的思考方式。看,我给圆回来了

而且,毕竟不是所有环境都有现成的插件嘛,授人以鱼不如授人以渔,希望本篇能对你有所帮助。


孔乙己自己知道不能和大佬们谈天,便只好向萌新说话。有一回对我说道,“你用过Vim么?”我略略点一点头。他说,“用过Vim,我便考你一考。Vim里面的注释,怎样做的?”我想,Python都不会写的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不能注释罢?我教给你,记着!这些方法应该记着。将来做大佬的时候,装逼要用。”我暗想我和大佬的等级还很远呢,而且大佬也从不屑于注释代码;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不是按i然后加么?”孔乙己显出极高兴的样子,将两个指头的长指甲敲着屏幕,点头说,“对呀对呀!注释有四样加法,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚打开Vim,想在键盘上敲字,见我毫不热心,便又叹一口气,显出极惋惜的样子。

猜你喜欢

转载自blog.csdn.net/jy692405180/article/details/78835221