vim:使用远程静音打开折叠

时间:2013-09-11 01:44:23

标签: vim

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

2 个答案:

答案 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