我正在尝试编写一个插件,它会进行system
调用,根据当前缓冲区生成一个文件,然后在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
应该将光标返回到其先前的位置,然而,似乎并非如此。
答案 0 :(得分:4)
这听起来像是在vim中完美使用预览窗口。在预览窗口(:pedit /path/to/file
)中打开文件时,焦点不会从当前窗口中删除。如果需要,您还可以随时使用wincmd P
直接跳转到预览窗口。您还可以使用:pclose
从任意位置关闭预览窗口。如果文件已更改,并且您想要查看更新,则可以再次:pedit /path/to/file
来获取更新。
另一个小好处,即使您在预览窗口中有文件,仍然可以使用普通:q
而不是:qa
退出vim。
答案 1 :(得分:1)
我怀疑你想在分割后使用wincmd p
,这会让你回到上一个窗口。