2011-06-02 81 views
1

我有一个函数,只要它被调用,它就会拆分窗口并显示一些信息,将光标放在这个新窗口中。将光标更改为Vim中BufWritePost上的另一个窗口

到目前为止这么好。

但是我实现了一个触发相同函数的autocommand,除非游标不会像使用自动命令一样运行时,游标永远不会更改到打开的窗口。

触发,这看起来像行:

autocmd! BufWritePost *.py call MyFunction() 

就像我说的,当你手动:call MyFunction()但不调用带有自动命令的伟大工程。

我认为布拉姆提到自动命令实际上并不意味着拆分窗口甚至移动光标。

有没有办法解决这个问题还是我做错了什么?

+0

你有没有尝试添加你想要一个''或任何运动的功能? – abcd 2011-06-02 22:56:47

+0

是的,我试过了,我也试过WindowNumber。 'wincmd w'和'wincmd p'。无济于事。 – alfredodeza 2011-06-03 05:45:19

+0

看起来游标通常在自动命令内发生变化,但事件完成后其位置恢复。也许你应该在留下信息时不关闭窗口? – ZyX 2011-06-03 06:53:42

回答

3

由什么ZYX在评论到原来的问题说下去,这听起来像这样的工作:

function MyFunction() 
    [ have all commands you currently have] 
    [ . . . ] 

    " then as last line include call to feedkeys() 
    " this will stuff keystrokes into key buffer 
    " and get executed after MyFunction() ends 
    " remember that location will always be in 
    " original window, i.e, window that vim 
    " was in when autocommand was triggered 
    " so if new window is below original 
    " window you could use this: 

    " feedkeys call below edited to reflect ZyX's 
    " improvement of \<C-\>\<C-n> to guarantee 
    " we're in Normal mode before using window 
    " movement key combo 

    call feedkeys("\<C-\>\<C-n>\<c-w>j", 'n') 

endfunction 
+0

我想你在'feedkeys()'调用中错过了''“n”'。不要依赖用户不重映射''。 – ZyX 2011-06-03 15:21:23

+0

Mmmnnn会'Nwincmd w'比更好吗? – alfredodeza 2011-06-03 16:06:17

+0

@ZyX - 是的,你说得对,应该有'n'国旗。编辑补充说。 – 2011-06-03 17:44:58