Apakah mungkin untuk memiliki nama fungsi, variabel, dll. Yang dilengkapi secara otomatis saat menggunakannya untuk memprogram?

56

Banyak IDE secara otomatis melengkapi nama fungsi, variabel, nama metode, dll. Sebagai tipe pengguna. Yang terbaik melengkapi nama-nama berdasarkan pustaka built-in bahasa serta apa yang telah didefinisikan dalam file lain dari program yang sama.

Misalnya, saat saya mengetik program Python berikut:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

saluran eatFakan secara otomatis ditampilkan eatFood()sebagai opsi pelengkapan otomatis yang tersedia.

Apakah Vim memiliki kemampuan ini? Jika demikian, bagaimana saya bisa mengaktifkannya?

drs
sumber

Jawaban:

42

Ada banyak jenis autocomplete dalam vim. Salah satu cara mungkin menggunakan SuperTab . Ini memberikan cara untuk menggunakan penyelesaian tab pada waktu yang kurang lebih setiap saat. Ini akan memungkinkan Anda untuk memukul Tabsetelah Anda mengetik sebagian kata untuk mendapatkan daftar penyelesaian. Misalnya, mengetik eatFdiikuti oleh Tabuntuk memperluas keeatFood.

Harap Catatan : gambar-gambar ini semua tautan ke contoh gifs yang sedang beraksi.

penyelesaian supertab

Vim memiliki opsi lain yang luar biasa. Anda harus membaca :h ins-completionuntuk melihat berbagai opsi penyelesaian bawaan. Menggunakan vim's Ctrl- XCtrl- O, dikombinasikan dengan plugin python-aware seperti jedi dapat memberikan rasa penyelesaian. Jedi dapat dikonfigurasi untuk memberikan dokumentasi tentang penyelesaian-omni (ini adalah apa Ctrl- XCtrl- Otidak). Kemudian dokumentasi untuk kandidat yang lengkap akan muncul di jendela terpisah.

penyelesaian ctrlxctrlo

Menggunakan plugin serupa tetapi opsi yang berbeda mengarah ke semua jenis perilaku. Mungkin, misalnya, untuk tidak perlu meminta pelengkapan otomatis (jika itu yang Anda cari). Alih-alih, setelah Anda mengetik beberapa huruf (misalnya, 2 atau 3) kata, sebuah plugin dapat mencoba menawarkan secara cerdas kemungkinan penyelesaian dalam suatu menu.

masukkan deskripsi gambar di sini

Jadi jawaban singkatnya adalah ya! Tetapi proses konfigurasi bisa sedikit rumit. Saya menganggapnya sebagai langkah di tangga panjang untuk menguasai vim.

davidlowryduda
sumber
Saya sudah mencoba semuanya dan saya selalu kembali ke SuperTab, itu yang paling tidak mengganggu.
craigp
1
Saya juga sangat menyukai plugin YouCompleteMe, karena ini menyarankan Anda mengetik dan Anda dapat memilih atau mengabaikan saran. Ya, secara visual sulit untuk diabaikan, tetapi sangat tidak mengganggu dalam alur kerja saya karena membutuhkan lebih sedikit stroke kunci.
Thriveth
3
Saya telah mengubah animasi menjadi "klik", dalam arti bahwa mereka terkait dengan animasi gif.
davidlowryduda
1
Saya tidak dapat menggunakan YouCompleteMe di komputer kerja saya karena saya tidak memiliki root untuk menginstal dependensi, SuperTab sejauh ini merupakan pilihan terbaik berikutnya.
Charles Clayton
@mixedmath Dalam kasus saya, SuperTab tidak berfungsi.
alhelal
24

Fungsionalitas tersebut - yaitu, mencari file saat ini (dan semua file yang terbuka) untuk penyelesaian otomatis, harus diaktifkan secara default dengan Ctrl+P:

tangkapan layar pelengkapan otomatis sedang digunakan

Anda dapat pergi ke n ext saran dengan Ctrl+N, yang p saran revious dengan Ctrl+Pdan pilih dengan mengetikkan huruf apa saja (yang akan ditambahkan tepat setelah saran).

yo'
sumber
1
Kepada editor (Jasper): Saya lebih cenderung ingin menulis lagi sesuatu yang telah saya tulis baru-baru ini, bukan sesuatu yang akan saya tulis di masa depan atau yang ada di awal file. Oleh karena ^Pitu IMHO lebih alami. Kalau tidak, terima kasih untuk suntingan (saya harap saya mengklik tombol kanan dan Anda mendapat +2 Anda).
yo '
1
Ya, saya mendapatkan poin-poin internet imajiner itu :) Saya selalu berpikir bahwa daftar saran akan disortir berdasarkan abjad ...
Jasper
@Jasper urutan penampilan itu (setidaknya bagi saya tentu saja, lihat juga di atas: world,word,wooddan bukan sebaliknya). Jadi ^Padalah penyelesaian yang terakhir digunakan, yang sangat berguna (saya jarang melangkah lebih jauh dari 3 item dalam daftar, bahkan dalam file yang panjang).
yo '
protip:inoremap <C-Space> <C-N>
wchargin
20

Vim memiliki dukungan untuk penyelesaian secara asli. Anda dapat membaca tentang berbagai penyelesaian berbeda yang didukung oleh Vim :h ins-completion.

Secara umum, untuk semua tujuan yang saya temukan, penyelesaian-in-in cukup sesuai dengan keinginan saya, namun ada beberapa plugin penyelesaian yang menambah nilai lebih dari yang ditawarkan oleh penyelesaian-in. NeoComplete , YCM (YouCompleteMe) adalah beberapa untuk hal yang sama. Mereka lebih maju dalam arti bahwa mereka mencoba untuk menggabungkan berbagai jenis penyelesaian yang lebih akurat, dan mereka juga memiliki mekanisme caching tingkat lanjut, sehingga mereka cenderung lebih cepat. YCM bahkan bekerja dengan kompiler / utilitas eksternal untuk menyediakan IntelliSense yang lebih baik.

Dhruva Sagar
sumber
9

Ya, skrip penyelesaian otomatis untuk vim ada. Pilihan "terbaik" tergantung pada bahasa pemrograman Anda. Sebagai contoh kode Anda adalah Python, saya sarankan untuk melihat Jedi . Bangun di atas itu, Anda melengkapi saya ada, yang juga memiliki dukungan untuk bahasa lain, tetapi kadang-kadang dianggap terlalu besar. Untuk bahasa lain, Anda dapat menelusuri skrip vim yang telah ditetapkan sebelumnya .

johannes
sumber
7

Dalam mode sisipkan, ketikkan pasangan karakter pertama dari sebuah kata, lalu tekan:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Ini sangat berguna saat memasukkan nama-nama variabel dalam suatu program.

Opsi 'lengkap' mengontrol tempat kata kunci dicari (termasuk file, file tag, buffer, dan lainnya).

Opsi 'completeopt' mengontrol bagaimana penyelesaian terjadi (misalnya, apakah menu ditampilkan).

surendra nath
sumber