【问题标题】:VIM: How to access the redo-registerVIM:如何访问重做寄存器
【发布时间】:2012-09-11 06:30:56
【问题描述】:

作为 Python 自动完成 (https://github.com/davidhalter/jedi) 的次要任务,我正在编写一个能够重命名(重构)的 VIM 插件。

最舒适的重命名方法是使用cwautocommand InsertLeave :call do_renaming_func()。为此,我需要访问redo-register(参见help redo-register)或类似的东西,它会记录书面文本。

如果可能,我喜欢不使用宏来执行此操作,因为我不想搞砸任何事情。

【问题讨论】:

    标签: python vim autocomplete refactoring rename


    【解决方案1】:

    . 寄存器 (@.) 包含所有编辑键,不幸的是原始格式,<Del><BS>,它们显示为 <80>kD,插入完成不会解释。相反,要仅提取输入的网络文本,请使用由标记 '['] 分隔的范围(最后一个除外)。

    有关如何执行此操作的示例,请查看我的PrevInsertComplete plugin

    【讨论】:

    • 不错。我没有意识到这一点,因为在我的简单测试中我没有打错字。 +1。
    【解决方案2】:

    . 寄存器包含最后插入的文本。见:help quote_.

    帮助没有特别提到何时填充此寄存器的任何警告,但它确实提到它在编辑命令行时不起作用。这对您来说应该不是问题。

    【讨论】:

      【解决方案3】:

      问题是不知道它是哪个寄存器,而是访问它。 我终于找到了方法:

      getreg('.')
      

      正如@Ingo Karkat 指出的那样,这个寄存器可能包含一些转义字符。

      但是,我最终使用了不同的方法。我刚刚读了expand('<cword>') 来获取新词(因为重命名总是只有一个词)。这更容易也更可靠。

      这是代码(第 113 行): https://github.com/davidhalter/jedi/commit/6920f15caf332cd14a7833a071765dfa77d82328

      【讨论】:

        猜你喜欢
        • 2010-12-02
        • 1970-01-01
        • 2013-03-29
        • 2021-03-09
        • 2023-03-31
        • 1970-01-01
        • 2013-10-26
        • 2012-07-17
        相关资源
        最近更新 更多