Di bash, pelengkapan otomatis lintasan baru-baru ini berhenti bekerja ketika mengeluarkan vim
perintah di mana lintasan lebih dalam dari dua direktori (ini terus bekerja seperti yang diharapkan dengan perintah lain, seperti ls
dan cd
).
Misalnya, jika saya mengetik ls .config/btsync/bt
dan kemudian tekan TAB, itu akan diperluas ke ls .config/btsync/btsync.conf
.
Jika saya mengetik vim .config/bt
dan kemudian tekan TAB, itu diperluas ke vim .config/btsync/
.
Namun, jika saya mengetik vim .config/btsync/bt
dan kemudian menekan TAB, tidak ada yang terjadi (saya akan berharap itu meluas ke vim .config/btsync/btsync.conf
, seperti pada ls
contoh, di atas.
Saya mendapatkan masalah yang sama saat berjalan sebagai pengguna saya sendiri dan ketika berjalan sebagai su.
Saya membaca posting ini yang menyebutkan masalah dengan versi lama dari penyelesaian-bash tetapi saya menjalankan 2.1-5.
UPDATE: Setelah beberapa pengujian tambahan, saya menemukan bahwa masalah root adalah bahwa bash hanya akan melengkapi nama direktori, bukan nama file.
UPDATE: Ternyata itulah bash-completion
penyebab keseluruhannya. Lihat komentar kedua saya pada jawaban yang diterima.
Setiap saran tentang kemungkinan penyebab perilaku ini akan diterima dengan penuh rasa syukur!
sumber
.bashrc
!.bashrc
posting saya , sesuai permintaan.Jawaban:
Saya melakukan riset lebih lanjut untuk Anda dan inilah yang saya temukan - kunci untuk pelengkapan otomatis adalah
bash
perintahnyacomplete
. Anda dapat mencetak aturan untukvim
menggunakan:Anda juga dapat menghapus aturan khusus ini dengan:
Perintah ini mengatur ulang ke default - jalur yang biasa dan nama file selesai tanpa logika tambahan. Mungkin itu yang Anda inginkan.
Untuk info lebih lanjut, periksa
help complete
atauman bash
cari bagian tentangcomplete
perintah (ini adalah built-in bash, karenanya didokumentasikan dalam manual bash).Satu titik terakhir - perubahan di atas hanya memengaruhi
bash
sesi saat ini , jika Anda ingin menghapus aturan vim setelah setiap login memasukkancomplete -r vim
ke Anda~/.bashrc
.Semoga itu bisa membantu :)
sumber
complete -p vim
perintah kembalicomplete -F _filedir_xspec vim
yang telah dihapus olehcomplete -r vim
perintah, menyelesaikan masalah. Saya akan melakukan beberapa pembacaan padacomplete
perintah dan informasi yang dikembalikan oleh -p switch. Agak bingung mengapa perilaku ini berubah jadi akan menyelidiki itu juga._filedir_xspec
fungsi dalam/usr/share/bash-completion/bash_completion
hanya melengkapi direktori. Saya telah mencopot pemasanganbash-completion
, menghapuscomplete -r vim
saluran dari saya.bashrc
dan mem-boot ulang danvim
sekarang berperilaku seperti yang diharapkan.Bash secara default hanya akan melengkapi jalur dan nama file. Namun mekanisme ini dapat diperpanjang dan bash dapat diajarkan untuk melakukan pelengkapan otomatis yang berbeda untuk program yang berbeda. Misalnya untuk
git
itu dapat secara otomatis melengkapi nama-nama sub-perintah (klon, komit) dan revisi bukan hanya nama path. Kadang-kadang berguna, kadang-kadang cukup menjengkelkan - misalnya ketikagzip -d
menolak untuk melengkapi nama file yang tidak memiliki.gz
ekstensi.Penyelesaian Bash biasanya dikonfigurasi dalam
/etc/bash_completion.d
- Anda mungkin akan menemukan file yang dipanggilvim
di sana. Itu file yang berisi aturan pelengkapan otomatis untukvim
commandline.Sekarang Anda punya dua opsi:
vim
aturan khusus dan hanya melakukan penyelesaian otomatis jalur default.Dan tentu saja, laporkan laporan bug yang menguraikan masalah sehingga diperbaiki di versi mendatang :)
sumber
/etc/bash_completion.d
dan hanya adahg
hadiah file (untuk Mercurial). Sangat aneh./usr/share/bash-completion/
atau daftarkan semua file darivim
paket atau daribash
ataubash-completion
paket (tidak yakin bagaimana itu disebut pada ArchLinux). Itu akan ada di suatu tempat.bash-completion
paket menunjukkan/usr/share/bash-completion/completions
memang berisi aturan untuk banyak program, tetapi tidakvim
. Mendaftar file yang diinstal denganvim
paket tidak menunjukkan file terkait penyelesaian dan mencari seluruh sistem menggunakanfind / -name vim
juga tidak menunjukkan file terkait penyelesaian.Mungkin Anda dapat menginstal ulang bash-completion:
apt-get install --reinstall bash-completion
Dan lihat file /etc/bash.bashrc:
nano /etc/bash.bashrc
Dan verifikasi bahwa baris berikut tidak dikomentari dengan baik:
Kemudian, mulai kembali sesi terminal Anda
sumber
bash-completion
, mengujivim
perilaku dan kemudian menginstal ulangbash-completion
dan menguji tetapi saya masih mengalami masalah yang sama di kedua keadaan tersebut. Baris yang Anda daftarkan tidak ada di/etc/bash.bashrc
. Namun, baris ini[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion