2016-06-02 2 views
2

Wie die meisten vim Benutzer, ich habe eine Bequemlichkeit <Esc> AbkürzungVim: Vermeiden von rekursiven <Esc> Abkürzung

:nnoremap ;j <Esc> 

aber jetzt habe ich das folgende Szenario: Ich habe eine Funktion, die eine if statement in mein Dokument einfügt:

autocmd FileType c nnoremap <localleader>si :call RemapTabC()<CR>iif()<CR>{<CR>}<Esc>--f)i 

RemapTabC() sieht wie folgt aus:

function RemapTabC() 
    inoremap <buffer> <Tab> <Esc>:call UnmapTab()<CR>jo 
    inoremap <buffer> <Esc> <Esc>:call UnmapTab() 
endfunction 

Und ich denke der Fehler sollte offensichtlich sein. Ich verwende <localleader>si, und die Vorlage wird angezeigt. Mein Cursor befindet sich in der Bedingungsklausel. Jetzt gebe ich ein, was ich will, und jetzt habe ich zwei Möglichkeiten:

  1. Ich klicke Tab. Funktioniert gut, setzt meinen Cursor in den Körper der if-Anweisung.
  2. Ich klicke Esc. Funktioniert auch gut, ABER jetzt, wenn ich meine Remap ;j verwenden, weil es direkt auf <Esc>, anstatt auf meine neu zugeordnet <Esc> zuordnen wird.

Ich könnte nur meine nnoremap ;j <Esc> rekursiv machen, aber ich habe wirklich Angst davor, es zu verwüsten. Habe ich noch andere Möglichkeiten?

+0

': 1s/most/some' – romainl

Antwort

1

Sie können stattdessen versuchen, für InsertLeave Ereignis statt mit <esc> zu hören.

Sie können auch <tab> immer aktiv und bereit, zum nächsten Platzhalter springen - und ja, am Ende, Sie definieren, was mehrere "große" Plugins bereits definiert haben.

+0

Ich weiß, aber es ist mehr eine Lernerfahrung. Ich fühle, je bequemer ich 'vimscript' benutze, desto bequemer benutze ich' vim' – hgiesel