VIM:如何访问重做寄存器

时间:2012-09-10 17:07:04

标签: python vim autocomplete refactoring rename

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

最简单的重命名方法是使用cwautocommand InsertLeave :call do_renaming_func()。要做到这一点,我需要访问redo-register(参见help redo-register)或类似的东西,这将记录书面文字。

如果可能的话,我喜欢在没有宏的情况下这样做,因为我不想搞砸任何东西。

3 个答案:

答案 0 :(得分:2)

.注册表(@.)包含所有编辑键,不幸的是原始格式,<Del><BS>也显示为<80>kD ,以及哪些插入完成不解释。相反,要仅提取输入的净文本,请使用由标记'['](最后一个独占)分隔的范围。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

getreg('.')

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

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

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