Windows 将光标更改为Vim中BufWritePost上的另一个窗口
我有一个函数,每当调用它时,它都会分割窗口并显示一些信息,将光标放在这个新窗口中 到目前为止还不错 但是我正在实现一个自动命令,它将触发相同的函数,而且一切都很好,除了光标不会像不使用自动命令时那样更改到打开的窗口 触发此操作的行如下所示:Windows 将光标更改为Vim中BufWritePost上的另一个窗口,windows,vim,split,Windows,Vim,Split,我有一个函数,每当调用它时,它都会分割窗口并显示一些信息,将光标放在这个新窗口中 到目前为止还不错 但是我正在实现一个自动命令,它将触发相同的函数,而且一切都很好,除了光标不会像不使用自动命令时那样更改到打开的窗口 触发此操作的行如下所示: autocmd! BufWritePost *.py call MyFunction() 正如我所说,当您手动调用:call MyFunction()但不使用自动命令时,它工作得非常好 我认为Bram提到自动命令实际上并不意味着分割窗口,甚至不意味着移动
autocmd! BufWritePost *.py call MyFunction()
正如我所说,当您手动调用:call MyFunction()
但不使用自动命令时,它工作得非常好
我认为Bram提到自动命令实际上并不意味着分割窗口,甚至不意味着移动光标
有没有办法解决这个问题,或者我做错了什么?按照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
函数MyFunction()
[拥有您当前拥有的所有命令]
[ . . . ]
“然后作为最后一行,包括对feedkeys()的调用
“这将把击键塞进键缓冲区
“并在MyFunction()结束后执行
“请记住,位置将始终处于最佳状态
“原始窗口,即vim的窗口
“在触发自动命令时处于
“因此,如果新窗口低于原始窗口
“您可以使用以下窗口:
下面的feedkeys调用经过编辑以反映ZyX的
“改进以保证
“在使用Windows之前,我们处于正常模式
“移动键组合
调用feedkeys(“\\\j”,“n”)
端功能
您是否尝试过在函数中添加
或任何您想要的移动?是的,我尝试过,我也尝试过WindowNumber。”wincmd w'和wincmd p
。无效。看起来光标通常在自动命令内更改,但在事件完成后其位置将恢复。也许你不应该在窗口离开时关闭带有信息的窗口?一个长键,但也许使用feedkeys()填充击键可以解决自动命令后返回原始窗口的问题?参见:h feedkeys
@Herbert Sitz。这是可行的,尽管您必须使用wincmd
命令复制所有feedkeys调用,因为feedkeys只有在自动命令完成后才开始工作。我想你应该把这个写下来作为答案。我想你错过了feedkeys()调用中的,“n”
。不要依赖未重新映射的用户
@ZyX——是的,您是对的,应该有n
标志。编辑以添加该内容。@Alfredeza。我建议不要在feedkeys之前的部分中更改Nwincmd w
,但是在\j
之后,键入的键稍微少一些。@Herbert Sitz:顺便说一下j
也可以<代码>
变量的定义只是为了避免快速键入错误:当您在设法将手指从控制中移除之前按j键时。但有一个警告:在BufWritePost事件之后,您可能最终不处于正常模式。当然,您可以在\
之前编写\
,但在这种情况下,猜测切换模式更糟糕(示例是使用映射到:w
进行保存)。我现在无法提出任何解决此问题的建议。