web-dev-qa-db-ja.com

bashタブ補完をvimタブ補完のように動作させ、一致するマッチを循環させるにはどうすればよいですか?

私はYEARSのためにこれに対する解決策を見つけることを意味してきました。

この理由から、bashよりもファイルを操作するときのvimの生産性が非常に高くなります。

私が持っている場合

file_12390983421
file_12391983421
file_12340983421
file_12390986421

Bashでfile_1-> tabと入力すると、明らかに以下がリストされます。

file_12390983421 file_12391983421 file_12340983421 file_12390986421

そして、これは恐ろしい退屈であり、作業するのが苦痛です。

Vimの同じシーケンスは、一度に1つずつファイルをループします。

誰かがこれをbashで行う方法を教えてください。これを行うことができる別のシェルがあれば、明日切り替えます。

71
pixelearth

デフォルトでは、TABcomplete readlineコマンドにバインドされています。望ましい動作は、代わりにmenu-completeになります。 ~/.inputrcを編集して、readlinesの設定を変更できます。 TABを再バインドするには、次の行を追加します。

TAB: menu-complete

詳細については、man bashREADLINEセクションを参照してください。

79
sth

Bash> = 4の場合、これらの設定が必要になる場合があります。

# If there are multiple matches for completion, Tab should cycle through them

bind 'TAB':menu-complete

# Display a list of the matching files

bind "set show-all-if-ambiguous on"

# Perform partial completion on the first Tab press,
# only start cycling full results on the second Tab press

bind "set menu-complete-display-prefix on"

このセットアップは、Vimのset wildmode=longest:full:list,full

これらの設定は、Unix&Linuxサイトの この質問 から取得しました。

17
joeytwiddle

の上に

# cycle forward
Control-k: menu-complete
# cycle backward
Control-j: menu-complete-backward

あなたも追加を検討することができます

# display one column with matches
set completion-display-width 1

この方法では、現在のタブ機能を保持し、bashに1つの列に可能性を表示します。代わりに

file_12340983421 file_12390983421 file_12390986421 file_12391983421

あなたは得るだろう

file_12340983421
file_12390983421
file_12390986421
file_12391983421

追伸最新のreadlineライブラリは、これから取得できます GNU Readline Library Webサイト。

14
Johnny Baloney

@sthのおかげで、私にとって最適なものが見つかりました。

通常のbashタブ補完を維持し、ctl-fを使用して、menu-completeを使用して必要なときに循環させる

これを.inputrcファイルに入れます:

"\C-f": menu-complete
6
pixelearth

私の経験では、sthの答えで提供されたソリューションは、私にとって完全に機能したことはありませんでした。 TL; DRset -o vi~/.bashrcに追加します。

Viキーバインディングと組み合わせてmenu-completeを使用する場合、~/.bashrcが以下を持っていることを確認する必要があります。

set -o vi

私の~/.inputrcが持っているだけでは十分ではありません。

TAB: menu-complete

set editing-mode vi
set keymap vi

どうやらset editing-modeset keymapTAB: ...設定を壊していると思いますが、なぜそうなのかを理解するためにドキュメントを詳しく調べていません。

0
jez