让gVim始终运行单个实例

has*_*sen 39 vim single-instance

有没有办法让gVim只运行一个实例,这样当用它打开一个新文件时,它会自动在当前运行的实例的新选项卡中打开?

我知道你可以通过传递来做到这一点,--remote-tab-silent但我想配置gvim,以便这成为默认行为.即我想输入gvim filename并使其表现得好像我将--remote-tab-silent选项传递给它.

gVim 7.2

编辑

我在窗户(vista)

dbr*_*dbr 38

如果您使用bash shell(在Linux/OS X上/使用Cygwin)是添加~/.bashrc文件:

gvim () { command gvim --remote-silent "$@" || command gvim "$@"; }
Run Code Online (Sandbox Code Playgroud)

在Windows上我认为你可以有一个gvim.bat批处理脚本来实现相同的..

gvim.exe -p --remote-tab-silent %1 %*
Run Code Online (Sandbox Code Playgroud)

如果gvim.exe不在您的路径中

Run > Search "Environment"
Run Code Online (Sandbox Code Playgroud)

编辑当前用户或系统的PATH var.

  • 你需要`alias gvim ="gvim --remote-tab-silent || gvim"`以避免`之后缺少参数:" - remote-tab-silent"`当你调用没有文件名打开空白文档时. (2认同)

Zso*_*kai 11

这取决于您的操作系统和shell.使用linux,你总是可以设置一个别名:

alias gvim='gvim --remote-tab-silent'
Run Code Online (Sandbox Code Playgroud)

在你的.bashrc(如果你使用bash作为你的登录shell).

在Windows上,请参阅Vim wiki以获得解决方案:http://vim.wikia.com/wiki/Launch_files_in_new_tabs_under_Windows.


sha*_*omb 5

我发现--remote-tab-silent别名中的选项大部分都可以工作,除非我想将选项传递给gvim(例如gvim --serverlist)-在这种情况下,gvim将选项视为文字文件名,这不好,因为首先不是您想要的,其次,您必须清理现在已受污染的vim会话中的缓冲区。

在某些情况下,例如以下情况,使用另一个别名或以不同的方式解析vim/ 不可行gvim

  • gvim
  • gvim /path/to/files
  • gvim --serverlist
  • gvim -p /path/to/file1 /path/to/file2
  • gvim -t tag filename

我的解决方案是汤姆·维纳gvimTom Veiner)建议的围绕(~/.bin/gvim)的以下包装器脚本,但这仅在没有参数是选项的情况下才使用现有服务器-否则,将创建一个新服务器。gvim

#!/usr/bin/perl

use v5.10;

sub gvim { exec { '/usr/bin/gvim' } '/usr/bin/gvim', @_; }

if (scalar @ARGV) {
  unshift @ARGV, '--remote-tab-silent' unless /^--?/ ~~ @ARGV;
  gvim @ARGV 
}
else {
  chomp(my $serverlist = `gvim --serverlist`);
  if (length $serverlist) {
    gvim '--remote-send', '<Esc>:tabnew<CR>'
  } else { gvim }
}
Run Code Online (Sandbox Code Playgroud)