在多个(新)选项卡中打开现有Gvim中的文件

时间:2009-05-21 19:56:25

标签: bash ubuntu vim tabs alias

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

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

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

6 个答案:

答案 0 :(得分:70)

如果使用clientserver选项编译vim,则可以执行此操作。使用以下标志启动vim实例:

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

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

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

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

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>'

答案 1 :(得分:20)

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

:tabnew
:e .

这将打开一个新的空白标签页并打开文件浏览器。您可以通过鼠标单击或使用键盘。单击或按下要打开它的文件上的回车键。尝试使用键盘将光标定位在要打开的文件上,然后按“t”。这将在新选项卡中打开所选文件,从而在第一个选项卡中保持文件浏览器处于打开状态。这可能是打开一堆文件的快捷方式。

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

答案 2 :(得分:11)

想要您的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 context menu

答案 3 :(得分: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

答案 4 :(得分:1)

有一种方法:

n*.cpp|tab ba

或者如果你想拆分:

n*.cpp|sba

如果您想了解更多信息:

:help ba

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

答案 5 :(得分: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