2009-05-19 18 views

risposta

35

È possibile mappare la coppia di apertura a proprio piacimento:

:imap (()<left> 
+4

I plug-in menzionati nelle altre risposte hanno il vantaggio di comportarsi in modo "intelligente" quando si digita la chiusura corrispondente ")". Se questo non è necessario, allora andrei anche con la mappa forward straigt. – user55400

+0

Alcuni plugin anche: - non espandersi all'interno di contesti di commenti e stringhe, - definire un modo per circondare la selezione con una coppia di parentesi, - inserire un segnaposto/marcatore per saltare oltre la parentesi di chiusura (che è coerente con la maggior parte plug-in di espansione di snippet/template). –

+0

C'è un modo per farlo solo alla fine di una linea? A volte è più fastidioso che utile ma con questo, lo userei volentieri ... – alexpinho98

31

Provare a usare AutoClose plugin.

+8

Da non confondere con l'altro, meno aggressivo (e meno fastidioso, IMO), [AutoClose] (http: //www.vim. org/scripts/script.php? script_id = 2009) di Thiago Alves. –

+2

@AndrewMarshall +1, la versione elencata è molto meno fastidiosa. Sono venuto qui cercando un'alternativa a quella nella risposta di Mykola a causa delle sue stranezze. –

+0

FYI, Questo plugin sembra funzionare bene ma per me ha introdotto il comportamento "laggy" ''. Quindi evita se ti importa di questo. –

8

Ci sono molti suggerimenti e plugin sull'argomento. Dai uno sguardo allo relevant entry nel sito di vimtips.

11

avevo bisogno di uno troppo, e ho già provato alcuni dei plug-in:

AutoClose, http://www.vim.org/scripts/script.php?script_id=1849, è un po 'aggressivo.

coppie semplici, http://www.vim.org/scripts/script.php?script_id=2339, dipende da Python. Se sei su Linux non è un problema, ma su Windows può essere un problema abbinare la versione di Vim all'interprete Python che hai.

Il mio consiglio sarebbe ClosePairs, che potete trovare a http://www.vim.org/scripts/script.php?script_id=2373 che ha funzionato perfettamente per me. È semplice e utile

1

C'è un problema con l'utilizzo di questo (tramite l'imap o uno degli script). Non sarà possibile ripetere la modifica completa utilizzando il comando ..

e.g. (foo) with . only gets you foo, without the brackets.

Funziona bene se si inserisce le staffe normalmente, come due caratteri.

13

La risposta più semplice è includere una mappa. Ad esempio .:

:inoremap (()<left> 

Il problema è che si avrebbe bisogno di aggiungere una voce per ogni simbolo che si desidera automaticamente chiuso ('{', '[', '"', etc). Inoltre, i plugin sono normalmente più intelligenti, fornendo cose come rilevare il carattere "chiusura" e non ripeterlo.

il problema con la soluzione di cui sopra e maggior plugin, è che essi tendono rompere la sequenza di annullamento (gundo chiunque?), come spiegato in :help ins-special-special .

Ecco la lista dei plugin che fa quello che si chiede (da vimtips):

  • delimitMate da Israele Chauca Fuentes (configurabile, e non si rompe undo/redo/ripetere, ma - rompere iabbr) anche su GitHub
  • AutoClose da Karl Guertin (auto-chiude caratteri hard-coded specifici, ma non si rompe undo/redo/ripetizione)
  • AutoClose di Thiago Alves (configurabile, ma si rompe undo/redo/ripetizione)
  • auto-pairs Pairs Auto di Miao Jiang (configurabile, ma si rompe undo/redo/ripetizione)
  • ClosePairs di Edoardo Vacchi (configurabile, ma si rompe undo/redo/ripetizione)
  • smartinput da Kana Natsuno (configurabile, ma si rompe undo/redo/repeat)

Inoltre vimtips, c'è another nice explanation of the issue sul web.

+2

Per chiunque altro lo trovi in ​​futuro, ho appena iniziato a utilizzare coppie di auto e, a meno che non comprenda la terminologia errata, non ha infranto il mio annullamento o la cronologia. Il migliore di questa lista! Gestisce anche l'eliminazione di coppie su backspace! – Lethjakman

+0

Quale versione di Vim? L'ultima volta che ho controllato non c'era ancora una soluzione che permettesse di annullare/ripetere/ripetere il lavoro correttamente con la chiusura automatica in Vim 7.4 e successivi. Alcuni plug-in hanno avuto un attacco usando setline() che ha funzionato nelle precedenti versioni di Vim. – Ben

5

Attualmente sto usando auto-pairs e funziona abbastanza bene.

I problemi del plugin che interrompono undo/redo/repeat sembrano persistere tra alcuni dei plug-in elencati sopra, ma non penso che sia un gran problema (beh, almeno non per me al momento).

Solo un avvertimento però, non ero in grado di utilizzare: helptags per generare il file di aiuto con questo plugin come al momento di scrivere questo.

0

C'è un nuovo plugin per cohama:

lexima.vim (github)

(non ancora in vim.org)

Questo plugin supporta il comando .!
Afaik, questo è l'unico plugin che supporta questo.

Anche la sequenza di annullamento/ripetizione funziona.

Problemi correlati