3

Мы знаем, что некоторые команды не работают с некоторыми файлами / каталогами. Например, мы не можем использовать команду "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?

1 ответ1

1

В моем 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 а затем вкладку vim , я вижу, что шаблон используется несколько раз, наконец, даже с его прописной версией, например так:

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, они также в шаблоне.

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