当使用--remote-silent时,gVim给出[Permission Denied]

时间:2013-11-23 18:44:58

标签: windows batch-file vim

我正在Windows 7上的gVim中编辑Unity 3D .cs文件,当我双击Unity中的文件以便在现有的vim窗口中打开文件时,我会喜欢它,而是打开一个新文件。

为了解决这个问题,我使用了各种其他SO答案制作批处理文件并使用--remote-silent调用vim。这一切都与vim行为不同,它不允许在其上运行远程命令。

批处理文件:

@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
   start "" "C:\Program Files (x86)\Vim\vim73\gvim.exe" --remote-silent ":sp %1<CR>"
SHIFT
GOTO Loop
:Continue

它给了我

":sp C:\my\path\file.cs" [Permission Denied] Press enter or type command to continue

我尝试删除“%1”以检查是否是提供权限错误的文件,但没有运气。批处理文件通过以管理员身份运行的快捷方式运行(在Windows中一切都不简单)

Unity - &gt;快捷方式 - &gt;批处理文件 - &gt; gVim - &gt; “:sp filename”

任何想法为什么vim不会让这个命令运行?

似乎无法在vim帮助中找到任何权限 - 远程文件或其他在google上看到此权限的人。

感谢。

* 编辑1 看起来像是奇怪的事情,如果我这样做:我在缓冲区列表中看到了这个

2 %a=  ":sp C:\My\file\path.cs" line 1

喜欢将整个命令视为文件路径还是什么?

2 个答案:

答案 0 :(得分:2)

--remote-silent采用文件列表,而非Ex命令(嗯,您可以在文件之前通过+{cmd}传递一个);这就是为什么Vim将你的命令解释为(不存在的)文件。

使用--remote-send是正确的方法;与帮助示例中一样,您应该在<C-\><C-N>之前添加以确保远程Vim处于正常模式(否则,如果您将其保留为插入模式,则命令将按字面插入!)

答案 1 :(得分:0)

我在发现缓冲区问题后自己解决了这个问题。

我将我的批次更改为以下内容:

@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
   start "" "C:\Program Files (x86)\Vim\vim73\gvim.exe" --remote-send ":sp %1<CR>"
SHIFT
GOTO Loop
:Continue

看起来--remote-silent并没有按照我的想法做到。

我还将set shortmess=aoOtI添加到我的vimrc中以阻止它提示我。