私はzsh
シェルを使用しており、完了メニューを開くときにVimのバッファーと同じキーを使用するようにいくつかのキーバインディングをインストールしたいと思います。
したがって、キーマップ内に次の行を追加してmenuselect
キーj
とウィジェットをk
バインドします。zle
down-line-or-history
up-line-or-history
~/.zshrc
bindkey -M menuselect 'j' down-line-or-history
bindkey -M menuselect 'k' up-line-or-history
down-line-or-history
そして次のようにup-line-or-history
説明されます。man zshzle
down-line-or-history (^N ESC-[B) (j) (ESC-[B)
Move down a line in the buffer, or if already at the bottom line, move to the next event in the his‐
tory list.
up-line-or-history (^P ESC-[A) (k) (ESC-[A)
Move up a line in the buffer, or if already at the top line, move to the previous event in the history
list.
C-d
これで、同じウィジェットにとをバインドしたいが、C-u
好きなだけ繰り返すことができます(例:)5
。
最初は、次のような簡単なコードを試しました。
some-widget() {
zle backward-char -n 5
}
zle -N some-widget
bindkey '^D' some-widget
C-d
zleウィジェットにバインドされていますが、何度もbackward-char
繰り返されます。5
次に、キーバインディングを主キーマップからキーマップに移動するコードを書き直しましたmenuselect
。
some-widget() {
zle backward-char -n 5
}
zle -N some-widget
bindkey -M menuselect '^D' some-widget
C-d
ただし、完了メニューが開いている間にクリックすると、バインドされたデフォルトウィジェットを実行しているように見えるzle
ため、期待どおりに機能しません。C-d
delete-char-or-list
delete-char-or-list (^D) (unbound) (unbound)
Delete the character under the cursor. If the cursor is at the end of the line, list possible comple‐
tions for the current word.
5
現在の完了メニューを終了してカーソルを数回後ろに移動するのではなく、現在の単語の可能な完了を一覧表示します。
期待どおりに機能する場合は、最終的に次のような最終コードを使用します。
fast-down-line-or-history() {
zle down-line-or-history -n 5
}
zle -N fast-down-line-or-history
bindkey -M menuselect '^D' fast-down-line-or-history
fast-up-line-or-history() {
zle up-line-or-history -n 5
}
zle -N fast-up-line-or-history
bindkey -M menuselect '^U' fast-up-line-or-history
zle
ただし、そうでないため、完成メニューが開いたときにウィジェットを繰り返す方法を見つける必要があります。
down-line-or-history
完成メニューを開いた状態でクリックしたときに何度も繰り返されるように古いコードを変更するにはどうすればよいですか?5
C-d
答え1
ウィジェットのため、コードは機能しません。「メニュー選択グラフは常に同じことを行います。ユーザーが定義したウィジェットに置き換えたり、機能セットを拡張したりすることはできません。」。
しかし、する働く:
bindkey -M menuselect 'j' down-line-or-history
bindkey -M menuselect 'k' up-line-or-history
bindkey -M menuselect -s '^D' 'jjjjj'
bindkey -M menuselect -s '^U' 'kkkkk'
この-s
オプションを使用すると、直接入力したようにZLE(Zsh Line Editor)に入力するテキスト文字列を指定できます。をctrlD押すとj5回押すと、希望の効果が得られます。
しかし、特に速くないので注意してください。実際、カーソルが一度に1段階ずつ上下に5段階ずつ移動するのがわかります。