3

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

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

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

4

3 回答 3

2

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

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

于 2012-09-10T19:22:41.583 回答
1

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

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

于 2012-09-10T19:06:01.460 回答
0

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

getreg('.')

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

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

Here's the code (line 113): https://github.com/davidhalter/jedi/commit/6920f15caf332cd14a7833a071765dfa77d82328

于 2012-09-10T22:30:56.973 回答