~/.bashrc
たとえば、名前の付いたファイルがあり、- - -をname_separated_by_under_score
押してから[TAB]を押すと、シェルがファイル名をオートコンプリートするには何を追加する必要がありますか? (このオプションを見た記憶が出ますね)nsbus
答え1
Emacsは非常に積極的なようです。「部分完成」完了時制。
しばしば指定完了すべてのコマンド。ここでは、bash-4.1以降が必要なデフォルトの完成を使用しますcomplete -D
(ただし、オンデマンドの完成ハンドラはロードしません)。これは、bash-completionパッケージまたは他のコマンド固有の完成(該当する項目がある場合)では正しく機能しません(またはまったく)。実際にはコマンドも完了せず、パラメータのみが完了します。
function _bc_magicmatch() {
local cur=${COMP_WORDS[COMP_CWORD]} # the current token ($2 iff bash>=4.3)
local pat prefix
## kick-in condition
[[ $cur =~ ^(.*/)?([^/]+) ]] && { # match (path/)(name)
prefix=${BASH_REMATCH[1]}
pat=${BASH_REMATCH[2]}
prefix=$(compgen -W "$prefix") # expand specials, like ~
## first form: "-" in input for "_" in expanded names
pat="${pat//-/*_}*" # sprinkle "*" in to allow expansion
## second form: "-" in input matches [_-] in expanded names
#pat="${pat//-/*[_-]}*" # sprinkle "*" in to allow expansion
## third form: for no "-" at all in input
#[[ $pat =~ ${pat//?/(.)} ]] # split into character array
#IFS="*" pat="${BASH_REMATCH[*]:1}*" # add IFS separator, skipping index 0
readarray -t COMPREPLY < <(compgen -G "${prefix:+$prefix}$pat")
return
}
COMPREPLY=() # revert to completion defaults
}
# bind completion function
complete -D -o bashdefault -o default -o nospace -F _bc_magicmatch
## or selectively, for a subset of commands (works with bash<4.1)
# complete -o bashdefault -o default -o nospace -F _bc_magicmatch cmd1 cmd2 ...
実行条件のモードはアクティブ化を制限することができ、これは.-.-
少なくとも2つのハイフン部分に変更することも、複数の.+-(.+-)+
主人公を許可することもできます(Emacsの動作に似ています)。拡張を変更することもできますpat
。上記で有効になっていない代替の2番目の形式が許可されているか、拡張一致-
名_
に許可されています。
少し余分な操作が必要な入力に区切り文字がまったくない場合(例では、文字間でハイフンをしたいかどうかはわかりません)、上記の3番目の形式を使用してください。バラよりこの回答//?/(.)/
stackoverflowでは、およびの使い方を説明しますBASH_REMATCH
。
orをcompgen -W
含むすべての単語を展開します(コマンドプロンプトに入力したコードのみを実行するため、「危険」はありません)。グローバル変数のみが拡張され、グローバル変数ではない可能性があります。$()
``
compgen -G
~
~user
答え2
答え3
魚の皮は本当にお勧めします。 (https://fishshell.com/)
ファジーマッチングと強力な履歴検索/巡回をサポートします。他の機能も含まれています。
組み込みのファジー検索はうまく機能しますが、そのイベントは必要に応じてカスタム補完をサポートします。詳しくはこちらをご覧ください。https://fishshell.com/docs/current/index.html#tab-completion