4

Причина: у меня включен autocd, но я никогда не использую его, потому что это делает сложным завершение табуляции, так как каждое имя команды в моей системе будет дополняться вместе с дополнением имени файла.

Желаемое поведение: я хочу, чтобы zsh выполнял ТОЛЬКО команды табуляции, если завершенная строка не является префиксом ни одного из файлов в текущей папке.

Пример желаемого поведения:

$ ls
foo1
foo2
$f<TAB>
foo1
foo2
$fi<TAB>
find
... (other commands that start with fi)

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

3 ответа3

2

В моем файле ~/.zshrc есть следующие три строки:

zle -C complete-files complete-word _generic
zstyle ':completion:complete-files:*' completer _files
bindkey "^F" complete-files

это связывает Ctrl-f с завершением файла / папки, поэтому, если я знаю, что определенно хочу завершить имя файла с помощью табуляции, тогда я использую Ctrl-f вместо <tab> . Очевидно, что вы можете использовать другую привязку, изменив ^F на что-то другое. Результат:

$ ls
  foo1
  foo2
$ f<tab>
  f2py
  factor
  faillog
  ...
$ f<Ctrl-f>
  foo1
  foo2
1

Чтобы получить это точное поведение, поместите это в ваш .zshrc:

compdef '_autocd || _command_names' -command-

Я нашел ответ в этой теме.

0

На Bash, если вы делаете

. f<TAB>

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

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