1

在 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"
4

2 回答 2

1

编辑: 下面的解释略有错误,但方法是合理的。我错过了--remote家庭采用可选的“init”命令参数;它是命令的一部分,而--remote-silent不是 gvim 的新参数。如果它是 gvim 的一个新参数,下面的解释适合。


问题是运行以发送远程文件的 Vim 也会运行+...命令,而不是实际编辑文件的 Vim。尝试在 ,之后使用--remote-send或发送加载文件后需要运行的命令。--remote-expr--remote-silent

即类似的东西:

gvim --remote-silent myfile
gvim --remote-send zv
etc.
于 2013-09-11T04:25:49.273 回答
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

于 2013-09-16T03:12:56.027 回答