È possibile avere nomi di funzioni, variabili, ecc. Auto-complete vim quando lo si utilizza per programmare?


56

Molti IDE completano automaticamente i nomi delle funzioni, le variabili, i nomi dei metodi, ecc. Mentre l'utente digita. I migliori completano i nomi in base sia alla libreria integrata del linguaggio sia a ciò che è già stato definito in altri file dello stesso programma.

Ad esempio, mentre sto scrivendo il seguente programma Python:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

la riga eatFverrebbe automaticamente visualizzata eatFood()come opzione di completamento automatico disponibile.

Vim ha questa capacità? In tal caso, come posso abilitarlo?

Risposte:


42

Ci sono molti gusti diversi di completamento automatico in vim. Un modo potrebbe essere quello di utilizzare SuperTab . Ciò fornisce un modo per utilizzare il completamento della scheda più o meno in qualsiasi momento. Ciò ti consentirebbe di premere Tabdopo aver digitato parzialmente la parola per ottenere un elenco di completamento. Ad esempio, digitando eatFseguito da Tabper espandere aeatFood.

Nota : queste immagini sono tutte collegate ad esempi di gif in azione.

completamenti supertab

Vim ha altre eccellenti opzioni. Dovresti leggere :h ins-completionper vedere la varietà di opzioni di completamento integrate. L'uso di vim Ctrl- XCtrl- O, combinato con un plug-in compatibile con Python come jedi può dare un sapore completo. Jedi può essere configurato per fornire documentazione sull'omni-completamento (questo è ciò che Ctrl- XCtrl- Ofa). Quindi la documentazione per i candidati di completamento apparirà in una finestra divisa.

completamento ctrlxctrlo

L'uso di plugin simili ma opzioni diverse porta a comportamenti di ogni genere. È possibile, ad esempio, non dover richiedere il completamento automatico (se è quello che stai cercando). Invece, dopo aver digitato un numero di lettere (diciamo 2 o 3) di una parola, un plugin può provare a offrire in modo intelligente possibili completamenti in un menu.

inserisci qui la descrizione dell'immagine

Quindi la risposta breve è un sì! Ma il processo di configurazione può essere un po 'complicato. Lo considero un passo nella lunga scalinata per dominare Vim.


Li ho provati tutti e torno sempre a SuperTab, è il meno invadente.
Craigp

1
Mi piace molto anche il plug-in YouCompleteMe, poiché suggerisce come si digita e puoi scegliere o ignorare i suggerimenti. Sì, visivamente è difficile da ignorare, ma è molto poco invadente nel mio flusso di lavoro perché richiede meno tasti.
Thriveth

3
Ho cambiato le animazioni in "click", nel senso che sono collegate alle animazioni gif.
davidlowryduda,

1
Non riesco a utilizzare YouCompleteMe sul mio computer di lavoro perché non ho root per installare le dipendenze, SuperTab è di gran lunga la scelta migliore.
Charles Clayton,

@mixedmath Nel mio caso superTab non funziona.
alhelal,

24

Tale funzionalità, ovvero la ricerca del file corrente (e di tutti i file aperti) per il completamento automatico, deve essere abilitata per impostazione predefinita con Ctrl+P:

screenshot del completamento automatico in uso

Puoi andare al suggerimento n ext con Ctrl+N, il suggerimento p revious con Ctrl+Pe selezionarlo digitando qualsiasi lettera (che verrà aggiunta subito dopo il suggerimento).


1
All'editore (Jasper): Molto probabilmente voglio riscrivere qualcosa che ho scritto di recente, non qualcosa che scriverò in futuro o che è all'inizio del file. Pertanto ^Pè IMHO più naturale. Altrimenti grazie per la modifica (spero di aver fatto clic sul pulsante destro e hai ottenuto il tuo +2).
yo'

1
Sì, ho avuto quei punti internet immaginari :) Ho sempre pensato che l'elenco dei suggerimenti sarebbe stato ordinato alfabeticamente ...
Jasper,

L'ordine di apparizione di Jasper lo è (almeno per me certamente, vedi anche sopra: world,word,woode non viceversa). Quindi ^Pè l'ultimo completamento usato, che è molto utile (raramente vado oltre 3 elementi nell'elenco, anche in un file lungo).
yo'

protip:inoremap <C-Space> <C-N>
wchargin

20

Vim ha il supporto per il completamento nativo. Puoi leggere i vari completamenti supportati da Vim :h ins-completion.

In generale, per tutti gli scopi che ho trovato, i completamenti per ins sono sufficienti per i miei gusti, tuttavia ci sono alcuni plugin di completamento che aggiungono più valore oltre a ciò che offre i completamenti per ins. NeoComplete , YCM (YouCompleteMe) sono alcuni per lo stesso. Sono più avanzati, nel senso che cercano di combinare i diversi tipi di completamenti in modo più accurato e hanno anche meccanismi avanzati di memorizzazione nella cache, quindi tendono ad essere più veloci. YCM si spinge fino al punto di lavorare con compilatori / utility esterni per fornire IntelliSense migliore.


9

Sì, esistono script di completamento automatico per vim. La scelta "migliore" dipende dal linguaggio di programmazione. Dato che il tuo codice di esempio è Python, ti suggerisco di dare un'occhiata a Jedi . Costruisci in cima a ciò che mi completi esiste, che ha anche il supporto per altre lingue, ma a volte è visto come troppo grande. Per altre lingue è possibile sfogliare il set lungo sugli script vim .


7

Nella modalità di inserimento, digitare il primo paio di caratteri di una parola, quindi premere:

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

Ciò è particolarmente utile quando si inseriscono i nomi delle variabili in un programma.

L'opzione "completa" controlla dove vengono ricercate le parole chiave (include file, file tag, buffer e altro).

L'opzione 'completeopt' controlla come avviene il completamento (ad esempio, se viene mostrato un menu).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.