下線付きのオートコンプリートファイル名

下線付きのオートコンプリートファイル名

~/.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

見てfzf。優れたスタンドアロンツールだけでなく、次のものもサポートしています。「ぼやけ」完了説明した内容と似ています。

答え3

魚の皮は本当にお勧めします。 (https://fishshell.com/)

ファジーマッチングと強力な履歴検索/巡回をサポートします。他の機能も含まれています。

組み込みのファジー検索はうまく機能しますが、そのイベントは必要に応じてカスタム補完をサポートします。詳しくはこちらをご覧ください。https://fishshell.com/docs/current/index.html#tab-completion

関連情報