キャメルケース一致でディレクトリ名をオートコンプリートするようにzshを構成するにはどうすればよいですか?


9

EclipseとResharperには、ファイル内を移動する優れた方法があります。

現在のディレクトリに次のフォルダ(またはファイル)がある場合

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

日食では、大文字の文字のみを使用してそれらに移動できます。これに対応して、zshで次のように入力できるようにしたいと思います。

cd MRLAFN(Tab)(Enter)

入るためにMyReallyLongAndFunNameワンステップで

私が今zshでそれをしたいなら、私はタイプしなければなりません My(Tab)Fun(Tab)(Enter)

回答:


6

これは私にとってはうまくいきます:

zstyle ':completion:*' matcher-list 'r:[^A-Z0-9]||[A-Z0-9]=** r:|=*' 

次に、テストディレクトリでこれを行うことができます。

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

Zshellユーザーガイドのヒントからまとめました。


この拡張子(ファイル、フォルダー)を配置する場所を教えていただけますか?また、zsh-completionsプロジェクトに追加することもできます。
JJD 2014年

〜/ .zshrcに追加
Cody

予想通りこれは非常に、動作しないAbcAde AdFg HlAkAdls AA<TAB>完了までをAd、私はAbcAdeを期待しながら、。
arekolek 2017年

@arekolek "Ad"は部分的な完成です。(zsh構成に応じて)もう一度TABを押すと、一致するすべてのファイルが表示されます。3つのファイルすべてが含まれているはずです。次に、メニューを選択するか、ファイル名をさらに入力して補完機能をガイドすることで、いずれかを選択できます。
phord

@arekolekすみません-私はそれを間違って読みました。そこからどのようにして広告にたどり着いたかわかりません。部分的にあいまいな一致だと思いましたが、あなたの例から見分けるのは難しいです。2番目のTABでさらに結果が得られますか?
phord

2

私はこれを「かなりうまく」機能させるために、次の内容のファイル_camel_caseを個人用~/.zsh/functions folder$fpath変数に含まれる任意のフォルダーを取る)に追加しました。

#autoload

[[ -z "$PREFIX" ]] && return 1

relpath=$(dirname $PREFIX)

[[ -e $relpath ]] || return 1

files=$(ls $relpath)

regex=$(echo $(basename $PREFIX) | sed -e 's/\([A-Z][^A-Z]*\)/\1[^A-Z]+/g')

correctedfiles=($(echo $files | grep -P $regex | sed -e :a -e '$!N;s/\n/ /;ta'))

results=($(for file in $correctedfiles; do echo "$relpath/$file"; done))

compadd -U -f -- $results

次に、次の行を〜/ .zshrcに追加しました

zstyle ':completion:*' completer _complete _correct _path_files _camel_case

zshの補完システムについてあまり知識がないので、これは「良い」解決策ではない可能性が高いことに注意してください(実際に知っている人はごく少数ですが)。


これは少しだけ機能します。mkdir AaBbCcDd cd ABCD(タブ)=> cd ./すなわち オートコンプリートが失敗する
Rohit Manokaran 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.