在多个(新)选项卡中打开现有 Gvim 中的文件
题
我在 .bashrc 中添加了一些别名,以便在 gvim 中打开一组项目文件,每个文件都在自己的选项卡中:
gvim -p <list of file names using absolute paths>
这一切都很好,除了我可能想在任何给定时间在几组文件之间移动(我当前的项目使用 Ruby on Rails,所以这解释了这一点)。如果我可以将新选项卡附加到现有的 gvim 实例中,那就太棒了。在我的上一份工作中,我负责 Vista;我通过在GVIM中打开一堆空标签来解决这个问题,这使我可以右键单击文件名,然后选择“在现有的无名GVIM中打开”。现在,我使用Ubuntu,上下文菜单上没有这样的东西。有什么方法可以从命令行执行此操作吗?
解决方案
如果VIM与客户 - 服务器选项编译,你可以做到这一点。用下列标志启动您的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>'
其他提示
从gvim,输入:tabe {file_name}
的内部。这将打开一个新标签命名的文件。如果你不喜欢打字长文件名的,试试这个:
:tabnew
:e .
这将打开一个新的空白标签页,打开文件浏览器。你可以鼠标点击您的方式左右或使用键盘。点击或点击您要打开该文件的回车键。尝试使用键盘将光标定位在要打开的文件,然后点击“T”。这将打开一个新标签所选择的文件,保存文件浏览器第一个选项卡打开。这可能是开了一堆文件的快捷方式。
有一大堆的东西,你可以用标签页,可能使生活更轻松做到。要获得相关章节Vim的在线帮助手册,类型:h tabpage
。
希望您的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\" \"%*\""
您现在有一个这样的上下文菜单:
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
当 no 时,调用时不带文件名gvim
实例正在运行;gvim
已启动。gvim
在存在 a 的情况下调用时不带文件名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