zsh:タブ終了メニューを完了し、最後の項目で完了を実行します。

zsh:タブ終了メニューを完了し、最後の項目で完了を実行します。

bashからzshに切り替えようとしましたが、zshで大きな不快感が1つ見つかりました。設定解除menucompleteオプション、バインディングtabexpand-or-complete-prefixバインディングalt-sがありますmenu-complete

ただし、を押してメニューコンプリートを呼び出すと、bashのようにメニュー補完が終了し、最後に表示されたエントリでコンプリートを実行するのではなく、後続のクリックがメニューコンプリートエントリを継続的に循環alt-sします。私がこれをしたい主な理由は、複数のネストされたディレクトリに移動したい場合、または表示された最後のディレクトリにすばやく「移動」できるからですtabcdls

私はzshバージョン5.8を使用しており、〜/.zshrcに次のものがあります。

setopt autolist
unsetopt automenu autoremoveslash listambiguous menucomplete
bindkey '^i' expand-or-complete-prefix # Bind tab
bindkey '^[s' menu-complete # Bind alt-s to menu-complete

以下は実際の例です。

$ mkdir dir dir/a dir/b dir/b/d dir/c
$ ls dir/ <alt-s>
$ ls dir/a/ <alt-s>
$ ls dir/b/ <tab>
$ ls dir/c/ <tab>
$ ls dir/a/ <tab>
$ ls dir/b/ <tab>
$ ls dir/c/
...etc.

tab代わりにbashのように「入力」したいです。dir/b/

$ ls dir/ <alt-s>
$ ls dir/a/ <alt-s>
$ ls dir/b/ <tab>
$ ls dir/b/d/  <-- Pressing tab exits menu-complete and immediately goes into the currently displayed directory.

どうすればこのような行動をすることができるかを知っている人はいますか?あなたの助けをいただきありがとうございます!


編集する:

~/.zshrc に以下を追加して、少しmenuselect軽減されたソリューションを見つけました。zsh/complist

zmodload -i zsh/complist
bindkey -M menuselect '^i' accept-line
zstyle ':completion:*' menu select=1

次に、作業tab中にmenu-complete終了をタップしますmenu-complete。ただし、最後に表示されたディレクトリに「入力」されず、最後に表示されたディレクトリtabでオートコンプリートを実行するには、もう一度押す必要があります。したがって、tabbashで1回押すのではなく、zshで2回押すと同じ機能が得られます。

他のオプションがありますmenuselect

bindkey -M menuselect '^i' accept-and-infer-next-history

簡単に押すと、表示された最後のディレクトリに「入力」されますが、tab必要に応じて正常に完了menu-selectせずにそのディレクトリで実行されます。tab

1回のキーストロークでこの機能を取得する方法を知っている人がいる場合はtab感謝します。menuselectたとえば、カスタムzleコマンドを作成できますかaccept-and-complete-next-history

ベストアンサー1

ここで要求されたタスクを実行するようにZshの完成システムを設定するには、実際には可能ですが、かなりの数のコード行が必要です。自分で作るよりも自分のものを使う方がいいzsh-autocomplete入れる代わりに。これは以下を提供します:

  1. 内容を入力すると、完了項目が自動的に一覧表示されます。
    • 押す必要はありません⇥ Tab
    • 選択範囲を絞り込むには、もっと入力してください。
    • これはパージオートコンプリートをサポートします。つまり、次に入力する内容が対象単語の右側にある限り、探している単語のどの部分でも入力できるという意味です。
  2. 上部挿入をタップして⇥ Tab完了します。
    • ディレクトリの場合は、サブディレクトリが自動的に一覧表示されます。
    • すすぎ、泡立てて繰り返します。
  3. 上部で目的の完成が得られない場合は、↓ Down(他の矢印キー付き)を使用してナビゲートできます。
    • 目的の完成がまったく表示されない場合は、を押してみてください⌃ Ctrl␣ Space。これにより、追加の完了が表示されます(存在する場合)。

おすすめ記事