2012-09-10 72 views
3

作爲Python自動完成(https://github.com/davidhalter/jedi)的第二項任務,我正在編寫一個VIM插件,可以進行重命名(重構)。VIM:如何訪問重做註冊器

重命名最舒適的方法是使用cwautocommand InsertLeave :call do_renaming_func()。要做到這一點,我需要訪問redo-register(請參閱help redo-register)或類似的東西,它會記錄書面文字。

如果可能,我喜歡在沒有宏的情況下執行此操作,因爲我不想搞亂任何東西。

回答

0

問題不知道它是哪個寄存器,而是要訪問它。 我終於找到了方法:

getreg('.') 

由於@Ingo Karkat指出,該寄存器可能包括一些逃逸字符。

但是,最後我用了一種不同的方法。我剛剛讀expand('<cword>')以獲取新單詞(因爲重命名總是隻有一個單詞)。這更容易,更可靠。

下面的代碼(線113): https://github.com/davidhalter/jedi/commit/6920f15caf332cd14a7833a071765dfa77d82328

1

.寄存器包含上次插入的文本。見:help quote_.

該幫助沒有具體提及此註冊表填充時的任何注意事項,但它確實提到編輯命令行時不起作用。這不應該成爲你的問題。

2

.寄存器(@.)包含了所有的編輯鍵,可惜在原始形式,所以也<Del><BS>,其顯示爲<80>kD,並插入完成並不解釋。相反,要僅提取輸入的淨文本,請使用由標記'['](最後一個排除)分隔的範圍。

有關如何執行此操作的示例,請查看我的PrevInsertComplete plugin

+0

尼斯。我沒有意識到這一點,因爲在我的簡單測試中我沒有犯錯。 +1。 –