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

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

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

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

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

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

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

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

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

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

:tabe {file_name}里面input:tabe {file_name} 。 这将在新选项卡中打开指定的文件。 如果你不喜欢input长文件名,试试这个:

 :tabnew :e . 

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

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

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

将其另存为一个名为temp.reg的文件,然后双击该文件将设置添加到您的registry中。 如果你的不同,一定要修改vim的path。

 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上下文菜单

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 

有一种方法:

 n*.cpp|tab ba 

或者如果你想分裂:

 n*.cpp|sba 

如果你想知道更多:

 :help ba 

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

这是我的gvim启动脚本。 这是以前答案的延伸。 它确保在所有情况下调用gvim时,只有一个gvim实例可以运行:

  • 没有gvim实例运行时, gvim被调用时没有文件名; gvim启动。
  • gvimgvim实例的存在下被调用时没有文件名; 一个空的新选项卡被打开。
  • 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