5

Я только начал использовать плагин Command-T для vim, и он работает. Если вы не слышали об этом, это позволяет вам напечатать что-то вроде этого:

Sb

выбрать Something.hs-boot из списка

src/project/Control/Whatever/Foobs.hs
src/project/Control/Whatever/Something.hs-boot
src/project/Control/Whatever/Something.hs

И так далее.

Мне было интересно, смогу ли я использовать подобный стиль автозаполнения с Zsh. Я понимаю, что завершение оболочки не может быть столь же обширным, как завершение vim, потому что завершение оболочки, вероятно, не должно искать всю систему каждый раз, когда вы печатаете букву, но есть ли какое-то подобное завершение, где я мог бы по крайней мере тип

s/p/c/w/Sb<tab>

и получить эффект, похожий на тот, что выше?

Я слышал, что у zsh довольно хорошо программируемая функция автозаполнения, но мой shell-fu довольно слабый.

Кто-нибудь знает, как это настроить?

2 ответа2

1

Чтобы завершить частичные пути, достаточно просто запустить систему завершения (по крайней мере, в моей системе, используя zsh v4.3.17):

autoload -U compinit && compinit
zmodload zsh/complist

Если вы хотите получить немного больше фантазии, вы можете сделать сопоставление без учета регистра:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

Обновление 1:

Я не знаю, можете ли вы выполнить автозаполнение в стиле Command-T ... но поскольку zsh должен получить все совпадения, прежде чем он что-то отобразит, это делается на лету, особенно где-то, где много подкаталогов / файлов, может быть неосуществимым.

Однако вы можете использовать:

**/*thing <Tab>

** соответствует всем файлам и подкаталогам текущего каталога.

Идея: если это не обязательно актуальный список файлов, вы можете написать функцию завершения, которая использует вывод locate (то есть предварительно вычисленный список файлов)

Обновление 2: https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh

1

Другая интересная альтернатива - использовать что-то вроде fasd.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .