zsh: изменить правила завершения и перекомпилировать файл .zwc

В zsh , ssh и scp используют завершение хоста из /etc/hosts . Тем не менее, они пытаются сопоставить имена хостов, даже если я использую заглавные буквы и когда я, очевидно, ссылаюсь на файл, а не на хост:

 $ scp -rp F<tab> FOO.txt foo.mydomain.com 

Я хотел бы отключить эту функцию. Я изменил следующую строку в /usr/share/zsh/functions/Completion/Unix/_ssh

 compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts 

в

 compadd "$@" $config_hosts 

Теперь, когда я начинаю вводить команду ssh и автозаполнять имя хоста, используя вкладку ssh foo<tab> , я получаю сообщение об ошибке:

 _all_labels:39: command not found: -J 

что это значит и как я могу это исправить?

Вторая проблема заключается в том, что я не могу перекомпилировать файл завершения после внесения изменений в Unix / _ssh:

 zcompile Unix/ Unix.zwc zcompile: can't open file: Unix.zwc 

это то, что я получаю при нажатии Ctrl + X + ? :

 $ scp -rp TE Trace output left in /tmp/zsh10048scp3 (up-history to view) TESTING.txt testing testing.mydomain.com 

где TESTING.txt – это файл, а testing и testing.mydomain.com – это имена хостов

ОБНОВИТЬ:

Я заметил, что я получил вышеперечисленные _all_labels:39 только для хостов, у которых есть ProxyCommand в ~/.ssh/config , то есть:

 Host testing testing.mydomain.com Hostname testing.mydomain.com User root PubkeyAuthentication yes StrictHostKeyChecking yes UserKnownHostsFile ~/.ssh/known_hosts ProxyCommand ssh server2.mydomain.com nc %h %p 

One Solution collect form web for “zsh: изменить правила завершения и перекомпилировать файл .zwc”

Убедитесь, что вы не удалили «\» в предыдущей строке / usr / share / zsh / functions / Completion / Unix / _ssh при внесении изменений:

 _wanted hosts expl 'remote host name' \ compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts 

Я сделал это (удалил символ продолжения) в нужную строку и получил точно такую ​​же ошибку:

 _all_labels:39: command not found: -J 

Другая возможность заключается в том, что вы случайно добавили лишние пробелы после «\», тем самым отключив его.

Что касается второй части вашего вопроса, я считаю, что правильный синтаксис для использования:

 zcompile Unix.zwc Unix/* 

(скомпилируйте все в Unix / Unix.zwc)

  • zsh с аргументами
  • Повторно оценивайте выражение запроса каждый раз, когда приглашение отображается в zsh
  • флаг расширения параметра zsh (P) с ассоциативными массивами
  • Определить сеанс tmux, к которому относится сеанс оболочки?
  • Могу ли я автоматически заполнять вкладку в zsh с регулярным выражением
  • как создать пользовательскую команду zsh auto_cd
  • Ищете карту xinit / startx rabbithole
  • Удалить keymap и полностью отключить ключ в zsh
  • Проблема с пониманием привязок ключей
  • Как я * надежно * и * просто * получить текущее имя интерпретатора оболочки?
  • Скрипт Zsh, который принимает переменное количество аргументов
  • Linux и Unix - лучшая ОС в мире.