Автозаполнение Bash кнопкой Tab не завершается при некоторых условиях

410
Gefolge

Мы знаем, что некоторые команды не работают с некоторыми файлами / каталогами. Например, мы не можем использовать команду «cd» для файла, и когда мы пытаемся нажать кнопку табуляции, чтобы завершить нашу строку, система не показывает нам файл для завершения.

Но я столкнулся с интересным сценарием, когда я пробовал функцию автозаполнения, чтобы завершить имя файла, заканчивающееся на «.a». Я могу объяснить этот сценарий, как показано ниже:

[root@myserver multipath]# ls -1 idlist idlist.a idlist.b multipath.a multipath.sh 

У меня есть эти файлы в каталоге.

  • Когда я набираю «vim m», а затем нажимаю кнопку «tab», система автоматически завершает эту команду как «vim multipath.sh».
  • Когда я набираю «vim idlist», а затем нажимаю кнопку «tab», система показывает мне две опции: «idlist» и «idlist.b». Там нет опции "idlist.a".
  • И наконец, когда я использую «cat (или что-либо еще)», система показывает мне файлы, которые заканчиваются на «.a» (со всеми параметрами). Там нет ничего путающего там.

В чем секрет ".a"? Почему система не завершает эти файлы, когда мы используем команду vi / vim?

3
Можете ли вы показать вывод ** `idlist полного имени файла [TAB]` **? Просто чтобы увидеть, распознает ли bash этот файл, заканчивающийся на `.a` или нет. C0deDaedalus 6 лет назад 1
извини, я не понимаю. какую команду я использую? такое команда "complete-filename"? но если вы примете команду "cat" или что-то в этом роде, вы получите: cat idlist [tab] - idlist idlist.a idlist.b -. если я использую vim: vim idlist [tab] - idlist idlist.b - Gefolge 6 лет назад 0
Просто напишите ** `полный список имен файлов [TAB]` **. Нажмите `TAB` **, а не ** Enter. И каков твой $ SHELL? C0deDaedalus 6 лет назад 1
я не могу использовать команду полного имени файла, у меня нет этого. есть команда с именем "complete". Но все же, если я пытаюсь сделать это, вывод такой же, как и вывод «cat» (idlist idlist.a idlist.b). Проблема только с vi / vim, как я вижу. и оболочка: echo $ SHELL -> / bin / bash Gefolge 6 лет назад 0

1 ответ на вопрос

1
Kamil Maciorowski

В моем Kubuntu нет /usr/share/bash-completion/completions/vimфайла, но файл

/usr/share/bash-completion/bash_completion 

содержит эту строку:

_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite 

Обратите внимание, что есть строки для разных инструментов, их много.

Если я включу set -xи затем vimtab, я вижу, что шаблон используется несколько раз, наконец, даже с его прописной версией, например так:

compgen -f -X '!!(*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)|*.@(O|SO|SO.!(CONF|*/*)|A|[RS]PM|GIF|JP?(E)G|MP3|MP?(E)G|AVI|ASF|OGG|CLASS))' -- 

Я временно удалил |aиз bash_completionфайла. Новые экземпляры bashначали распознавать *.a*.A) файлы.

Я считаю, что шаблон определяет файлы, которые обычно не нужно редактировать как текст. Этот список (который явно нечувствителен к регистру) говорит нам, что aможет обозначать библиотеку в Unix. Я думаю, что это причина, чтобы исключить это. Обратите внимание, oи soдругие распространенные расширения для бинарных файлов в Unix, они также в шаблоне.

Похожие вопросы