6

我正在尝试编写一个插件,该插件将system根据当前缓冲区生成一个文件,然后在 a 中打开生成的文件vsplit,或者如果已经打开,它将在源文件更改时更新它。

我已经得到了生成文件并打开/更新拆分的代码,但问题是当它第一次打开拆分时,焦点转到拆分,当它更新源文件上的光标位置时跳转到页面顶部。

这是我正在尝试的,任何帮助将不胜感激。

execute 'keepjumps silent ! ' . s:cmd . ' ' . s:src_file . ' > ' . s:dst_file

if exists("s:outputbufnr") && bufexists(s:outputbufnr)
  execute 'keepjumps ' . bufwinnr(s:outputbufnr)
else
  " execute "keepjumps vnew " s:dst_file
  execute "keepjumps rightbelow vertical new " . s:dst_file
  let s:outputbufnr=bufnr(s:dst_file)
endif  

然而,从我认为keepjumps应该将光标返回到其先前位置的情况来看,情况似乎并非如此。

4

2 回答 2

4

这听起来像是对 vim 中预览窗口的完美使用。在预览窗口 ( :pedit /path/to/file) 中打开文件时,焦点不会从当前窗口中移开。如果需要,您还可以在需要时直接跳转到预览窗口wincmd P。您也可以在任何地方使用 关闭预览窗口:pclose。如果文件已更改并且您想查看更新,则可以:pedit /path/to/file再次获取更新。

另一个小好处,即使您在预览窗口中有一个文件,您仍然可以使用纯文本:q而不是:qa.

于 2012-05-03T14:55:24.803 回答
1

我怀疑你想wincmd p在拆分后使用,这会让你回到你所在的前一个窗口。

于 2012-05-03T14:39:46.307 回答