“执行并更新”#=>'标记'用于VIM

VIM中是否有可能为Ruby代码重复“执行并更新”#=>'标记'TextMate功能。

我想有这样的东西:

x = 2
class A
  def a
    42
  end
end

x # => 
A.new.a # =>

输入一些命令...并获得

x = 2
class A
  def a
    42
  end
end

x # => 2
A.new.a # => 42

以下是CiaránWalsh的博客对此功能的描述:

另一个值得了解的工具是“Execute and Update'#=>'Markers'命令(默认情况下,在^⇧⌘E上)。 要使用它,请添加一些注释标记(在#中有一个代码片段将为您插入这些标记)到行的结尾,以便查看结果并触发该命令。 TextMate将运行您的代码并在注释中报告标记行的结果。 此功能非常适用于在线发布的代码,因为它显示了来源和结果。


使用xmpfilter的xmpfilter。


好像把它写成Vim函数应该不会太难。 尝试这个:

function! ExecuteAndUpdate()
    ruby << EOF
        marker = '# =>'
        buf = VIM::Buffer.current
        lines = File.readlines(buf.name)

        bnd = binding
        eval(lines.join("n"), bnd)

        lines.each_with_index do |line, i|
            if line.match(/#{marker}/)
                result = marker + ' ' + eval(line, bnd).inspect
                buf[i+1] = line.sub(/#{marker}.*/, result).chomp
            end
        end
EOF
endfunction

然后:call ExecuteAndUpdate()

一个限制是它用一个标记两次评估每一行。 所以标记线不应有副作用。

链接地址: http://www.djcxy.com/p/50093.html

上一篇: "Execute and Update '# =>' Markers" for VIM

下一篇: Splitting on a Unique Character