Ci sono plugin di completamento automatico per vim?


11

Esiste un plug-in di completamento automatico per vim? quali sono le mie opzioni?

Al momento sto usando AutoComplPop , ma ha una cattiva integrazione con snipMate che uso e rallenta lentamente sui file Ruby (anche <100 righe).

Ho visto un paio di altri plugin, ma sono morti da almeno più di un anno. Quindi, qualche idea?


1
ACP funziona molto bene qui e non ho problemi con SnipMate. C'è un'impostazione ( let g:acp_behaviorSnipmateLength=-1vedi :help autocomplpop) che dovresti aggiungere al tuo .vimrc, l'hai aggiunta?
romainl

Risposte:


15

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 &omnifuncin 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 .vimrcconfigurazione complessa e NeoSnippet per il completamento dello snippet.

  • Una combinazione mostruosa di exuberant-ctagse 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.


6

Eccone uno carino: YouCompleteMe

YouCompleteMe che fa apparire automaticamente il menu a discesa mentre digiti e supporta la selezione fuzzy, quindi se hai un identificatore chiamato partition_findere digiti qualcosa di simile ptfdurante la modifica di un file C ++, l'elenco dei suggerimenti a discesa includerà entrambi printfe partition_finderperché contengono le stesse lettere nello stesso ordine. Se hai una variabile chiamata myBrain, puoi digitare brne ti suggerirà. YouCompleteMe dà anche la priorità ai suggerimenti in base alla frequenza di utilizzo precedente.


2

Uso neocomplcache con i frammenti snipmate + snipmate

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

puoi vedere il mio vimrc


2

Sto provando necomplecache con neosnippet Immagino che avrà una migliore integrazione in quanto entrambi sono creati dalla stessa persona


1

Credo che vim abbia un built-in chiamato OmniComplete. In modalità di inserimento utilizzare ctrl+x,ctrl+o.

Altrimenti puoi completare la parola chiave dalla modalità di inserimento con ctrl+n. Quando lo invochi, ti verrà visualizzato un menu a discesa che mostra le possibili corrispondenze di parole trovate nel file che stai modificando, così come trovate da altri file che hai aperto. Continua a colpire ctrl+nper scorrere tra le opzioni. Quando arrivi alla parola che desideri, continua a digitare normalmente.

Se non riesci a trovare la parola che desideri, ctrl+nfinirà per scorrere l'elenco e puoi continuare a digitare, oppure puoi premere ESCe quindi bcwandare ball'inizio della parola offensiva e cappendere l'ordine wa quello che volevi.


Quello incorporato di Vim sembra fare schifo. Ogni volta che premo <cx> <co> dice semplicemente "Pattern non trovato". Tuttavia, se premo <cn>, i completamenti vengono visualizzati in un menu a discesa proprio sotto la parola digitata. È la stessa cosa? C'è un modo per far apparire automaticamente il menu a discesa del completamento automatico, senza dover premere un collegamento?
trusktr,

Non sono a conoscenza di un plug-in che fa apparire il completamento automatico senza interazione, mi dispiace :(. <c-x><c-o>Funziona solo per cose che vim è stato esplicitamente detto come supportare. Per impostazione predefinita, penso che possa fare solo un paio di cose minori e cose come il completamento CSS, ma se vuoi qualcosa come Eclipse ci sono un paio di plugin
VIM

1
Ho trovato un plug-in per VIM chiamato YouCompleteMe che fa apparire automaticamente il menu a discesa durante la digitazione e supporta la selezione fuzzy, quindi se ho un identificatore chiamato partition_findere scrivo qualcosa di simile ptfdurante la modifica di un file C ++, il menu a discesa suggerirà sia printfe partition_finderperché contengono le stesse lettere nello stesso ordine. Se ho una variabile chiamata myBrain, posso digitare brne apparirà. YouCompleteMe dà anche la priorità ai suggerimenti in base alla frequenza di utilizzo precedente. Dai
trusktr

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.