私はlexics(例えば、自動的に閉じ括弧/引用符、ファイルタイプ固有のルールなど)を強化するためのプラグインを書いていた文字を貼り付けると、いくつかのものは私のために予期しない動作があります。プラグインのルールはこの1つのようになります(:ヘルプtextlock)私はキーが押されたものを検出するために、InsertCharPreイベントに耳を傾けておりますので強制feedkeysはすぐ
{"key": "'", "pattern": '...', "keys": "'\<Left>"}
、いくつかの制限が直接例えば、setline
を使用して編集バッファにあり。ですから、v:char
を変更するか、feedkeys
の代わりに電話する必要があります。 v:char
の問題は、プラグインで頻繁に使用される "\"、 "\"などの特殊キー(ただし、\が正しく処理されているように見える)のようなエスケープシーケンスを挿入することができないことです。だから私の唯一のオプションはフィードキーですが、もしkey
がkeys
(上記参照)にあれば、vimは再帰を開始します。私は<C-v>
の挿入モードのマッピングについて知っていますが、新しいルールを追加するためのキーがもっと複雑になることがあります。他のオプションがない場合は、set paste
オプションを使用することをお勧めしますが、件名には問題があることが示されています。
...
set paste
call feedkeys("'\<Left>")
set nopaste
...
関数の全身が最初に実行され、paste
が既にnopaste
あるときに文字が瞬間バッファに挿入されると思われます。 feedkeys
のさらなる読書は成功しなかった(私は異なるモードを試みた)。
function! s:Foo()
startinsert
call feedkeys("ff")
stopinsert
endfunction
nnoremap <silent><CR> :call <SID>Foo()<CR>
バッファがを入力しますが、あなたはstopinsert
コマンドをコメントする場合は、すべてが期待どおりになっ押した後、任意のテキストを含めるべきではありません:あなたは私が何を言っているか確認するために、この単純なコードを試すことができます。
Ps:わかりましたleximaプラグインですが、使用したくないです。私はleximaのソースコードを探索し、問題を解決しようとしましたが、私も:)使用したくないinoremap <expr>
あります。
はい、これは動作します。しかし、挿入モードで動作するプラグイン以降があるはず '\: \ 'や '\ = SomeFunction()' \設定ペースト。私にとっては、カーソルが1文字左へ移動する挿入モードを残さないため、最後の方が優れています。また、 ':set paste'を' feedkeys'関数に移動する必要はありませんので、私の最終コードは 'set paste' ' let output = printf( "%s \ = lexics#setNoPaste()\ "、rule.keys)' 'call feedys(出力、" n ") –
Evgeniy
コードはすでに動作していますが、' v:char'変数を使っていくつかのトリックがあれば良いでしょう。あなたはいくつか知っていますか?私は前にそれを言いましたが、パーサーはこれを台無しにしました。 'v:char'は' \ 'キーを含むことができます(改行が正しく挿入されていることを意味します)。 –
Evgeniy