私は最近、効率的なテキスト補完システムに夢中になりました。私のお気に入りの補完の1つは、いわゆるファジー補完です。これは、プログラムがファイル名またはパスの「どこでも」(ほぼ)発生する可能性のある数文字のみに基づいてユーザーの入力を完了するモードです。この機能は、少なくともこれらのプログラムに存在します。
テキストエディタでのこのモードの使用例:
ユーザーはWordlongWordNameThatTheyDontWantToWriteByHandを完成させようとしていますが、たとえば次のように入力することで完成できます。最初の文字といくつかの大文字。したがって、lwntと入力すると、Word全体を補完できます。
私の質問は、zshシェルで使用できるモードまたはそれに類似したものはありますか?
私はこれを.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
を完成させます。
私のプロジェクトをチェックしてください 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>