【问题标题】:Programming TextMate in Ruby. Problem with TextMate.go_to用 Ruby 编写 TextMate。 TextMate.go_to 的问题
【发布时间】:2009-03-09 11:46:53
【问题描述】:

尽管我是 Ruby 的初学者,但我正在修改一个 TextMate 包。我要解决的问题是在命令输出后将插入符号移动到某个位置的问题。

基本上发生的事情是这样的: 我点击了一个组合键,它触发了一个命令来过滤文档并在相关位置插入文本,然后用新过滤的文本替换文档退出。

想要接下来发生的事情是将插入符号移回原来的位置。当我找到 TextMate.go_to 函数时,我很高兴,但我只能让它部分工作。功能:

位置Y = ENV['TM_LINE_NUMBER']
位置X = ENV['TM_LINE_INDEX']
...
TextMate.go_to :line => positionY, :column => positionX; #column 无效

我可以将插入符号移到正确的行,但 column 参数不起作用。我试过改变它们,甚至只用列参数来做这个功能,但没有运气。我也尝试过使用硬编码整数,但 positionX 参数打印了正确的行索引,所以我怀疑那里有什么。

This 是我找到的有关此方法的唯一文档,但我查看了 textmate.rb,在未经训练的人看来,我似乎在正确使用它。

我知道这可以通过宏来实现,但我想尽可能避免这种情况。 我也知道,如果您选择“插入为 sn-p”,则可以使用标记,但是我必须先清除文档,而且我还没有真正弄清楚如何在不使用“替换文档”的情况下执行此操作选项。 有人吗?

【问题讨论】:

    标签: ruby textmate textmatebundles


    【解决方案1】:

    我们看一下绑定的源码:

    def go_to(options = {})
      default_line = options.has_key?(:file) ? 1 : ENV['TM_LINE_NUMBER']
      options = {:file => ENV['TM_FILEPATH'], :line => default_line, :column => 1}.merge(options)
      if options[:file]
        `open "txmt://open?url=file://#{e_url options[:file]}&line=#{options[:line]}&column=#{options[:column]}"`
      else
        `open "txmt://open?line=#{options[:line]}&column=#{options[:column]}"`
      end
    end
    

    相当骇人听闻的是,绑定设置了一个 txmt:// URL 并在 shell 中调用 open 。

    所以要做的第一件事是构建一个开放的 URL 并将其输入终端/您的浏览器,以查看 TextMate 是否尊重列参数。如果这样可行,那么您的 Textmate.go_to 版本的实现中可能存在错误。

    【讨论】:

    • 好像是这样,是的。它可以从终端和另一个 TM 命令正常打开。脚本中似乎有些东西阻止了正确设置列。我得调查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2011-02-17
    相关资源
    最近更新 更多