39

gVim が単一のインスタンスのみを実行できるようにする方法はありますか?新しいファイルを開くと、現在実行中のインスタンスの新しいタブで自動的に開かれますか?

渡すことでそれができることは知っていますが--remote-tab-silent、これがデフォルトの動作になるように gvim を構成したいと思います。つまり、入力して、オプションをgvim filename渡したかのように動作させたいのです。--remote-tab-silent

gVim 7.2

編集

私はウィンドウズ(ビスタ)を使っています

4

13 に答える 13

39

bash シェル (Linux/OS X 上で Cygwin を使用) を使用している場合は、次の~/.bashrcファイルを追加します。

gvim () { command gvim --remote-silent "$@" || command gvim "$@"; }

gvim.batWindowsでは、同じことを達成するためにバッチスクリプトを使用できると思います..

gvim.exe -p --remote-tab-silent %1 %*

gvim.exe がパスにない場合

Run > Search "Environment"

現在のユーザーまたはシステムの PATH var を編集します。

于 2009-06-01T20:06:23.050 に答える
11

オペレーティング システムとシェルによって異なります。Linux を使用すると、次のようなエイリアスをいつでも設定できます。

alias gvim='gvim --remote-tab-silent'

(bash をログイン.bashrcシェルとして使用している場合)。

Windows では、解決策について Vim wiki を参照してください: http://vim.wikia.com/wiki/Launch_files_in_new_tabs_under_Windows

于 2009-06-01T20:08:21.423 に答える
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

私の解決策は、 Tom Veinergvimが提案するように( ~/.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 }
}
于 2011-12-22T00:46:27.937 に答える
3
alias tvim="gvim --servername `gvim --serverlist | head -1` --remote-tab"

これにより、vimはvimの同じインスタンスの新しいタブで新しいファイルを開きます。ソース: http://eustaquiorangel.com/posts/477

于 2011-11-28T22:40:41.743 に答える
3

ポータブル ラッパー スクリプト:

私は cygwin + windows でこれを回避するのに少しうんざりしたので、最終的にそれについて何かをしました。上で定義したラッパー スクリプトから始めましたが、最終的にはより堅牢で、*nix と Win のマルチ環境に対応できるようになりました。


#!/bin/bash
#bash wrapper for windows/cygwin gvim

#####################################################################
## Cygwin/*nix and Windows gvim wrapper script, alias friendly, path friendly
## Author: Matt Gregory (skyleach (AT) geemale (dot) com)
## Version: 1.5
## Date: Thu Jun 12 10:02:54 2014
## Known Bugs:
## Changes:
##      Thu Jun 12 10:04:08 2014 : Initital posting to StackOverflow
#####################################################################

[[ -z ${WINVIM} ]] && WINVIM=true
[[ -z ${VIMRUN} ]] && export VIMRUN='' #scoping
if [[ ${WINVIM} = false ]]; then
    [[ ! ${VIMRUN} ]] && VIMRUN='/bin/gvim'
    ANS=$("${VIMRUN}" --serverlist | grep GVIM)
else
    [[ ! "${VIMRUN}" ]] && VIMRUN='/cygdrive/c/Program Files/vim/vim74/gvim'
    ANS=$(ps -Wsl | grep "${VIMRUN}" | sed -e "s/\s\+\([0-9]\+\).*/\1/g")
fi
[[ ! -z ${VIM} && ${WINVIM} = true ]] && export VIM=$(cygpath -wal "${VIM}")
RT="--remote-tab"
[[ $ANS ]] || unset RT
if [ ! -z ${DEBUG} ]; then
    echo "WINVIM: ${WINVIM}"
    echo "VIMRUN: ${VIMRUN}"
    echo "ANS: ${ANS}"
    echo "VIM: ${VIM}"
fi
#process arguments or stdin
if [ ${#} -ne 0 ]; then
    [[ ! -z ${DEBUG} ]] && echo "Got arguments [${#}]:'${@}'"
    for OFILE in "${@}"; do # if [ -f "${OFILE}" ] || [ -d "${OFILE}" ]; then
        [[ -h ${OFILE} ]] && OFILE="$(readlink -f "${OFILE}")"
        [[ ${WINVIM} == true ]] && OFILE=$(cygpath -wal "${OFILE}")
        echo "\"${VIMRUN}\" --servername GVIM $RT \"${OFILE}\""
        "${VIMRUN}" --servername GVIM $RT "${OFILE}" &
        if [[ -z ${RT} ]] || [[ ! "${RT}" ]]; then
            RT="--remote-tab"
            sleep 5 #give gvim time to start up, running too fast messes things up
        else
            sleep .3 #shorter sleep for tabs
        fi
        #fi
    done
else
    while read OFILE; do
        [[ -h ${OFILE} ]] && OFILE="$(readlink -f "${OFILE}")"
        [[ ${WINVIM} == true ]] && OFILE=$(cygpath -wal "${OFILE}")
        echo "\"${VIMRUN}\" --servername GVIM $RT \"${OFILE}\""
        "${VIMRUN}" --servername GVIM $RT "${OFILE}" &
        if [[ -z ${RT} ]] || [[ ! "${RT}" ]]; then
            RT="--remote-tab"
            sleep 3 #give gvim time to start up, running too fast messes things up
        else
            sleep .3 #shorter sleep for tabs
        fi
    done
fi
# vim: set filetype=sh:

効果的な使い方:

  • 上記のコードをパス上のスクリプト ファイルにインストールします。
  • デフォルトのスクリプト動作を設定するには、WINVIM 環境変数を Windows または ~/.bashrc ファイルに追加します。真/使用ウィンドウ。偽/使用 x11
  • 次のように、いくつかのコマンドを cygwin および/または Windows gvim にエイリアスします。

    echo "alias gwrap='WINVIM=false ~/src/localscripts/wgwrap'" >> ~/.bashrc echo "alias wgvim='wgwrap'" >> ~/.bashrc

  • : gvim へのハードコーディングされたパスがシステムで正しくない場合は、スクリプトを直接編集したり、エイリアスを編集したり、環境変数 WINVIM や VIMRUN を追加したりできます。上記で gwrap に対して行ったようにエイリアスに設定するか、.bashrc または Windows システム環境に追加することができます。

于 2014-06-12T14:15:49.947 に答える
2

ファイル内の特定の場所に行きたいと思うことがよくあります。私がこれを行うために見つけた唯一の方法は:

gvim --remote-send '^[:tabnew +$lineno $filename ^M'

ここで、^[はesc(ctrl-v escと入力)であり、^Menter(ctrl-v enter)です。

お役に立てれば。--remote-exprの使い方を理解している人がいたら、一言お願いします。

于 2010-08-06T13:32:18.377 に答える
2

ファイルの閲覧には TotalCommander を使用しています。「F4」を押すと、ファイルを編集できます。したがって、「Editor for F4」オプション ウィンドウでは、次の操作を行うだけです。

C:\Program Files (x86)\Vim\vim73\gvim.exe --remote-tab-silent

私のwin7 64ビットマシンで動作します。

于 2012-06-29T21:27:23.463 に答える
2

上記のソリューションは、最初の実行時に 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

https://stackoverflow.com/a/15335004/214686から変更

于 2013-09-02T12:22:41.363 に答える
1

MacVimを使用して、デフォルトのサーバー名が単にVIMであることを発見しました。そのテーマにこだわって、bashrcに次の関数を入れました。これは魅力のように機能します。

mvim() { ~/bin/mvim --servername VIM --remote-tab-wait-silent $* & }
于 2011-12-13T08:55:19.950 に答える
1
gvimt () { [ $# -ne 0 ] && command gvim --remote-silent-tab $@ || command gvim $@; }
于 2013-01-17T09:11:43.060 に答える
1

実際に使っています

  gvim () { 
    if [ "$#" -gt 0 ]
    then
      gvim --remote-tab-silent "$@" &
    else
      gvim "$@" &
    fi
  }

エラーを強制終了し、パラメーターがある場合にのみフラグを使用します

于 2013-08-05T20:59:31.687 に答える