2011-10-17 3 views
5

C'è un tipo di completamento che non è elencato nei file della guida di vim (in particolare: insert.txt), ma che istintivamente avverto piuttosto spesso. Diciamo che ho le parole "Awesome" e "SuperCrazyAwesome" nel mio file. Trovo un'istanza di Awesome che dovrebbe essere SuperCrazyAwesome, quindi spero all'inizio della parola, inserire la modalità di inserimento e quindi digitare "SuperCrazy".completamento del codice interno in vim

Sento che dovrei essere in grado di digitare "S", creando "SCrazy", e quindi semplicemente premere un tasto di scelta rapida completamento o due per farlo trovare ciò che è a sinistra del cursore ("S"), che cosa è per il right ("Crazy"), regex questo contro tutte le parole nel file ("/ S \ w * Crazy /"), e fornirmi un menu di scelta rapida di opzioni, o semplicemente sostituire se c'è una sola corrispondenza.

Mi piacerebbe utilizzare il sistema di completamento effettivo per questo. Esiste un completamento "definito dall'utente" che utilizza una funzione e ha un buon esempio negli aiuti per la sostituzione da una determinata lista. Tuttavia, non riesco a rintracciare molti particolari che avrei bisogno di fare accadere, tra cui:

  1. Come ottengo un elenco di tutte le parole nel file da una funzione vim?
  2. Posso elencare le parole da tutti i buffer (con nomi di file), come completo di vim?
  3. In che modo, in modalità di inserimento, ottengo il testo nella parola prima/dopo il cursore?
  4. Il completamento può sostituire l'intera parola e non solo fino al cursore?

Sono stato a questo per un paio d'ore. Continuo a colpire i vicoli ciechi, come this one, che mi ha introdotto a \% # per la corrispondenza con la posizione del cursore, che non sembra funzionare per me. Ad esempio, una ricerca per \ w * \% # restituisce solo il primo carattere della parola in cui mi trovo, indipendentemente da dove mi trovo. \% # Non sembra ancorare.

+0

Non strettamente pertinente, ma è possibile ottenere alcuni suggerimenti da [questo] (http://stackoverflow.com/questions/6548541/camelcase-expansion-in-vim-like-intellij-idea/6550628#6550628) risposta. Esistono funzioni di esempio per generare un elenco di parole dal file corrente e una funzione di completamento personalizzata. Proverò a postare una risposta più tardi oggi. –

+0

Il tuo link sembra interessante e ricco di dati. Lo scaverò attraverso Grazie per l'aiuto. –

risposta

0

Sebbene non abbia seguito esattamente il metodo desiderato in passato, ho scritto https://github.com/mjbrownie/swapit che potrebbe eseguire l'attività se si cercano parole chiave correlate. Cadrebbe in questo scenario se hai centinaia di partite.

È utile principalmente per 2-10 possibili corrispondenze sequenziali.

Si potrebbe definire un elenco

: SwapList awesomes impressionante MoreAwesome SuperCrazyAwesome FullyCompletelyAwesome UnbelievablyAwesome

e muoversi attraverso le partite con i tasti incrementatore decrementor (c + a) (c + x)

Ci sono anche alcuni altri plugin di tipo ciclico come le parole di scambio che conosco su vim.org e github.

Il vantaggio è che non è necessario raggruppare le parole con espressioni regolari.

+0

Grazie per il link, Michael. Dovrò dare un'occhiata attraverso di essa. Hai visto il completamento del thesaurus roba che viene fornito con vim? Mi sono imbattuto oggi nella mia ricerca per risolvere i problemi che ho elencato. Ti consente di definire le parole correlate, penso in un file del thesaurus, e poi confrontarle con i soliti tasti di scelta rapida /. –

+0

Avevo ma non pensavo davvero di usarlo per le librerie di codice. Buona idea. È comunque possibile trovare swapit utile per il refactoring ad hoc dove si dice che si sta attraversando un file di impostazioni e si scambia SomeKeyword per AnotherKeyword per aver visto alcune ma non tutte le parole chiave. Basta impostare la lista go/Keyword e vai (c + a) ... n ... n.n..n. (C + a) quando è necessario senza dover aggiungere l'elenco al file. – michael

+0

Sembra che possa essere di grande aiuto. Grazie! –

0

Ho scritto qualcosa del genere anni fa quando lavoravo con librerie di terze parti con CamelCasePrefix piuttosto lunghi in ogni funzione diversa per ciascun componente. Ma era nell'era di Before Git Hub e l'ho considerato un gioiello perduto, ma il motore di ricerca dice che non sono un asino completo e l'ho postato su Vim wiki.

Eccolo: http://vim.wikia.com/wiki/Custom_keyword_completion

Basta che non mi chiedono che cosa significa 'MKW'. Nessuna idea.

Questo avrà bisogno di un adattamento alle vostre esigenze, in quanto sta cercando solo la parola fino al cursore, ma l'idea è lì. Funziona solo con il buffer corrente. L'iterazione di tutti i buffer sarebbe lenta poiché non crea alcun indice. Per questi scopi vorrei andare con grep esterno.