Bagaimana cara membuat Vim melakukan penyelesaian tab normal (seperti Bash) untuk nama file?


289

Ketika saya membuka file baru di Vim dan saya menggunakan penyelesaian tab, itu menyelesaikan seluruh nama file alih-alih melakukan pencocokan sebagian seperti yang dilakukan Bash. Apakah ada opsi untuk membuat penyelesaian nama tab file ini lebih berfungsi seperti Bash?


10
Secara teknis, saya cukup yakin "bash" tidak menyelesaikan tab. Ini readline yang melakukan itu.
Maxy-B

2
Kita berbicara tentang menyesuaikan perilaku fitur ^ X ^ F?
BrunoJCM

Jawaban:


413

Saya pribadi menggunakan

set wildmode=longest,list,full
set wildmenu

Ketika Anda mengetik tab hit pertama, itu akan menyelesaikan sebanyak mungkin. Tab hit kedua akan memberikan daftar. Tab ketiga dan selanjutnya akan menggilir opsi penyelesaian sehingga Anda dapat menyelesaikan file tanpa kunci lebih lanjut.

Seperti Bash akan adil

set wildmode=longest,list 

tetapi penuh sangat berguna.


1
Saya berharap ini adalah perilaku default di vim. Saya pikir tidak ada penyelesaian tab lengkap sampai saya melihat posting ini.
Neha Karanjkar

6
@NehaKaranjkar Saya sarankan memelihara arsip dotfiles untuk membuatnya mudah digunakan di lingkungan baru
michael

2
Apakah ada cara untuk mulai penuh hanya ketika ada beberapa hasil? sesuatu seperti set wildmode=longest,5full,list. Dengan hasil banyak penuh tidak berguna tetapi sangat berguna dengan sedikit. Ini akan sempurna dengan sesuatu seperti "tunjukkan penuh hanya jika penyelesaiannya cocok pada satu layar baris"
albfan

1
Ini dulu berfungsi di masa lalu (gVim / ubuntu) tapi sekarang tidak (macvim8.x / macOS). Lihat contoh . Ada ide?
Paschalis

1
Setelah mentolerir penyelesaian tab asal selama 2 bulan, saya pikir harus ada cara untuk menyederhanakannya. Terima kasih.
ramwin

23

Perilaku terdekat dengan penyelesaian Bash seharusnya

set wildmode=longest:full,full

Dengan beberapa karakter yang diketik, menekan tab sekali akan memberikan semua kecocokan tersedia di wildmenu. Ini berbeda dengan jawaban oleh Michael yang membuka jendela seperti perbaikan cepat di bawah baris perintah.

Kemudian Anda dapat terus mengetik sisa karakter atau tekan lagi tab untuk melengkapi otomatis dengan pasangan pertama dan lingkari itu.


Saya rasa saya lebih suka cara ini.
Eddy Ekofo

8

Jika Anda tidak ingin mengatur wildmenu, Anda selalu dapat menekan Ctrl+ Lketika Anda ingin membuka file. Ctrl+ Lakan melengkapi nama file seperti selesai Bash.


Ctrl-L tidak bertindak seperti bash autocomplete. Itu tidak menggilir semua opsi yang mungkin.
raine

2
Pesta saya tidak bertindak seperti itu. <Tab>menyelesaikan string saat ini sejauh dimungkinkan (seperti CTRL-Ldi Vim) dan <Tab><Tab>menunjukkan daftar kemungkinan yang cocok (seperti CTRL-Ddi Vim).
glts

8

Terlepas dari wildmode / wildmenu yang disarankan, Vim juga menawarkan opsi untuk menampilkan semua kemungkinan penyelesaian dengan menggunakan Ctrl+ D. Ini mungkin bermanfaat untuk beberapa pengguna yang menemukan pertanyaan ini ketika mencari opsi pelengkapan otomatis yang berbeda di Vim seperti yang saya lakukan.


4

Saya berasumsi bahwa Anda menggunakan pelengkapan otomatis di Vim via Ctrl+ Nuntuk mencari melalui buffer saat ini. Ketika Anda menggunakan perintah ini, Anda mendapatkan daftar solusi; cukup ulangi perintah untuk pergi ke item berikutnya dalam daftar. Hal yang sama berlaku untuk semua perintah pelengkapan otomatis. Sementara mereka mengisi seluruh kata, Anda dapat terus menelusuri daftar sampai Anda tiba di kata yang ingin Anda gunakan.

Ini mungkin perintah yang lebih berguna: Ctrl+ P. Satu-satunya perbedaan adalah bahwa Ctrl+ Pmencari mundur di buffer sementara Ctrl+ Nmencari ke depan ... Secara realistis, keduanya akan memberikan daftar dengan elemen yang sama, dan mereka mungkin muncul dalam urutan yang berbeda.


0

Coba gunakan :set wildmenu. Terlepas dari itu, saya tidak yakin apa yang sebenarnya Anda coba.

Oh, ya, dan mungkin coba tautan ini: tautan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.