zshシェルにはファジーマッチングモードが存在しますか?


22

私は最近、効率的なテキスト補完システムに夢中になりました。私のお気に入りの補完の1つは、いわゆるファジー補完です。これは、プログラムがファイル名またはパスの「どこでも」(ほとんど)発生する可能性のある数文字のみに基づいてユーザーの入力を完了するモードです。この機能は、少なくともこれらのプログラムに存在します。

テキストエディターでのこのモードの使用例:

ユーザーは単語longWordNameThatTheyDontWantToWriteByHandを完成させようとしていますが、最初の文字と大文字の一部を入力することで実行できます。したがって、lwntと入力すると、単語全体が完成します。

私の質問は次のとおりです。zshシェルで使用できるモードなどがありますか?

回答:


27

私はこれを持っています .zshrc

# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

完全なファジーマッチングをzshの完了エンジンに追加します。それは崇高なテキストの超スマートを欠いていますが、はい、それは完了しlwnt -> longWordNameThatTheyDontWantToWriteByHandます。


1
私はバグを見つけました:仕事は、スペースを含むファイル名のない、スペースの後にあなたにしているタイピングの何かを与えられた☹Ieはstack install && vlc ~/Music/erfに完了しませんstack install && vlc ~/Music/FGFC820\ -\ Perfect\ War.mp3
ハイエンジェル

5
@ Hi-Angelちょっと、これをぶつけてくれてありがとう。私は実際に使用してい'r:|?=** m:{a-z\-}={A-Z\_}'ますが、これはより簡単で、あなたが説明する問題に苦しむことはありません。
PythonNut

それは素晴らしいことです!このコードでプラグインを作成できるかもしれません。見つけやすいように。
Julien__

15

私のプロジェクトfzfをチェックしてください。

これはGolangで書かれた汎用ファジーファインダーで、ファイル、プロセス、コマンド履歴、gitブランチなど、あらゆるリストで使用できます。

zshの場合、次のキーバインディングを提供します。

  • CTRL-T -選択したファイルパスをコマンドラインに貼り付けます
  • CTRL-R -履歴から選択したコマンドをコマンドラインに貼り付けます
  • ALT-C -選択したディレクトリにcd

およびファジー完了モード:

# Files under current directory
# - You can select multiple items with TAB key
vim **<TAB>

# Files under parent directory
vim ../**<TAB>

# Files under parent directory that match `fzf`
vim ../fzf**<TAB>

# Files under your home directory
vim ~/**<TAB>

# Directories under current directory (single-selection)
cd **<TAB>

# Directories under ~/github that match `fzf`
cd ~/github/fzf**<TAB>

# Process IDs. Can select multiple processes with TAB or Shift-TAB
kill -9 <TAB>

# Host names
ssh **<TAB>
telnet **<TAB>

# Environment variables / aliases
unset **<TAB>
export **<TAB>
unalias **<TAB>

4
デフォルトでこれをタブで完全にするにはどうすればよいですか?入力することなく**
-theonlygusti
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.