45

我在我的 .bashrc 中放了一些别名,以便在 gvim 中打开一组项目文件,每个文件都在自己的选项卡中:

gvim -p <list of file names using absolute paths>

这一切都很好,除了在任何给定时间我可能想要在几组文件之间移动(我当前的项目使用 Ruby on Rails,这就解释了这一点)。如果我可以将新选项卡附加到现有的 gvim 实例,那将是非常棒的。在我的最后一个职位上,我在 Vista 上工作;我通过在 gvim 中打开一堆空选项卡来解决这个问题,这使我可以右键单击文件名并选择“在现有的 No-Name gvim 中打开”。现在我使用 Ubuntu,上下文菜单上没有这样的东西。有没有办法从命令行做到这一点?

4

6 回答 6

71

如果 vim 是用clientserver选项编译的,你可以这样做。使用以下标志启动您的 vim 实例:

$ gvim --servername GVIM  # GVIM is the server name. It can be anything.

要在此实例中打开更多选项卡,您可以运行以下命令:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ...

vim 中的客户端服务器功能非常方便。它不仅限于打开文件;它可用于使用命令行向 vim 发送任何命令。例如,要远程关闭 vim 实例,您可以使用:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>'
于 2009-05-21T20:06:37.303 回答
21

从 Gvim 内部,输入:tabe {file_name}. 这将在新选项卡中打开命名文件。如果你不喜欢输入长文件名,试试这个:

:tabnew
:e .

这将打开一个新的空白标签页并打开文件浏览器。您可以通过鼠标单击或使用键盘。在要打开的文件上单击或按 Enter 键。尝试使用键盘将光标放在要打开的文件上,然后按“t”。这将在新选项卡中打开所选文件,同时在第一个选项卡中保持文件浏览器打开。这可能是打开一堆文件的快速方法。

您可以使用标签页做很多事情,这些事情可能会让生活更轻松。要访问 Vim 在线帮助手册中的相关部分,请输入:h tabpage.

于 2009-06-17T07:22:01.540 回答
13

希望您的 Windows 上下文菜单允许您在当前打开的 gvim 窗口的新选项卡中打开文件?

将此保存为名为 temp.reg 的文件,然后双击它以将设置添加到注册表。如果您的路径不同,请务必修改 vim 的路径。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim]
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command]
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\""

您现在将有一个这样的上下文菜单:

vim 上下文菜单

于 2013-03-25T10:36:17.523 回答
6

Linux 用户可以使用这种脚本:

#!/bin/bash

ANS=`pgrep -fx "gvim --servername GVIM"`

echo $@

if [[ ! $ANS ]]; then
    gvim --servername GVIM
fi

if [[ $1 ]]; then
    gvim --servername GVIM --remote-tab "${@}"
fi

然后编辑 gvim.desktop 文件以使用此脚本:

Exec=/home/user/bin/my_gvim_script.sh %F
于 2013-03-11T09:27:04.347 回答
1

有一种方法:

n*.cpp|tab ba

或者如果您想拆分:

n*.cpp|sba

如果您想了解更多:

:help ba

我不知道是什么n,但没有它就行不通。

于 2011-11-12T09:06:30.993 回答
1

这是我的 gvim 启动脚本。它是先前答案的扩展。它确保在所有情况下调用gvim时只有一个实例会运行:gvim

  • gvim当没有gvim实例正在运行时,在没有文件名的情况下调用;gvim已启动。
  • gvim在存在gvim实例的情况下调用不带文件名的方法;打开一个空的新选项卡。
  • gvim使用带有或不带有gvim实例的文件名调用;打开一个选项卡,显示该文件。

这将模仿其他编辑器的标准行为。

#!/bin/bash
exec=/usr/bin/gvim  #the path to gvim
if [ $# -eq 0 ]
  then  # no filename given
    if [ -z $($exec --serverlist) ]
      then  # no filename given and no gvim instance
        $exec -f --servername GVIM > /dev/null 2>&1
      else  # no filename given, but a gvim instance exists
        $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1
    fi
  else  # filenames given
    $exec -f --servername GVIM --remote-tab "$@" > /dev/null 2>&1
fi
于 2014-10-09T23:12:59.267 回答