È possibile avere nomi di funzioni, variabili, ecc. Di completamento automatico di vim quando lo si utilizza per programmare?

Molti IDE completano automaticamente nomi di funzioni, variabili, nomi di metodi, ecc. mentre lutente digita. I migliori completano i nomi in base sia alla libreria incorporata nella lingua che a quanto è già stato definito in altri file dello stesso programma.

Ad esempio, mentre sto digitando quanto segue Programma Python:

hungy = True def eatFood(food): pass if hungry: eatF 

la riga eatF mostrerebbe automaticamente eatFood() come opzione di completamento automatico disponibile.

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

Risposta

Ci sono molti diversi tipi di completamento automatico in vim. Un modo potrebbe essere utilizzare SuperTab . Ciò fornisce un modo per utilizzare il completamento tramite tabulazione più o meno in qualsiasi momento. Ciò ti consentirebbe di premere Tab dopo aver digitato parzialmente la parola per ottenere un elenco di completamento. Ad esempio, digitando eatF seguito da Tab per espandere in eatFood.

Nota : tutte queste immagini rimandano a gif di esempio in azione.

mg src = “https://i.stack.imgur.com/dVuOT.png” alt = “supertab completions” title = “Fai clic per vedere una gif”>

Vim ha altre eccellenti opzioni. Dovresti leggere :h ins-completion per vedere la varietà di opzioni di completamento integrate. Utilizzando vim “s CtrlX Ctrl O , combinato con un plugin compatibile con python come jedi può dare un sapore di completamento. Jedi può essere configurato per fornire documentazione sullomni-completamento (questo è ciò che fa CtrlX Ctrl O ). Quindi la documentazione per i candidati al completamento verrà visualizzata in una finestra divisa.

mg src = “https://i.stack.imgur.com/etSIu.png” alt = “ctrlxctrlo completamento” title = “Fai clic per vedere una gif”>

Lutilizzo di plug-in simili ma opzioni diverse porta a tutti i tipi di comportamenti. Ad esempio, è possibile non richiedere il completamento automatico (se questo è ciò che stai cercando). Invece, dopo aver digitato un certo numero di lettere (ad esempio 2 o 3) di una parola, un plugin può cerca di offrire in modo intelligente possibili completamenti in un menu.

mg src = “https://i.stack.imgur.com/gtNK0.png” alt = ” inserisci qui la descrizione dellimmagine “title =” Fai clic per vedere una gif “>

Quindi la risposta breve è un sì! Ma il processo di configurazione può essere un po complicato. Lo considero un passo nella lunga scalinata verso la padronanza di vim.

Commenti

  • Io ‘ li ho provati tutti e torno sempre a SuperTab, ‘ è il meno invadente.
  • Mi piace molto anche il plug-in YouCompleteMe, in quanto suggerisce durante la digitazione e puoi scegliere o ignorare i suggerimenti. Sì, visivamente è difficile da ignorare, ma è molto poco invadente nel mio flusso di lavoro perché requi risulti meno battute.
  • ‘ ho modificato le animazioni in ” al clic “, nel senso che sono collegati alle animazioni gif.
  • Non posso ‘ utilizzare YouCompleteMe sul mio computer di lavoro perché don ‘ t avere root per installare le dipendenze, SuperTab è di gran lunga la scelta migliore successiva.
  • @mixedmath Nel mio caso superTab non ‘ t funziona.

Answer

Tale funzionalità, ad esempio, la ricerca nel file corrente ( e tutti i file aperti) per il completamento automatico, dovrebbe essere abilitato per impostazione predefinita con Ctrl+P:

screenshot del completamento automatico in uso

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

Commenti

  • Alleditore (Jasper): è più probabile che voglia scrivere di nuovo qualcosa che ho scritto di recente, non qualcosa che ‘ scriverò in futuro o che si trova allinizio del file. Pertanto ^P è più naturale IMHO. Altrimenti grazie per la modifica (spero di aver cliccato sul pulsante giusto e hai ottenuto il tuo +2).
  • Sì, ho avuto quegli internet point immaginari 🙂 Ho sempre pensato che lelenco dei suggerimenti sarebbe stato ordinato alfabeticamente. ..
  • @Jasper lordine di apparizione è (almeno per me certamente, vedi anche sopra: world,word,wood e non viceversa).Quindi ^P è lultimo completamento utilizzato, il che è molto utile (raramente vado oltre 3 elementi nellelenco, anche in un file lungo).
  • protip : inoremap <C-Space> <C-N>

Risposta

Vim supporta il completamento in modo nativo . Puoi leggere i vari diversi completamenti supportati da Vim su :h ins-completion.

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

Answer

Sì, script di completamento automatico per vim esistono. La scelta “migliore” dipende dal tuo linguaggio di programmazione. Poiché il tuo codice di esempio è Python, ti suggerisco di dare unocchiata a Jedi . Costruisci sulla base di questo You complete me , che supporta anche altre lingue, ma a volte è visto come troppo grande. Per altre lingue puoi sfogliare il set lungo in script vim .

Risposta

In modalità di inserimento, digita i primi due caratteri di una parola, quindi premi:

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

Ciò è particolarmente utile quando inserisci nomi di variabili in un programma.

Lopzione “complete” controlla dove vengono cercate le parole chiave (include file, file di tag, buffer e altro).

Lopzione “completeopt” controlla come avviene il completamento (ad esempio, se viene visualizzato un menu).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *