2012-08-08 13 views
8

Sono un nuovo utente di vim (gvim in windows), e ho trovato abbreviazioni un bel risparmio di tempo - tuttavia sarebbero ancora meglio se potessi interrompere lo spazio vuoto finale a volte.prevenire gli spazi vuoti finali usando le abbreviazioni di vim

ho alcune directory che uso molto, e così ho aggiunto alcune coppie abbreviazione/percorso al mio _vimrc:

:ab diR1 C:/dirA/dira/dir1/ 
:ab diR2 C:/dirA/dirb/dir2/ 

ecc ...

Ora quando si digita diR1 <space> ottengo C:/dirA/dira/dir1/[]| dove lo spazio bianco è rappresentato da [] e il cursore è il carattere |. Vorrei liberarmi dello spazio bianco [] ==.

Questa è una piccola lamentela: tuttavia sembra che tu sia in grado di personalizzare qualsiasi altra cosa in Vim, così ho pensato di chiedere: è possibile evitare gli spazi bianchi finali quando si usano le abbreviazioni in vim?

Uno strumento alternativo utilizzato in Vim è una buona risposta: il mio obiettivo è quello di salvare la riscrittura delle strutture di directory utilizzate di frequente, ma di avere il cursore a portata di mano in quanto aggiungerei quasi sempre qualcosa come myFile.txt.

Lo spazio bianco finale (senza dubbio a causa del fatto che il space innescato la sigla), che i backspace sopra prima di aggiungere myFile.txt alla fine è meno fastidioso che digitare il tutto più e più volte, ma sarebbe l'ideale se i potrebbe evitare di farlo ...

risposta

13

risposta pb2q è esattamente ciò che si desidera nel proprio scenario corrente, ma non risponde completamente alla domanda presentata nel titolo. Questo esatto problema è risolto nel file di aiuto di vim. Vedi :helpgrep Eatchar.L'esempio che dà è questo:

You can even do more complicated things. For example, to consume the space 
typed after an abbreviation: > 
    func Eatchar(pat) 
     let c = nr2char(getchar(0)) 
     return (c =~ a:pat) ? '' : c 
    endfunc 
    iabbr <silent> if if()<Left><C-R>=Eatchar('\s')<CR> 

Si potrebbe mettere la funzione Eatchar nel file ~/.vimrc e quindi utilizzare in questo modo nelle abbreviazioni:

iabbr <silent> diR1 C:/dirA/dira/dir1/<c-r>=Eatchar('\m\s\<bar>/')<cr> 

Questo sarebbe "mangiare" qualsiasi carattere spazio bianco finale o una barra. Si noti che ho utilizzato iabbr anziché solo abbr, perché è raro che le abbreviazioni in realtà vengano utilizzate in modalità riga di comando. Devi essere careful with abbreviations in command line mode poiché si espanderanno in posti inattesi come le ricerche e i comandi di input().

Per ulteriori informazioni si veda:

:h abbreviations 
:helpgrep Eatchar 
:h :helpgrep 
+0

+1. grazie è utile Lo capisco (credo) fino al bit '('\ m \ s \ | \ /')'. non sono ancora fiducioso con rebox vim. puoi spiegare per favore? – ricardo

+0

I regex di Vim hanno diversi livelli di "magia". '\ m' userà' magic' per la regex corrente. '\ |' consente alla regex di diramarsi in modo da avere uno spazio bianco ('\ s') o una barra ('/'). Vim è divertente nel fatto che molti componenti regex devono essere sfuggiti con una barra rovesciata. Se vuoi una regex più simile a Perl puoi usare '\ v \ s | /'. Il '\ v' significa molto magico e meno cose devono essere sfuggite. Si prega di notare che ho avuto un errore nella regex nel post di cui sopra. Dovrebbe essere '\ m \ s \ | /'. Anche il carattere '|' verrà interpretato in modo errato per questa mappatura e deve essere cambiato in ''. Ho corretto il mio post. –

+0

al momento, quando lo inserisco con '= Eatchar ('\ m \ s | \ /') ' ottengo il seguente errore: 'Errore rilevato durante il pricing C: \ vim \ abrevs.txt: riga 3: E35: Nessuna precedente espressione regolare' (i sorgenti il ​​mio file abbrev nel mio _vimrc). per prova ed errore ho scoperto che la rimozione di tutto seguendo '' funziona - quindi, a questo punto ho ': iabbr diR1 C:/dirA/dira/dir1/', e non ottengo lo spazio bianco al fine. – ricardo

6

Questo è possibile, senza più personalizzazione che solo abbrev.

L'abbreviazione è attivata dal carattere spazio, come sai. Lo spazio è un senza parole chiave e rimane dopo l'estensione dell'abbreviazione.

Ma ci sono altri modi per attivare l'espansione, come ad esempio altri caratteri senza parole chiave, incluso /. Quindi, se, invece di definire le abbreviazioni in questo modo:

:ab diR1 C:/dirA/dira/dir1 

Cioè, senza il separatore di percorso finale, quindi è possibile digitare diR1/, hanno l'abbreviazione espandere per voi a causa della barra /, e continuare a digitare, accodando al tuo percorso con un nome di file.

In alternativa, è possibile forzare l'espansione delle abbreviazioni utilizzando Ctrl-]. Cioè, digitare l'abbreviazione: diR1, senza spazio seguente o altro carattere senza parole chiave, quindi digitare Ctrl-]. L'abbreviazione verrà espansa e rimarrai in modalità di inserimento e potrai aggiungere il nome del file al percorso espanso.

Check out :help abbreviations, potrebbe esserci qualcos'altro utile per te lì, comprese le costruzioni più complicate per sempre consumo ad es. il carattere dello spazio che ha attivato l'abbreviazione.

+0

meraviglioso. ho regolato la mia abbreviazione e ora la faccio scattare con '/'. Sono sicuro che userò anche il metodo 'Ctrl-]' a volte pure, per altre abbreviazioni. Devo aver perso questi pezzetti di documenti. Grazie molto. – ricardo

0

Invece di abbreviazioni, è possibile utilizzare mappature. Stanno ampliato al più presto di aver digitato l'ultimo carattere della mappatura, quindi non ci sarà uno spazio finale:

:inoremap diR1 c:/dirA/dira/dir1 

Lo svantaggio di questo approccio è che le lettere digitate, mentre una mappatura potrebbe essere espanso non vengono visualizzati fino al completamento della mappatura. Questo richiede un po 'di solito usato.

Problemi correlati