Существует ли режим нечеткого соответствия для оболочки zsh?
Недавно я влюбился в эффективные системы завершения текста. Один из моих любимых видов завершения - так называемое нечеткое завершение. Это режим, в котором программа завершает ввод данных пользователем, основываясь только на паре символов, которые могут встречаться "где угодно" (почти) в имени файла или пути. Эта функция существует по крайней мере для этих программ:
- TextMate
- Плагин Vim Command-T https://github.com/wincent/Command-T
- Система пополнения Vim https://github.com/Shougo/neocomplcache
- Различные современные IDE
Пример использования этого режима в текстовом редакторе:
Пользователь пытается завершить слово longWordNameThatTheyDontWantToWriteByHand, и они могут сделать это, набрав, например, первую букву и некоторые заглавные буквы. Таким образом, ввод lwnt может завершить все слово.
Мой вопрос: есть ли режим или что-то подобное, что я мог бы использовать с оболочкой zsh?
2 ответа
У меня есть это в моем .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
- перейдите в выбранный каталог
и нечеткий режим завершения:
# 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>