В zsh
команде cd
команда имеет форму с двумя аргументами: cd OLD NEW
изменяется на ${PWD/OLD/NEW}
. С системой завершения в новом стиле zsh может выполнить NEW
: второй аргумент завершается на основе того, что OLD
можно заменить, чтобы получить существующий каталог. Но первый аргумент дополняется только для существующих каталогов.
Как заставить zsh предлагать дополнения, которые являются возможными значениями OLD
, в дополнение к заполнению существующих каталогов?
Например, если текущий каталог есть /path/to/foo
и есть также каталоги /also/to/foo
и /path/to/foo/prime
, то cd p
Tabзавершается p
до prime
. Если я собираюсь запустить, cd path also
то я хотел бы, чтобы zsh также предлагал path
в качестве завершения. Как?
Использование уже введенных значений второго аргумента для ограничения возможностей для первого аргумента было бы плюсом, но завершение первого аргумента независимо также было бы хорошо.
источник
cd p also <Tab>
илиcd p also <left arrow x 5> <Tab>
?cd p also<Left*5><Tab>
: если я нажму,<Tab>
когда курсор находится внутриalso
, я ожидаю,also
что будет завершено, а неp
.cd t<tab>
он должен предложитьth/to/foo/prime
иto/foo/prime
? Или это должно просто ограничиться границами каталога?Ответы:
Я полагаю, что вы могли бы добавить компоненты
$PWD
вcd
список завершения, хотя это, кажется, требует возиться с_cd
; то есть настроенная версия_cd
должна появиться первой в$fpath
.Затем наверху
~/zcomp/_cd
добавить функциюа затем непосредственно перед
_alternative
строкой добавить то, что возвращается в список альтернативхотя это всегда будет добавлять
pwd
компоненты кcd
дополнениям:с дополнительной логикой вы можете добавлять
$PWD
компоненты только тогда, когда уже есть второй аргумент вместо всегда.Тем не мение! Это всегда портит
cd
завершение и требует, чтобы мы исправили_cd
завершение восходящего потока . Другой вариант - создать новое имя для функции, предоставляемой двумя аргументамиcd
, возможно, вызваннойcdsub
, иPWD
для этого появятся только завершенные компоненты. Добавьте это к~/.zshrc
И затем потрошенное
_cd
завершение для_cdsub
размещения где-то в$fpath
:источник