DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

用vim注释多行代码


例如有下面一段autohotkey代码,需要全部注释,也就是在行首加分号,在vim中有三种方法:替换,列操作和宏,

!0:: ;msn DetectHiddenWindows, On Info_msn := TrayIcons("msnmsgr.exe") StringSplit, TrayInfo_msn, Info_msn,| PostMessage, TrayInfo_msn1, TrayInfo_msn2, 0x0203,, ahk_id %TrayInfo_msn3% return

处理后变为:

; !0:: ;msn ; DetectHiddenWindows, On ; Info_msn := TrayIcons("msnmsgr.exe") ; StringSplit, TrayInfo_msn, Info_msn,| ; PostMessage, TrayInfo_msn1, TrayInfo_msn2, 0x0203,, ahk_id %TrayInfo_msn3% ; return

替换

  • 不保留行首空格::%s/^/; /g

可以先用V模式选中要替换的行,然后用s指令替换,vim会自动在:后面加上'<,'>,表示后面的指令仅对被选区域有效;

  • 保留行首空格:

  • 使用&引用search pattern::%s/^\s*/&; /g

  • 使用group + backreference实现::%s/^(\s*)/\1; /g

列操作

使用ctrl+q( Windows的gVim)或者ctrl+v(linux字符终端的vim)进入列编辑模式,进入列编辑模式后与其他visual模式一样先选范围再执行操作,不同之处在于此模式下进入插入模式使用I(normal模式下I表示在行首插入),插入完字符后用Esc返回normal模式后才能看到每行的改变;下面以windows的gVim为例说明具体操作过程:

gg -> ctrl+q -> 5j -> I -> ; ->

宏

gg -> q -> a -> i -> ; -> -> j -> q -> 5@a

q表示开始录制宏,a是宏名,后面是插入一个分号,返回normal模式,向下移动一行,至此宏录制完毕,按q结束录制,@后跟宏名表示使用此宏,5表示重复运行5次;

总结

替换方法优点是操作简单,可以指定处理行的范围,但仅适用于在行首(或行尾)插入,其他位置实现就很麻烦了,列操作的优点是可以看到选区然后进行操作,比较直观,但操作的行必须连在一起,宏的优点是操作一次以后可以重复使用,可以在不连续的行上进行,可以根据实际情况选择解决方案。



Published

Nov 22, 2011

Last Updated

Nov 22, 2011

Category

Tech

Tags

  • 宏 2
  • 列模式 1
  • Vim 92

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor