Domanda

Recentemente ho iniziato a utilizzare Vim come editor di testo e attualmente sto lavorando sulle mie personalizzazioni.

Suppongo che le mappature della tastiera possano fare praticamente qualsiasi cosa, ma per il momento le sto usando quasi esclusivamente come una sorta di strumento per gli snippet.

Quindi, ad esempio, se scrivo def{TAB} (:imap def{TAB} def ():<ESC>3ha), si espande in:

def |(): # '|' represents the caret

Funziona come previsto, ma trovo fastidioso quando Vim attende un comando completo mentre sto digitando una parola contenente "def" e non sono interessato ad espanderla.

  • C'è un modo per evitarlo o utilizzare questa funzione in modo più efficace a tal fine?
  • C'è qualche altra funzionalità di Vim più adatta a questo?

Dopo aver dato una rapida occhiata a SnippetsEmu, sembra che sia l'opzione migliore e molto più semplice da personalizzare di quanto pensassi inizialmente.

Per continuare con l'esempio precedente:

:Snippet def <{}>():

Una volta definito, puoi espandere il tuo snippet digitando def{TAB}.

È stato utile?

Soluzione

SnippetsEmu è un utile plugin per gli snippet.

Altri suggerimenti

Snipmate - come texmate :)http://www.vim.org/scripts/script.php?script_id=2540

video:http://vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}

Come altro suggerimento (anche se leggermente diverso) utilizzando la funzionalità integrata di vim:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

Ora ogni volta che digiti def seguito da uno spazio o da un altro carattere non verbale, si espanderà come quello che hai fornito come output di SnippetsEmu (lo spazio proviene dallo spazio che hai inserito per attivare il completamento).

Questo approccio non soffre del problema di "ritardo" riscontrato utilizzando :inoremap ed è integrato in vim.Per ulteriori informazioni su questa funzionalità, vedere :help abbrev.

Potresti essere preoccupato che essere attivato dallo spazio e non dalla scheda si attiverà inutilmente, ma in generale vim è piuttosto intelligente su quando attivarlo.Il problema può essere ulteriormente mitigato abilitando l'abbreviazione solo per determinati tipi di file (ad esempio Python):

au filetype python :iabbrev ... etc

Naturalmente anche Snip[ets] (Manager|Emu|Mate|.vim) è una soluzione perfetta, ma è bello essere consapevoli delle alternative (specialmente quando sono integrate).

Se SnippetsEmu è troppo pesante o ambizioso per quello che ti serve (lo era per me), ho scritto un plugin che gestisce gli snippet in base al tipo di file.Ha anche il completamento tramite scheda quando si seleziona lo snippet!:)

Prendilo qui: snippets.vim

Ho appena installato UltiSnips.C'è un buon articolo che spiega perché potresti scegliere UltiSnips: Perché UltiSnip?

Non ho utilizzato nessuno degli altri plugin di snippet;Ho deciso di fare il grande passo con uno che sembrava completo di tutte le funzionalità e che sarebbe stato in grado di accontentarmi man mano che acquisivo più competenze su Vim e volevo fare cose più sofisticate.

Come notato da MDCore, SnippetsEmu è un popolare script Vim che fa proprio questo e altro ancora.Se hai bisogno solo di espandere (senza spostare indietro il cursore), puoi usare lo standard :ab[breviate] comando.

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top