W bash, automatyczne uzupełnianie ścieżek ostatnio przestało działać podczas wydawania vim
poleceń, w których ścieżka jest głębsza niż dwa katalogi (nadal działa zgodnie z oczekiwaniami z innymi poleceniami, takimi jak ls
i cd
).
Na przykład, jeśli piszę, ls .config/btsync/bt
a następnie wciskam TAB, rozwija się do ls .config/btsync/btsync.conf
.
Jeśli piszę, vim .config/bt
a następnie wciskam TAB, rozwija się do vim .config/btsync/
.
Jednak vim .config/btsync/bt
po wpisaniu, a następnie naciśnięciu klawisza TAB nic się nie dzieje (oczekiwałbym, że rozwinie się do vim .config/btsync/btsync.conf
, jak w ls
powyższym przykładzie).
Ten sam problem występuje podczas uruchamiania jako mój własny użytkownik i podczas uruchamiania jako su.
Przeczytałem ten post, który wspomniał o problemie ze starszymi wersjami bash-uzupełniania, ale korzystam z wersji 2.1-5.
AKTUALIZACJA: Po kilku dodatkowych testach odkryłem, że głównym problemem jest to, że bash uzupełni tylko nazwy katalogów, a nie nazwy plików.
AKTUALIZACJA: Okazuje się, że to bash-completion
była ogólna przyczyna. Zobacz mój drugi komentarz do zaakceptowanej odpowiedzi.
Wszelkie sugestie dotyczące potencjalnej przyczyny takiego zachowania zostaną z wdzięcznością przyjęte!
źródło
.bashrc
!.bashrc
wpisu, zgodnie z żądaniem.Odpowiedzi:
Zrobiłem dla ciebie więcej badań i oto, co znalazłem - kluczem do autouzupełniania jest
bash
poleceniecomplete
. Możesz wydrukować zasadyvim
używania:Podobnie możesz usunąć te szczegółowe reguły za pomocą:
To polecenie resetuje go do wartości domyślnych - zwykłe uzupełnianie ścieżek i nazw plików bez dodatkowej logiki. Prawdopodobnie tego chcesz.
Aby uzyskać więcej informacji, sprawdź
help complete
lubman bash
poszukaj sekcji ocomplete
poleceniu (jest to wbudowana bash, stąd jest udokumentowana na stronie podręcznika bash).Ostatni punkt - powyższe zmiany wpływają tylko na bieżącą
bash
sesję, jeśli chcesz usunąć reguły vim po każdym logowaniucomplete -r vim
do swojego~/.bashrc
.Mam nadzieję, że to pomoże :)
źródło
complete -p vim
Polecenie zwróconecomplete -F _filedir_xspec vim
który został usunięty przezcomplete -r vim
polecenia rozwiązania problemu. Przeczytamcomplete
komendę i informacje zwrócone przez przełącznik -p. Nieco zdziwiony, dlaczego to zachowanie się zmieniło, więc również to zbadam._filedir_xspec
Funkcja w/usr/share/bash-completion/bash_completion
dopełnia tylko katalogi. Odinstalowałembash-completion
, usunąłemcomplete -r vim
wiersz z mojego.bashrc
i ponownie uruchomiłem ivim
teraz działa zgodnie z oczekiwaniami.Domyślnie Bash automatycznie uzupełnia tylko ścieżki i nazwy plików. Jednak mechanizm jest rozszerzalny i można nauczyć bash wykonywania różnych autouzupełniania dla różnych programów. Na przykład
git
może automatycznie uzupełniać nazwy poleceń podrzędnych (klonować, zatwierdzać) i zmiany zamiast tylko ścieżek. Czasami jest to przydatne, a czasem dość irytujące - na przykład, gdygzip -d
odmawia autouzupełniania nazw plików, które nie mają.gz
rozszerzenia.Zakończenie bash jest zwykle konfigurowane w
/etc/bash_completion.d
- prawdopodobnie znajdziesz tam wywołany plikvim
. To plik zawierający reguły autouzupełniania dlavim
wiersza poleceń.Teraz masz dwie opcje:
vim
reguły i wykonać tylko domyślną autouzupełnianie ścieżki.I oczywiście zgłoś raport o błędzie, który opisuje problem, aby został naprawiony w przyszłych wersjach :)
źródło
/etc/bash_completion.d
i jest tylkohg
plik (dla Mercurial). Bardzo dziwny./usr/share/bash-completion/
lub wyświetl listę wszystkich plików zvim
pakietu lub zbash
lubbash-completion
pakietów (nie wiem, jak się nazywa w ArchLinux). Gdzieś tam będzie.bash-completion
pokazów pakietów/usr/share/bash-completion/completions
zawiera reguły dla wielu programów, ale nievim
. Pliki list zainstalowane zvim
pakietem nie pokazują żadnych plików związanych z ukończeniem, a przeszukiwanie całego systemu za pomocąfind / -name vim
również nie pokazuje plików związanych z ukończeniem.Być może mógłbyś ponownie zainstalować bash-complete:
apt-get install --reinstall bash-completion
I spójrz na plik /etc/bash.bashrc:
nano /etc/bash.bashrc
I sprawdź, czy następujący wiersz nie ma komentarza:
Następnie zrestartuj sesję terminalową
źródło
bash-completion
, przetestowaćvim
zachowanie, a następnie ponownie zainstalowaćbash-completion
i przetestować, ale nadal napotykałem ten sam problem w obu okolicznościach. Wymienione linie nie są obecne/etc/bash.bashrc
. Ta linia jest jednak[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion