3

即使我是 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 参数打印正确的行索引,所以我怀疑那里有什么。

是我在此方法上找到的唯一文档,但我查看了 textmate.rb 并且在我未经训练的眼睛看来,我正在正确使用它。

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

4

1 回答 1

4

让我们看一下绑定的源代码:

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 实现中可能存在错误。

于 2009-03-09T11:56:12.783 回答