私はzshとbindkeys -v
。
Alt + .
期待どおりに動作しません。現在、標準入力に入力されているが入力されていない内容が次の行に繰り返されるようです。
この投稿bashのように動作することを示唆しているようです。つまり、入力された最後のコマンドの最後の引数を取得します。
これが期待どおりに行われるには何が必要ですか?
答え1
端末ではAlt、+はchar通常と同じですEsc char。 (一部の端末は異なるように設定できます。)
vi 挿入モードからEscコマンドモードに切り替えます。 vi コマンドモードではEsc何もしません。 vi コマンドモードで.前のコマンドを繰り返します。
小さな部品insert-last-word
デフォルトのバインディングはemacsモードではAlt+.とAlt+_ですが、viモードにはデフォルトのバインディングはありません。 viモードで使用するには、バインディングを指定する必要があります。
bindkey -M vicmd _ insert-last-word
これは入れるコマンド:カーソルの前にテキストを挿入します。行末では実行できません。これは、行末でよく使用されるコマンドでは非常に不便です。あなたは正義を好むかもしれませんappend-last-word
。
function append-last-word { ((++CURSOR)); zle insert-last-word; }
zle -N append-last-word
bindkey -M vicmd _ append-last-word
答え2
この回答を参照してください。https://stackoverflow.com/a/34293570/340947他の答えとは異なり、vicmd
マッピングには(非包括的な)テストで深刻な問題があります!このviins
マッピングがトリックのようです。
見積もりは次のとおりです(について~/.zshrc
)。
bindkey -M viins '\e.' insert-last-word
bashの場合も同様です~/.inputrc
。
set keymap vi-insert
"\e.":yank-last-arg
いいですね。これは最も一般的なユースケースであるAlt +をカバーしています。これらのシェルでは挿入モードになりますが、時には通常モードでナビゲートして前の最後の引数を挿入しようとします。それから@gillesのもう一つの答えが入ってきます。基本的な答えだけがカーソルを正しい位置に保ちます。はい、カーソルの前に挿入されます。この問題を解決する方法がないようです。