2010-07-23 17 views
10

Gibt es eine Möglichkeit, VIM mitzuteilen, dass der Cursor an einer bestimmten Stelle nach der Abkürzung steht? Sagen Sie so etwas wie dies in .gvimrcCursorposition in VIM-Abkürzung

iabberv <? <?=|?> 

haben und Sie möchten Cursor platzieren, wo Pipe-Zeichen automatisch ist.

Antwort

10

Eine schnelle Lösung, die ich in diesem Fall verwenden würde, ist es, einige Tastendrücke auf die Abkürzung einzufügen:

iabbrev <? <?=?><Left><Left> 

würde die Cursor zwei Plätze links Platz, nach den =.

Auf diese Weise können Sie verschiedene Bewegungstasten wie <End>, <Home> oder sogar wieder in den normalen Modus mit <Esc> und Befehl üblichen Normal-Mode-Befehle verwenden. Das Beispiel wäre dann

iabbrev <? <?=?><Esc>hha 

und es tut das gleiche wie das erste Beispiel. Wenn Sie eine Abkürzung mit Leerzeichen erweitern, wird ein zusätzliches Leerzeichen angezeigt. , die Sie loswerden können, indem Sie in der Abkürzung <BS> (Backspace) verwenden. Oder erweitern Sie mit <C-]>, die keinen Platz lassen wird.

Korrektur: da die Abkürzung erste erweitert wird, und danach den Raum eingeführt wird, müssen Sie eine kleine Funktion in der Hilfe (map.txt) gefunden:

func Eatchar(pat) 
    let c = nr2char(getchar(0))  
    return (c =~ a:pat) ? '' : c  
endfunc 

Das beste in .vimrc gestellt wird. Jetzt wird die folgende Abkürzung arbeitet voll als intented:

:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR> 

Es ist ein bisschen chaotisch, aber hat einen externen Funktionsaufruf, der den Leerraum entfernt und es sollte gut funktionieren.

" 
" in {rtp}/ftpluvin/vim/vim_snippets.vim 
inoreab <buffer> <silent> if  
     \ <C-R>=InsertSeq('if', 'if!cursorhere!\nendif!mark!')<CR> 

Andere Plugins bieten eine ähnliche Funktion:

+0

Ich versuchte iabbrev HHA aber es löscht Zeichen "=" :) wo soll ich Stelle setzen? Es ist genau das, was ich will, außer diesem Problem. – ivan73

+0

Es tut mir wirklich leid, die '' -Funktion vor dem Antworten nicht zu testen. Ich habe in einem geeigneten Workaround bearbeitet. – progo

+0

Cool, es funktioniert, diese Antwort zu akzeptieren :) ich es so bin mit: 'iabbrev HHA = Eatchar ('\ n') ' – ivan73

4

Was Sie wollen, sind Schnipsel. Ich benutze snipmate dafür.

+0

abstimmen, vielen Dank für Spitze Daenyth – ivan73

+0

Sie einen Blick darauf werfen sollte auf [UltiSnips] (https://github.com/SirVer/ultisnips), es ist einfach großartig! – aymericbeaumet

Verwandte Themen