Я использую zsh с grml's zshrc в качестве базы. В рамках своей работы я регулярно обращаюсь к сетевому пути (например, NFS. AFS.)
Если я напишу /a/long/network/path/on/the/other/side/of/the/world и нажму TAB дважды, то это будет ужасно медленно, так как zsh начнет поиск в /a/, затем в /a/long /a/long/network и т. д.
В то же время запуск ls /a/long/network/path/on/the/other/side/of/the/world возвращает ответ через секунду. Поэтому я хотел бы сказать zsh, чтобы он перестал сомневаться в моих словах. (Если я напишу /usr/src/linuxx/ и затем нажму Tab, он поймет, что я хотел /usr/src/linux/, и это здорово, однако, потому что сеть приносит мне больше вреда, чем пользы). Я хотел бы, чтобы автодополнение выполнялось только «в конце» после последнего слеша.
Иногда я использую обходной путь cd в каталог, а затем использую автодополнение. Конечно, должен быть лучший способ.
Как мне этого добиться?
решение1
Такое поведение настраивается черезстили(за исключением нескольких основных, у которых есть опции). Вам нужно будет отключитьpath-completion
.
По умолчанию автодополнение имени файла проверяет все компоненты пути, чтобы увидеть, есть ли автодополнения этого компонента. Например,
/u/b/z
может быть завершено до/usr/bin/zsh
. Явная установка этого стиля на false запрещает это поведение для компонентов пути до/
курсора
zstyle ':completion:*' path-completion false
Возможно, вы захотите включитьaccept-exact-dirs
вместо этого. Если path-completion
оставить включенным и accept-exact-dirs
включить, zsh будет пытаться завершить только компоненты пути, отличные от последнего, если путь не существует.
zstyle ':completion:*' accept-exact-dirs true