“执行并更新'#=>'标记“为VIM

时间:2011-01-20 21:07:14

标签: ruby vim plugins textmate

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án Walsh’s Blog

对此功能的说明
  

另一个绝对值得了解的工具   是“执行和更新”#=>'   标记“命令(默认情况下为^⇧⌘E)。   要使用它,请添加一些注释标记   (#is上会有一个片段   为你插入这些)到最后   你想看到的那条线   结果然后触发   命令。 TextMate将运行您的代码   并报告标记的结果   在评论中行内联。这个   功能非常适合发布的代码   在线,因为它显示源和   结果一起。

2 个答案:

答案 0 :(得分:3)

使用rcodetools中的xmpfilter

答案 1 :(得分:1)

似乎不应该把它写成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()

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