Questa è una vecchia domanda, ma continuo a ritornarci ogni tanto con un barlume di speranza sbiadita, pensando che un giorno troverò la giusta combinazione di plugin per darmi il completamento automatico perfetto in Vim. La ricerca continua, ma questa è tutta la ricerca che ho fatto nel corso di diversi anni.
Prima di tutto, devi capire che Vim è un editor di testo, non un editor di codice. Editor di codice, IDES, sono strumenti come la suite di strumenti Jetbrains, Visual Studio Code, Eclipse, ecc.
Fondamentalmente Vim non può "completare automaticamente" il codice con precisione. Il completamento automatico richiede l'introspezione del codice sorgente e l'analisi dell'AST. Considera che Vim non potrebbe eseguire operazioni asincrone fino a quando Vim 8 non è stato rilasciato nel 2016, quindi provare a eseguire qualsiasi tipo di software di introspezione di codice in un plug-in Vim sarebbe un incubo. È inserito nella storia dell'ecosistema Vim per non farlo. E tutti quelli che cercano di farlo, come Tern For Vim, sono davvero incubi da usare.
Il meglio che un editor di testo può fare è snippet e completare le stesse parole / righe / ecc. Di cui è a conoscenza. Se stai cercando di completare automaticamente il codice, dovresti usare un editor di codice, non un editor di testo.
Queste sono le tue opzioni, di cui ho provato tutte:
Due utili scorciatoie da tastiera sono Ctrl- n, che completerà automaticamente una parola basata solo sui buffer correnti che hai aperto (nessuna introspezione di codice), e Ctrl- xCtrl- lche completerà automaticamente una riga completa di codice se vuoi duplicarne una. Probabilmente sai Ctrl- xCtrl- f, che completerà automaticamente un nome di file incluso il percorso, relativamente alla corrente :pwd
. Il plug -in completo di pattern può essere leggermente utile se non esegui una ricerca /\v
.
Costruito in Vim " Omnicompletion " attivato da Ctrl- x, Ctrl- o(questo è ciò che gli autori di Vim vogliono che tu scriva ogni volta) insieme a un gruppo di plugin specifici per la lingua , se esistono. Puoi :echo &omnifunc
in un file per vedere se Omimompletion è già configurato da Vim nel tuo file preferito.
AutoComplPop per l'apertura automatica del menu Omnicompletion sopra riportato durante la digitazione.
SuperTab che ti consente di premere Tabper attivare il completamento integrato di Vim.
NeoComplCache che è il completamento della parola chiave (non è specificato come sia diverso dal completamento incorporato di Vim), una .vimrc
configurazione complessa e NeoSnippet per il completamento dello snippet.
Una combinazione mostruosa di exuberant-ctags
e DoctorJS
(un progetto Mozilla che è morto da un anno), TagBar e un oggetto cresciuto in casa per estrarre il completamento dai file dei tag.
SnipMate , un plug-in di completamento del tag di base, insieme a frammenti , e scopri da solo come aggiungere frammenti, poiché è un po 'complicato.
UltiSnips insieme a UltiSnips-Snippet che sono diversi dai frammenti precedenti.
Tern per Vim , una libreria promettente che esegue la vera introspezione del codice per ottenere il completamento automatico corretto. Tuttavia è difettoso, molto lento, ha perdite di memoria che causeranno l'arresto anomalo di Vim e probabilmente è un servizio di abbandono.
YouCompleteMe , un completamento fuzzy durante la digitazione che esegue un server in background, insieme a una funzione cresciuta in casa per il completamento dello snippet.
Eclim - un nobile tentativo di eseguire un server Eclipse in background e dire a Vim i completamenti automatici che si intromette al volo. Funziona così come Tern.
Infine, Closetag o delimitMate o autoclose o un bananagram cresciuto in casa per la chiusura automatica di tag e parentesi automaticamente durante la digitazione.
Quasi ogni plug-in in questo elenco entrerà in conflitto con quasi tutti gli altri plug-in in questo elenco.
YouCompleteMe sembra essere il leader del pacchetto, ma non sono mai stato in grado di farlo funzionare correttamente con il completamento del tag, e il suo completamento del codice-introspezione deve ancora dimostrarsi potente.
La mia opinione personale è che lo stato attuale del mondo del completamento automatico di Vim sia in cattive condizioni. Per i piccoli progetti potresti andare bene utilizzando una delle soluzioni di cui sopra. Se hai a che fare con una semplice API che puoi tenere per lo più nella tua testa, il completamento senza introspezione di codice probabilmente andrà bene. Se hai a che fare con un progetto di grandi dimensioni o hai bisogno del vantaggio della sicurezza dei tipi durante la programmazione, un IDE completo ( Eclipse , Visual Studio , WebStorm ) si adatterà molto meglio di Vim.
L'aspetto negativo di un IDE, ovviamente, è che non avrai più il potere di Vim nelle tue mani. Non ho usato un singolo IDE che abbia una modalità Vim accettabile.
Vim ha una moderata propensione al linguaggio verso linguaggi tipo C non tipizzati, e altrimenti ha l'aspettativa che qualsiasi funzionalità specifica del linguaggio verrà aggiunta dagli utenti come plugin. Sfortunatamente, questo ha portato a un ecosistema di completamento automatico frammentato. Alcune opzioni sono decenti, ma nulla è perfetto e raramente esiste un leader di maggioranza / best practice.
let g:acp_behaviorSnipmateLength=-1
vedi:help autocomplpop
) che dovresti aggiungere al tuo .vimrc, l'hai aggiunta?