2016-09-30 4 views
0

ich folgende vimscript Funktion haben:Programmatically entzerren Fenster in einer Funktion

function! WindowCommand(cmd) 
    execute a:cmd 
    if !g:golden_ratio_enabled 
     normal <C-w>= 
    endif 
endfunction 

und ich verwende es etwa so:

map <space>w/ :call WindowCommand(':vs')<cr> 

Es soll um die Fenster entzerren, aber nur, wenn g:golden_ratio_enabled ist 0, sonst sollte es nichts tun.

Es ist nicht, obwohl nicht funktioniert, und ich bin nicht sicher, warum, weil die folgenden funktionierts:

map <space>w/ :vs<cr><C-w>= 

Was mache ich falsch hier?

Antwort

2

Es gibt ein paar Korrekturen. Zum Glück, die Lösung ist wirklich einfach

Aus welchem ​​Grund auch immer, normal <C-w>foo funktioniert nicht; Sie müssen stattdessen wincmd verwenden. Von :h wincmd

     *:winc* *:wincmd* 
These commands can also be executed with ":wincmd": 

:[count]winc[md] {arg} 
     Like executing CTRL-W [count] {arg}. Example: > 
      :wincmd j 
     Moves to the window below the current one. 
     This command is useful when a Normal mode cannot be used (for 
     the |CursorHold| autocommand event). Or when a Normal mode 
     command is inconvenient. 
     The count can also be a window number. Example: > 
      :exe nr . "wincmd w" 
     This goes to window "nr". 

Also in diesem Fall sollten Sie

wincmd = 

Alternativ machen Sie eine wörtliche <C-w> Zeichen eingeben können, durch <C-v><C-w> eingeben. In Ihrer vim-Sitzung wird dieses Zeichen als ^W angezeigt.

1

auszuführen Aktionen mit <notation>, verwenden Sie stattdessen:

:exe "normal \<notation>" 

ich es viel zu debuggen Zuordnungen verwenden.

Aber in diesem Fall bevorzugen Sie in der Tat wincmd.

Verwandte Themen