связать ключ, чтобы завершить имя файла, где контекст находится в Zsh - PullRequest
6 голосов
/ 17 апреля 2010

Иногда я хочу имя файла вместо того, что угадывает zsh. Например, у меня есть PNG-файл без правильного суффикса .png, который заставляет zsh думать, что это не картинка, и не выводит ее, когда я набираю Tab для завершения аргументов display.

Мне интересно, есть ли последовательность клавиш, которая завершается для имени файла, где бы ни находился контекст, например, ^XC для _correct_filename, или как настроить zsh для этого?

Ответы [ 2 ]

7 голосов
/ 17 апреля 2010

Вы можете добавить привязку ключа, чтобы делать то, что вы хотите:

zle -C complete complete-word complete-files
bindkey '^X\t' complete
complete-files () { compadd - $PREFIX* }

Редактировать: Добавлено $PREFIX

Вы можете добавить эти строки в файл ~/.zshrc.

Это делает список завершения всех файлов, когда вы нажимаете Ctrl - x Tab на каждом шаге вместо Tab . Вы можете выбрать другую комбинацию клавиш, которая подходит вам.

Или для того, чтобы дополнения ImageMagick всегда включали все файлы, попробуйте отредактировать (сначала сделать резервную копию) файл /usr/share/zsh/functions/Completion/Unix/_imagemagick (или аналогичный) и измените его, чтобы закомментировать существующую строку, которая начинается с _files, и добавить новую показано:

if (( $# )); then
  # _files "$@" -g "*.(#i)(${~formats//:/|})(-.)"
  _files "$@"
  return
fi
0 голосов
/ 22 апреля 2018

Ответ Дениса не расширил тильду для меня, поэтому я получал что-то вроде complete-files: no matches found: ~/ma*, когда пытался вызвать его на foo ~/ma. Я нашел альтернативу в zsh FAQ , которая расширит их, хотя:

zle -C complete-file complete-word _generic
zstyle ':completion:complete-file::::' completer _files
bindkey '^xF' complete-file
...