8

Eclipse и Resharper имеют хороший способ навигации по файлам.

Если у меня есть следующие папки (или файлы) в моем текущем каталоге

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

В затмении я могу перейти к ним, используя только заглавные буквы. Соответственно в zsh я хочу набрать:

CD MRLAFN(вкладка)(Enter)

Чтобы войти в MyReallyLongAndFunName за один шаг

Если я хочу сделать это с Zsh прямо сейчас, я должен набрать My(Tab)Fun(Tab)(Enter)

2 ответа2

5

Это работает для меня:

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

Тогда я могу сделать это в тестовой директории:

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

Я собрал его вместе из советов в Руководстве пользователя Zshell.

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 (я думаю, что только немногие действительно знают это), но это именно то, что вы описали в своем вопросе.

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