Vim komutu ile bash otomatik tamamlama


13

Bash'da, vimyolun iki dizinden daha derin olduğu komutlar verilirken yolların otomatik tamamlanması çalışmayı durdurdu ( lsve gibi diğer komutlarla beklendiği gibi çalışmaya devam eder cd).

Örneğin, ls .config/btsync/btyazıp SEKME tuşuna basarsam, genişler ls .config/btsync/btsync.conf.

Eğer vim .config/btyazıp SEKME tuşuna basarsam, 'ye genişler vim .config/btsync/.

Ancak, eğer vim .config/btsync/btTAB yazıp sonra basarsam, hiçbir şey olmaz ( yukarıdaki örnekte vim .config/btsync/btsync.confolduğu gibi genişlemesini beklerdim ls.

Kendi kullanıcı olarak çalışırken ve su olarak çalışırken aynı sorunu alıyorum.

Ben bash-completion eski sürümleri ile ilgili bir sorun bahseden bu yazı okudum ama 2.1-5 çalıştırıyorum.

GÜNCELLEME: Bazı ek testlerden sonra, kök sorununun bash'ın dosya adlarını değil, sadece dizin adlarını tamamlayacağı olduğunu fark ettim .

GÜNCELLEME: Görünüşe göre bash-completiongenel sebep budur. Kabul edilen cevap hakkındaki ikinci yorumuma bakın.

Bu davranışın potansiyel nedeni hakkında herhangi bir öneri minnetle alınacaktır!



.bashrcTalep edildiği gibi yayınladığım bağlantı .
TheRogueWolf

Nedeni keşfedildiği için, konuyla ilgili olmayan .bashrc, .aliases ve .functions fonksiyonlarına olan bağlantılar kaldırıldı.
TheRogueWolf

Debian 9'da aynı sorun, bazı kurulumlar ama hepsi değil: $
Philippe Gachoud

Yanıtlar:


10

Sizin için biraz daha araştırma yaptım ve işte bulduğum şey - otomatik tamamlamanın anahtarı bashkomut complete. Kullanmak için kuralları yazdırabilirsiniz vim:

complete -p vim

Aynı şekilde bu özel kuralları şununla kaldırabilirsiniz:

complete -r vim

Bu komut varsayılan değerlere sıfırlar - ek yollar olmadan normal yollar ve dosya adları tamamlama. Muhtemelen istediğin budur.

Daha fazla bilgi için help completeveya komutla man bashilgili bölüme bakın complete(yerleşik bir bash, bu yüzden bash man sayfasında belgelenmiştir).

Bir son nokta - Yukarıdaki değişiklikler yalnızca geçerli etkileyecek bashher giriş koymak sonra vim kurallarını kaldırmak istiyorsanız, oturumu complete -r vimadresinden Müşteri ~/.bashrc.

Umarım yardımcı olur :)


Bunu yaptı. Çok çok teşekkürler. complete -p vimDöndürülen komut complete -F _filedir_xspec vimtarafından kaldırıldı complete -r vimsorununun çözülmesinin, komuta. completeKomut ve -p anahtarının döndürdüğü bilgileri biraz okuyacağım . Bu davranışın neden değiştiğini biraz şaşırttı, bunu da araştıracak.
TheRogueWolf

3
Nihayetinde bash-tamamlama suçlu gibi görünüyor. Bu _filedir_xspecişlev /usr/share/bash-completion/bash_completionyalnızca dizinleri tamamlar. Hattı kaldırdım bash-completion, benden kaldırdım ve yeniden başlattım ve şimdi beklediğim gibi davranıyorum. complete -r vim.bashrcvim
TheRogueWolf

3

Varsayılan olarak bas, yalnızca yol ve dosya adlarını otomatik olarak tamamlar. Ancak mekanizma genişletilebilir ve bash farklı programlar için farklı otomatik tamamlama gerçekleştirmeyi öğretebilir. Örneğin git, yalnızca yol adları yerine alt komut adlarını (klonlama, kaydetme) ve düzeltmeleri otomatik olarak tamamlayabilir. Bazen kullanışlı, bazen oldukça sinir bozucu - örneğin gzip -d, .gzuzantıya sahip olmayan dosya adlarını otomatik tamamlamayı reddettiğinde .

Bash tamamlama genellikle yapılandırılır /etc/bash_completion.d- muhtemelen vimorada denilen bir dosya bulacaksınız . vimKomut satırı için otomatik tamamlama kurallarını içeren dosya budur .

Şimdi iki seçeneğiniz var:

  1. Kullanıcılar muhtemelen yine de beklediği gibi dosyayı otomatik tamamlama yollarına düzeltin.
  2. Özel vimkuralları devre dışı bırakmak ve yalnızca varsayılan yol otomatik tamamlamasını gerçekleştirmek için dosyayı kaldırın .

Ve tabii ki gelecekteki sürümlerde düzeltilmesi için sorunu özetleyen bir hata raporu dosyalayın :)


Büyük açıklama için çok teşekkürler :) Bir göz attım /etc/bash_completion.dve sadece bir hgdosya var (Mercurial için). Çok ilginç.
TheRogueWolf

1
O zaman başka bir yerde olmalı. Paketteki veya paketlerdeki /usr/share/bash-completion/tüm dosyaları deneyin veya listeleyin (ArchLinux'da nasıl çağrıldığından emin değilsiniz). Orada bir yerde olacak. vimbashbash-completion
MLu

1
bash-completionPaket şovlarından dosya listelemek /usr/share/bash-completion/completions, birçok program için kurallar içerir, ancak içermez vim. vimPaketle yüklenen dosyaları listelemek, tamamlama ile ilgili dosyaları göstermez ve tüm sistemi kullanarak arama yapmak tamamlanma ile ilgili dosyaları find / -name vimda göstermez.
TheRogueWolf

2

Belki bash tamamlamayı yeniden kurabilirsin: apt-get install --reinstall bash-completion

Ve /etc/bash.bashrc dosyasına bir göz atın: nano /etc/bash.bashrc

Ve aşağıdaki satırın iyi bir şekilde önerilmediğini doğrulayın:

if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

Ardından, terminal oturumunuzu yeniden başlatın


Kaldırmayı bash-completion, vimdavranışı test etmeyi ve sonra yeniden yüklemeyi bash-completionve test etmeyi denedim , ancak yine de her iki durumda da aynı sorunu yaşadım. Listelediğiniz satırlar mevcut değil /etc/bash.bashrc. Ancak bu hat[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
TheRogueWolf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.