В bash автозаполнение путей недавно перестало работать при выдаче vim
команд, где путь глубже двух каталогов (он продолжает работать, как и ожидалось, с другими командами, такими как ls
и cd
).
Например, если я печатаю, ls .config/btsync/bt
а затем нажимаю TAB, он расширяется до ls .config/btsync/btsync.conf
.
Если я наберу, vim .config/bt
а затем нажмите клавишу TAB, он расширится до vim .config/btsync/
.
Однако, если я наберу, vim .config/btsync/bt
а затем нажму TAB, ничего не произойдет (я ожидаю, что он расширится до vim .config/btsync/btsync.conf
, как в ls
примере выше.
У меня возникает та же проблема, когда я работаю как мой собственный пользователь и как su.
Я прочитал этот пост, в котором упоминалась проблема со старыми версиями bash-complete, но я использую 2.1-5.
ОБНОВЛЕНИЕ: После некоторого дополнительного тестирования я обнаружил, что основная проблема заключается в том, что bash будет заполнять только имена каталогов, а не имена файлов.
ОБНОВЛЕНИЕ: Оказывается, это bash-completion
была общая причина. Смотрите мой второй комментарий о принятом ответе.
Любые предложения относительно потенциальной причины такого поведения будут с благодарностью приняты!
источник
.bashrc
!.bashrc
размещена, как того требует.Ответы:
Я провел еще несколько исследований для вас, и вот что я нашел - ключ к автозаполнению - это
bash
командаcomplete
. Вы можете распечатать правилаvim
использования:Также вы можете удалить эти конкретные правила с помощью:
Эта команда сбрасывает его до значений по умолчанию - обычные пути и имена файлов без дополнительной логики. Это, вероятно, то, что вы хотите.
Для получения дополнительной информации проверьте
help complete
илиman bash
и найдите раздел оcomplete
команде (это встроенный bash, поэтому он задокументирован на man-странице bash).Один последний пункт - вышеуказанные изменения затрагивают только текущий
bash
сеанс, если вы хотите удалить правила VIM после каждого Логин поставитьcomplete -r vim
к вашему~/.bashrc
.Надеюсь, это поможет :)
источник
complete -p vim
команда,complete -F _filedir_xspec vim
которая была удаленаcomplete -r vim
командой, решает проблему. Я собираюсь немного почитатьcomplete
команду и информацию, возвращаемую ключом -p. Немного озадачен тем, почему это поведение изменилось, поэтому тоже исследую это._filedir_xspec
Функция/usr/share/bash-completion/bash_completion
только завершает каталоги. Я удалилbash-completion
, удалилcomplete -r vim
строку из моего.bashrc
и перезагрузил иvim
теперь ведет себя как ожидалось.Bash по умолчанию автоматически заполняет только пути и имена файлов. Однако механизм является расширяемым, и bash можно научить выполнять разное автодополнение для разных программ. Например,
git
он может автоматически заполнять имена подкоманд (clone, commit) и ревизии вместо просто путей. Иногда это удобно, иногда довольно раздражает - например, когдаgzip -d
отказывается от автозаполнения имен файлов, которые не имеют.gz
расширения.Завершение Bash обычно настраивается в
/etc/bash_completion.d
- вы, вероятно, найдете там файл с именемvim
. Это файл, который содержит правила автозаполнения дляvim
командной строки.Теперь у вас есть два варианта:
vim
правила и выполнять только автозаполнение пути по умолчанию.И, конечно же, подайте отчет об ошибке, в котором изложена проблема, чтобы она была исправлена в будущих версиях :)
источник
/etc/bash_completion.d
и там толькоhg
файл присутствует (для Mercurial). Очень странный./usr/share/bash-completion/
или список все файлы изvim
пакета или изbash
илиbash-completion
пакетов (не знаю , как это называется на ArchLinux). Это будет где-то там.bash-completion
пакетов показывает/usr/share/bash-completion/completions
правила для многих программ, но это не такvim
. В списке файлов, установленных вместе сvim
пакетом, не отображаются файлы, связанные с завершением, а при поиске по всей системеfind / -name vim
также не отображаются файлы, связанные с завершением.Возможно, вы могли бы переустановить bash-complete:
apt-get install --reinstall bash-completion
И посмотрите на файл /etc/bash.bashrc:
nano /etc/bash.bashrc
И убедитесь, что следующая строка не закомментирована:
Затем перезапустите сеанс терминала
источник
bash-completion
, протестироватьvim
поведение, а затем переустановитьbash-completion
и протестировать, но у меня все еще возникала одна и та же проблема в обоих случаях. Линии, которые вы перечислили, отсутствуют в/etc/bash.bashrc
. Эта строка, однако,[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion