以编程方式均衡函数内的窗口

时间:2016-09-30 00:50:13

标签: vim

我有以下vimscript功能:

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

我这样使用它:

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

它应该平衡窗口,但只有当g:golden_ratio_enabled为0时,否则它应该什么都不做。

但是,它不起作用,我不知道为什么,因为以下的工作有效:

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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

有几个修复。值得庆幸的是,修复非常简单

无论出于何种原因,normal <C-w>foo都不起作用;您必须改为使用wincmd。来自: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".

所以在这种情况下,你应该做

wincmd =

或者,您可以输入<C-w>来输入文字<C-v><C-w>字符。在您的vim会话中,此字符将显示为^W

答案 1 :(得分:1)

要使用<notation>执行操作,请改为使用:

:exe "normal \<notation>"

我经常使用它来调试映射。

但在这种情况下,确实更喜欢wincmd