2011-06-02 49 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

相關問題