1

Я хотел бы, чтобы bash отфильтровывал файлы резервных копий с именем, оканчивающимся на ~ (тильда), при автозаполнении имен файлов.

Я написал скрипт для установки этого при использовании vim (у меня очень мало опыта работы со скриптами оболочки):

#!/bin/bash

no_backups_complete()
{
    local cur=$2

    COMPREPLY=( $( compgen -o plusdirs -f -X '*\~' -- "$cur" ) )

    return 0
}

complete -o filenames -F no_backups_complete vim

Однако запуск сценария не имеет видимого эффекта, vim [Tab] по-прежнему показывает каждый файл.

Я попытался избежать / не избежать ~ и поместить $ 2 и $ cur в / не в кавычки, без разницы.

1 ответ1

1

Синтаксис работает отлично, поэтому, скорее всего, он не будет добавлен в вашу среду bash по той или иной причине.

Посмотрите, загружен ли он в вашей среде:

Откройте новое окно терминала bash и запустите:

declare -F | grep no_backups_complete

Чтобы увидеть объявление функции (если оно доступно):

type no_backups_complete

Если вы получите результат для первой команды, например:

declare -f no_backups_complete

это указывает, что это загружено в окружающую среду; если нет результата, то это не так. Ответ типа должен быть «... не найден», если он недоступен, или перечислить определение функции, если он доступен.

Продолжая с предположением, что он не загружен в вашей среде bash:

Где вы положили файл?

  • Обычное местоположение находится в каталоге /etc/bash_completion.d/. Его не нужно отмечать исполняемым, чтобы поместить в этот каталог, или иметь какое-то конкретное имя. У вас правильный формат.

  • В качестве теста просто введите source /path/to/your/completion.file а затем посмотрите, игнорирует ли vim файлы, оканчивающиеся на тильды. Это должно - это было сделано в моей оболочке bash.

  • Убедись, что ты:
    1. скопируйте содержимое из скрипта в ваш файл .bashrc, или
    2. скопируйте его в /etc/bash_completion.d/ или
    3. иметь файл завершения, полученный из .bashrc

Какой бы метод вы ни использовали, если вы не получите исходный файл, вам нужно будет перезапустить терминал, чтобы он включился. Если он находится в каталоге /etc/bash_completion.d, перезагрузка bash не загрузила его; Мне пришлось закрыть окно терминала и снова открыть его - это может быть связано с конкретной программой терминала, но для этого случая не хватило .bashrc (вариант 2). Две другие опции начнут работать после того, как будет получен .bashrc.

Если он загружен в вашей среде; то есть объявить -F | Команды declare -F | grep .. и type .. возвращают ожидаемые значения, отправляют результаты с результатами. Я думаю, что это гораздо менее вероятно, и стоит пройти эти быстрые проверки, прежде чем идти по этому пути.

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