2011-08-24 30 views
52

私はYEARSのための解決策を見つけることを意味してきました。どうすればbashタブの補完をvimのタブ補完のように振る舞い、マッチングマッチを繰り返すことができますか?

私は、このような理由から、bash以外のファイルを操作するときには、vimでもっと生産的です。

file_12390983421 file_12391983421 file_12340983421 file_12390986421 

をそして、これは恐ろしいイノシシとで動作するように痛いです:

は、私はbashで

file_12390983421 
file_12391983421 
file_12340983421 
file_12390986421 

を持っていると>タブをfile_1-入力すると、それは明らかに示しています。

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

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

+0

http://unix.stackexchange.com/questions/24419/terminal-autocomplete-cycle-through-suggestions –

+0

'.bashrc'に' bind TAB:menu-complete'を入れてください。 – Claudio

答えて

66

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

TAB: menu-complete 

man bashREADLINEセクションを参照してください。 @sthする

+1

これは完全に機能します。一つは、これを後退させる方法はありますか? vimではshift + tabを使用しています。私が誤って遠くに行けば、私は戻ってきます。リストの最後から始めたいのですが。私は一日中ヴィムで何かをするのですが、メニュー完成ではうまくいかないようです。 – pixelearth

+6

menu-completeはあなたの入力を自動的に置き換えますが、候補リストを表示しません。両方を行う方法はありますか? – leon

+12

@pixelearth: 'menu-complete-backward'もあり、少なくとも私の端末のShift-Tabは' \ e [Z'エスケープシーケンスを送るようです。これにより、この.inputrcエントリが得られます。 '' \ e [Z ":menu-complete-backward' – sth

3

おかげで私は私のために最高の作品何が見つかりました:

通常のbashタブ補完を維持するには、その後、必要なときに、あなたにこれを入れてメニュー-完全

を使用してサイクルにCTL-Fを使用します.inputrcのファイル:あなたも考えるかもしれ

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

の上に

"\C-f": menu-complete 
13

追加

# 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 

P.S.になるだろうこのThe GNU Readline Libraryウェブサイトから最新のreadlineライブラリを入手できます。

0

私の経験では、sthの回答で提供された解決策は、決して完全に私のために働いたことはありません。 TL; DR~/.bashrcset -o viを追加してください。

メニュー - 完全なviのキーバインドと組み合わせて使用​​して

は、私が

set -o vi 

が私~/.bashrcのどこかに現れることを確認する必要があります。

TAB: menu-complete 

set editing-mode vi 
set keymap vi 

を私の~/.inputrcに入れておくだけでは十分ではありません。

私の推測では、何とかset editing-modeset keymapTAB: ...設定を追い払ってくれるしているが、私はこのような場合は理由を徹底的に把握するドキュメントに見ていないということです。 bashの> = 4の場合

+0

TABコマンドが見つかりません。私は編集モードとキーマップをviに設定しようとしましたが、何もせず、MacOSのinputrcにbashコマンドがありません –

+1

@MladenPetrovic - 最初の 'set ...'の部分は '〜/ .bashrc'に、 ... 'の部分は '〜/ .inputrc'に入ります。 '〜/ .bashrc'にその部分を置くと' TABコマンドが見つかりません 'というメッセージが表示されます。 –

0

あなたはこれらの設定を好むかもしれない:

# 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" 

このセットアップは、私はUnixの& Linuxのサイトにthis questionからこれらの設定を引っ張っVimのset wildmode=longest:full:list,full

に似ています。

関連する問題