让gVim始终运行单个实例
有没有办法让gVim只运行一个实例,这样当打开一个新文件时,它会在当前运行的实例的新选项卡中自动打开 我知道您可以通过传递让gVim始终运行单个实例,vim,single-instance,Vim,Single Instance,有没有办法让gVim只运行一个实例,这样当打开一个新文件时,它会在当前运行的实例的新选项卡中自动打开 我知道您可以通过传递--remote tab silent来实现这一点,但我希望配置gvim,使其成为默认行为。i、 e.我想键入gvim filename,并使其看起来好像我将--remote tab silent选项传递给它一样 gVim 7.2 编辑 我在windows(vista)如果您使用的是bash shell(在Linux/OS X上/使用Cygwin),则要添加您的~/.bash
--remote tab silent
来实现这一点,但我希望配置gvim,使其成为默认行为。i、 e.我想键入gvim filename
,并使其看起来好像我将--remote tab silent
选项传递给它一样
gVim 7.2
编辑
我在windows(vista)如果您使用的是bash shell(在Linux/OS X上/使用Cygwin),则要添加您的
~/.bashrc
文件:
gvim () { command gvim --remote-silent "$@" || command gvim "$@"; }
在Windows上,我认为您可以使用gvim.bat
批处理脚本来实现同样的功能
gvim.exe -p --remote-tab-silent %1 %*
如果gvim.exe不在您的路径中
Run > Search "Environment"
编辑当前用户或系统的路径变量。它取决于您的操作系统和shell。使用linux,您始终可以设置别名,如:
alias gvim='gvim --remote-tab-silent'
在.bashrc
中(如果使用bash作为登录shell)
在windows上,请参阅Vim wiki以获取解决方案:。我经常发现我想要转到文件中的特定位置。我找到的唯一方法是:
gvim --remote-send '^[:tabnew +$lineno $filename ^M'
其中,^[
是esc(键入ctrl-v esc),而^M
是enter(键入ctrl-v enter)
希望这能有所帮助。如果有人知道如何使用远程expr,请给我一声欢呼
alias tvim="gvim --servername `gvim --serverlist | head -1` --remote-tab"
这使vim在同一个vim实例的new tab中打开一个新文件。来源:使用MacVim,我发现默认服务器名只是vim。按照这个主题,我在bashrc中抛出了以下函数,它工作起来很有魅力:
mvim() { ~/bin/mvim --servername VIM --remote-tab-wait-silent $* & }
我发现别名中的--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标记文件名
gvim
(~/.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 }
}
!/usr/bin/perl
使用v5.10;
sub gvim{exec{'/usr/bin/gvim'}'/usr/bin/gvim',@;}
if(标量@ARGV){
取消移位@ARGV,“--remote tab silent”,除非/^--?/~~@ARGV;
gvim@ARGV
}
否则{
chomp(my$serverlist=`gvim--serverlist`);
if(长度$serverlist){
gvim'--远程发送',':tabnew'
}else{gvim}
}
我正在使用TotalCommander进行文件浏览。它允许您按“F4”编辑文件。因此,在“F4编辑器”选项窗口中,您只需执行以下操作:
C:\Program Files (x86)\Vim\vim73\gvim.exe --remote-tab-silent
在我的win7 64位机器上工作。我实际上正在使用
gvimt () { [ $# -ne 0 ] && command gvim --remote-silent-tab $@ || command gvim $@; }
gvim () {
if [ "$#" -gt 0 ]
then
gvim --remote-tab-silent "$@" &
else
gvim "$@" &
fi
}
它会消除错误,并且仅在存在参数时使用该标志。上述解决方案不会在第一次执行时启动gvim服务器,因此我使用:
ANS=`pgrep -fx "$VIM"`
# Launch server if needed
if [[ ! $ANS ]]; then
$VIM
fi
# Now open the file
if [[ $1 ]]; then
$VIM --remote-tab "$@"
fi
修改自可移植包装器脚本:
我对在cygwin+windows中处理这个问题感到有点厌倦,所以我最终做了一些事情。我从上面定义的包装器脚本开始,但最终使它更加健壮,并且能够支持*nix和Win
如何有效地使用它:
- 将上面的代码安装到你所在路径上的脚本文件中
- 将WINVIM环境变量添加到windows或~/.bashrc文件中,以设置默认脚本行为。true/use windows.false/use x11
- 将某些命令别名为cygwin和/或windows gvim,如下所示: echo“alias gwrap='WINVIM=false~/src/localscripts/wgwrap'”>~/.bashrc echo“alias wgvim='wgwrap'>>~/.bashrc”
- 注意:如果gvim的硬编码路径不适用于您的系统,您可以直接编辑脚本、别名和/或添加环境变量WINVIM和/或VIMRUN。您可以在别名中设置它们,就像我上面对gwrap所做的那样,也可以将它们添加到.bashrc或Windows系统环境中
- 不适用于WINDOWS
我使用MacVim(快照73)
将此添加到您的.bash_配置文件中
它不会生成“没有名字”和错误消息
vi() {
if [[ `mvim --serverlist` == 'VIM' ]]; then
command mvim --remote-tab-silent "$@"
else
command mvim "$@"
fi
}
您需要
alias gvim=“gvim--remote tab silent | | gvim”
以避免在“--remote tab silent”之后缺少参数
当您在没有文件名的情况下调用以打开空白文档,或者更确切地说是在~/bin/gvimt或类似文件中的可执行文件中放置gvim--remote tab silent$@| gvim$@
。@TomViner现在我意识到,即使使用这些解决方案,消息“Arguement missing after…”仍然会出现,但gvim能够打开(通常情况下不是这样。)上面建议的别名不起作用,它只会打开一个新的gvim实例。但是,您关于使用可执行文件的建议起了作用,正如在my.bashrc中添加以下内容一样:gvimt(){command gvim--remote silent$@| | command gvim$@}
。即使这样,它仍然会打印“--remote tab silent”之后缺少的错误参数,因此我将stderr重定向到/dev/null,如下所示gvim(){command mvim$@--remote silent 2>/dev/null | | command mvim$@;}
迟到:始终引用“$@”
以保护带有空格的文件名(或$IFS中的其他字符)嗨,s.bhooshi,欢迎来到stackoverflow,谢谢你的回答。你应该能够使用escape和enter。我阅读了下面的回复,建议作者阅读此脚本和代码的详细信息。它比其他脚本更具可移植性和实用性。路径、窗口和c
vi() {
if [[ `mvim --serverlist` == 'VIM' ]]; then
command mvim --remote-tab-silent "$@"
else
command mvim "$@"
fi
}