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.
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.
我发现--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
我的解决方案是汤姆·维纳gvim
(Tom 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)