zshを使用しています。
zshウィンドウでコピーした内容を右クリックし、右クリックして貼り付けます。私はいつもいくつかの文字が欠けており、最後の文字の大文字と小文字が変わる場合があります。
例えば
echo this is a long message
次に貼り付け
(empty line)
this is a long messaG
そして
vim hello.txt
~になる
m hello.tX
原因は何ですか?解決策は何ですか?
答え1
これには2つの理由があります。
- 何か(おそらくZシェル)に端末を開くように指示します。かっこ内に貼り付ける。
- Zシェルの使用法
vicmd
またはviins
キーマップ。
何が起こるのか?
- Zシェルが起動し、端末エミュレータで角かっこで囲まれた貼り付けを開くように制御シーケンスを実行します。あるいは、テキストエディタはある時点でこれを実行しましたが、何らかの理由で再び閉じる制御シーケンスを実行できなかった可能性があります。
- あなたは何かを貼り付けます。
- 端末エミュレータは、角かっこ貼り付け制御シーケンスの開始、貼り付けるテキスト、および角かっこ貼り付け制御シーケンスの終わりを送信します。
- 最初の角かっこ貼り付け制御シーケンスの最初の文字はESCで、ZLEの
vi
挿入モードをキャンセルしてZLEのvi
コマンドモードに戻ります。 - 後続の文字は
vi
コマンドであり、文字またはo
に達してi
挿入モードに入るまで多くのことは行いません。 - 残りのテキストは挿入モードで挿入されます。
- 末尾の括弧の貼り付け制御シーケンスの最初の文字はESCで、ZLEの
vi
挿入モードをキャンセルしてZLEのvi
コマンドモードに戻ります。 - 制御シーケンスの後続の文字はほとんど影響を及ぼさない。
- 閉じ括弧の貼り付け制御シーケンスの最後の文字は、大文字と小文字を
~
置き換えるコマンドですvi
。これにより、貼り付けたテキストの最後の文字が大文字と小文字に変わります。
次の 2 つの方法のいずれかでこの問題を解決できます。
vicmd
/キーマップはそれを処理するように構成されていないため、Zシェルが角かっこで囲まれた貼り付けを開くのを防ぎますviins
。vicmd
/ keymapで角かっこで囲まれた貼り付けが機能するようにしますviins
。これを行う方法は、最初にZシェルが括弧内のペーストを認識するようにした方法によって異なります。プラグインsafe-paste
はemacsキーマップを使用し、viキーマップとうまく機能するように調整する必要があります。しかし、これが現在Zシェルからブラケットペーストを得る唯一の方法ではありません。