在MS Windows中使用LaTeX文档时,我有此功能可以进行反向搜索(从pdf到Vim):
function! ViewTex()
if has('win32') || has('win64')
let execstr = 'silent! !start SumatraPDF -reuse-instance '.
\ '-inverse-search "gvim --remote-silent +\%l \%f"'.
\ '%:p:r.pdf'
endif
exec execstr
endfunction
这样可以正常工作,但不会打开封闭的折叠。所以我的问题是:如何将normal zv
命令传递给--remote-silent
?我试过(没有成功)以下内容:
"gvim --remote-silent +\%l|normal\ zv \%f"
答案 0 :(得分:1)
编辑: 以下说明略有错误,但方法合理。我错过了--remote
系列采用可选的“init”命令参数;它是--remote-silent
命令的一部分,而不是gvim的新参数。下面的解释适合于它是否是gvim的新论据。
问题是运行发送远程文件的Vim还将运行+...
命令,而不是实际编辑文件的Vim。尝试在--remote-send
之后使用--remote-expr
或--remote-silent
来发送加载文件后需要运行的命令。
即。类似的东西:
gvim --remote-silent myfile
gvim --remote-send zv
etc.
答案 1 :(得分:1)
回到第一次尝试,在大多数情况下,Windows cmd.exe shell不使用'\'来转义任何内容。所以我认为你需要用引号括起你的init命令而不是反斜杠 - 转义空格。此外,根据:help --remote
,init中的命令必须能够具有以下“|”将它们分开,意味着除非用normal
命令包围,否则execute
将无效。所以在你的情况下,这样的东西最终需要在shell中执行:
gvim --remote-silent +"%l|exe 'normal! zv'" %f
(包含引号)
但是我不确定这是否允许按照%1和%f的要求进行扩展。
修改强> 的
或者,使用foldopen!
代替exe 'normal! zv'
,以避免需要空格或exe
。但是,请注意,这实际上打开了比zv
更多的折叠;也许那对你没关系。
根据您的评论,看起来您使用的任何平台都需要反斜杠 - 转义任何'%'字符,因此:
gvim --remote-silent +\%l|foldopen! \%f