vim中的宏是吸引我使用它的关键因素之一。确实方便,如果录制的宏可以很方便的跟朋友分享。岂不美哉!
录制宏普通模式下: q 字母 比如:qa 此时状态栏会显示正在录制中。 一顿操作猛如虎…
q 宏录制完成。
运行宏@ 字母 比如:@a 就会运行你之前录制的宏。就是重复你之前的操作。
打印宏脚本"字母p 比如: "ap
就会打印寄存器a中的宏信息。
通过手动复制的方式,创建宏。
比如:我录制了一宏,用来输出java中的main方法。
public static void main(String[] args){
}
我的宏打印出来的结果如下:
opublic static void main()klString[] argskr{}kl^M^Mku qkb^[
只要把这段代码分享出去就可以了。
你可以把打印出来的代码编辑,然后在copy到寄存器,实现宏在编辑。 比如:我复制到p寄存器中。 选择这一行,然后执行"pyy
实现复制到p寄存器。 这时在执行@p时就可以正常输出main()方法了。
如果只有一个宏分享,这种方法就够用了。但是如果要同时分享好多宏,这种方法难免有点也麻烦了。
宏分享方法二:vimrc配置文件加载写在配置文件中,可以方便的分享多条宏。 语法如下:
:let @t="宏内容"
比如:把这段放到你的vim配置文件中,比如:$HOME/.vimrc
。 然后就可以自动给宏赋值了。 这也是我在网上搜索到的结果,但是我实际测试发现并不能实现我想要的效果,还是拿生成main()方法为例:
:let @t="opublic static void main()klString[] argskr{}kl^M^Mku qkb^["
@t实际运行结果如下:
public static void main()klString[] argskr{}kl^M^Mku qkb^[]
这显然不是我们想要的结果。
相关教程我也没有找到,后来就自己研究了一下,发现只需要转义一下就可以使用了。
^[ 替换 \ Esc
kl 替换 \ ⬅️
kr 替换 \ ➡️
ku 替换 \ ⬆️
kb 替换 \ ⬇️
^M 替换 \ 回车键
如果你问我,为什么 kl
代替 那是因为我录制宏的时候按的就是左键,一测试发现我的判断是没错的。
kl
猜测可能是keyLeft的缩写。 所以把public static void main()klString[] argskr{}kl^M^Mku qkb^[]
经过替换上面的字符串得到如下结果:
:let @t="opublic static void main()\String[] args\{}\\\\\\"
这样 @t
就可以正常输出啦。
总结如下,不足的欢迎评论补允。 -
小键盘 0 到 9
Shift+键
Control+键
Alt+键
或 meta+键
同
Escape 键
光标上移键
光标下移键
光标左移键
光标右移键
插入空格
插入
Tab
等于
或者
退格删除键
在网上暂时没有找到全面的信息,慢慢摸索然后更新吧。
^[ 替换 \ Esc
kl 替换 \ ⬅️
kr 替换 \ ➡️
ku 替换 \ ⬆️
kd 替换 \ ⬇️
^M 替换 \ 回车键
kb 替换 或者\ 删除键
手动一个个替换难免麻烦,我写了宏专门用来替换这些按键。
"批量替换特殊字符
:let @t=":%s/\\^\\[/\\\\/ge\:%s/kl/\\\\/ge\:%s/kr/\\\\/ge\:%s/ku/\\\\/ge\:%s/kd/\\\\/ge\:%s/kb/\\\\/ge\:%s/\\^M/\\\\/ge\"
使用方法: 这个脚本会初始化@t宏,这个@t用来做字符串替换工作。这里有一点需要注意的。比如"ap打印出来的宏数据里面的类似于这样的显示只是一个字符,而不是我们看到的4哥字符,所以打印出来的结果,需要单独复制(鼠标选中复制到剪切板,不是vim中的yy复制)出来放到新的文件中,在执行这个@t。
:let @s="oSystem.out.println();\hi"
执行结果:
System.out.println();
:let @c="opublic class Demo {\}\ko\jkk$hdb\"
执行结果:
public class {
}
:let @t="opublic static void main()\String[] argskr{}\\\ku qkb\j"
执行结果:
public static void main(String[] args){
}
参考文献
《编辑器 - 保存vim宏》