3

Pythonオートコンプリート(https://github.com/davidhalter/jedi)の2番目のタスクとして、名前の変更(リファクタリング)を実行する機能を備えたVIMプラグインを作成しています。

名前の変更を行う最も快適な方法は、とを使用することcwですautocommand InsertLeave :call do_renaming_func()。これを行うには、redo-register(を参照help redo-register)などにアクセスする必要があります。これにより、書かれたテキストが記録されます。

可能であれば、何も台無しにしたくないので、マクロなしでこれを行うのが好きです。

4

3 に答える 3

2

.レジスタ ( ) にはすべての@.編集キーが含まれていますが、残念ながら生の形式であるため、<Del>および<BS>として表示され<80>kD、挿入補完が解釈されません。'[代わりに、入力された正味のテキストのみを抽出するには、マークand '](最後の 1 つを除く)で区切られた範囲を使用します。

これを行う方法の例については、私のPrevInsertComplete pluginをご覧ください。

于 2012-09-10T19:22:41.583 に答える
1

.レジスタには、最後に挿入されたテキストが含まれています。を参照してください:help quote_.

ヘルプには、このレジスタにデータが入力されるときの注意事項については特に言及されていませんが、コマンド ラインの編集時には機能しないことが言及されています。これはあなたにとって問題ではありません。

于 2012-09-10T19:06:01.460 に答える
0

問題は、それがどのレジスタであるかを知ることではなく、それにアクセスすることでした。私は最終的に方法を見つけました:

getreg('.')

@Ingo Karkat が指摘しているように、このレジスタにはいくつかのエスケープ文字が含まれている可能性があります。

ただし、最終的には別の方法を使用しました。新しい単語を取得するために読んだだけexpand('<cword>')です(名前の変更は常に1単語だけであるため)。これははるかに簡単で信頼性が高いです。

コードは次のとおりです (113 行目): https://github.com/davidhalter/jedi/commit/6920f15caf332cd14a7833a071765dfa77d82328

于 2012-09-10T22:30:56.973 に答える