【问题标题】:gVim gives [Permission Denied] when using --remote-silentgVim 在使用 --remote-silent 时给出 [Permission Denied]
【发布时间】:2013-11-23 18:44:58
【问题描述】:

我正在 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 -> 快捷方式 -> 批处理文件 -> gVim -> ":sp 文件名"

知道为什么 vim 不让这个命令运行吗?

似乎在 vim help -remote 文件或在谷歌上看到此内容的任何其他人中找不到任何提及权限的内容。

谢谢。

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

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

喜欢将整个命令视为文件路径之类的吗?

【问题讨论】:

标签: windows batch-file vim


【解决方案1】:

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

使用--remote-send是正确的做法;就像在帮助示例中一样,您应该在前面加上 &lt;C-\&gt;&lt;C-N&gt; 以确保远程 Vim 处于正常模式(否则,如果您将其置于插入模式,则命令将按字面意思插入!)

【讨论】:

    【解决方案2】:

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

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

    @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 并没有像我想象的那样做。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-26
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2016-01-05
      • 2020-12-27
      相关资源
      最近更新 更多