如何在vim中附加当前编辑脚本的输出?

时间:2014-05-21 09:33:35

标签: vim

例如

我有一个ruby脚本

puts "something will be inserted at the EOF"
保存此脚本后

。 脚本内容应该是:

puts "something will be inserted at the EOF"
# something will be inserted at the EOF

如果我更改输出字符串它将替换旧行

最后,我的连线作品

function Rb_append_output()
    augroup RbAppendOutput
        autocmd!
        " strip the old comments 
        autocmd! BufWritePre <buffer> g/#=>/,$ d
        " append the script's output at EOF
        autocmd! BufWritePost <buffer> $r ! ruby % | sed 's/^/\#=> /'
    augroup END
    echom "Ruby Append Output Active!"
endfunction

感谢

1 个答案:

答案 0 :(得分:4)

您可以通过

在外部shell中执行当前缓冲区
:! %

%代表当前缓冲区名称。 :read命令允许将文件或外部命令中的内容添加到缓冲区中。将两者结合起来,您将得到一个命令,将当前缓冲区执行的输出附加到缓冲区:

:$read !%

可以通过范围:'[,']访问添加的范围,您可以在:substitute命令之前插入注释前缀,该注释前缀基于您想要的示例。

要在每次缓冲区写入后触发此操作,请使用

:autocmd BufWritePost <buffer> ...

现在,您唯一要做的就是将各个部分放在一起,并实现删除以前插入的内容。 (如果您可以通过评论前缀识别这些内容,那就是:delete命令,例如$;?^#\@!?+1,$delete。)