문제

gVim이 단일 인스턴스만 실행하여 새 파일을 열면 현재 실행 중인 인스턴스의 새 탭에서 자동으로 열리도록 하는 방법이 있습니까?

통과하면 그렇게 할 수 있다는 걸 알아요 --remote-tab-silent 하지만 이것이 기본 동작이 되도록 gvim을 구성하고 싶습니다.즉.나는 타자를 치고 싶다 gvim filename 내가 통과한 것처럼 행동하게 만들어 --remote-tab-silent 그것에 대한 옵션.

gVim 7.2

편집하다

저는 윈도우(비스타)를 사용하고 있습니다.

도움이 되었습니까?

해결책

Bash Shell을 사용하는 경우 (Linux/OS X/Cygwin 사용)를 추가하는 것입니다. ~/.bashrc 파일:

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

창문에서 나는 당신이 가질 수 있다고 생각합니다 gvim.bat 동일하게 달성하기위한 배치 스크립트 ..

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

gvim.exe가 당신의 길에 있지 않은 경우

Run > Search "Environment"

현재 사용자 또는 시스템의 경로 var 편집.

다른 팁

운영 체제와 쉘에 따라 다릅니다. Linux를 사용하면 언제든지 다음과 같은 별칭을 설정할 수 있습니다.

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

당신의 .bashrc (Bash를 로그인 쉘로 사용하는 경우).

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 (~/.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 }
}
alias tvim="gvim --servername `gvim --serverlist | head -1` --remote-tab"

이로 인해 VIM이 VIM의 동일한 인스턴스에서 새 탭에서 새 파일을 열게됩니다. 원천: http://eustaquiorangel.com/posts/477

휴대용 래퍼 스크립트 :

나는 Cygwin + Windows에서 이것을 다루는 것에 약간 지쳤다. 그래서 나는 마침내 그것에 대해 무언가를했다. 나는 위에서 정의 된 래퍼 스크립트로 시작했지만 *닉스와 승리를 위해 훨씬 더 강력하고 멀티 env를 만들었습니다.


#!/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:

효과적으로 사용하는 방법 :

  • 위의 코드를 어딘가에 yor 경로의 스크립트 파일에 설치하십시오.
  • 기본 스크립트 동작을 설정하려면 Windows 또는 귀하의 ~/.bashrc 파일에 Winvim 환경 변수를 추가하십시오. True/Windows 사용. False/사용 x11
  • 별명 Cygwin 및/또는 Windows GVIM에 대한 일부 명령 :

    echo "alias gwra = 'winvim = false ~/src/localscripts/wgwrap'">> ~/.bashrc echo "alias wgvim = 'wgwrap'">> ~/.bashrc

  • 노트: GVIM에 대한 하드 코딩 된 경로가 시스템에 부정확 한 경우 스크립트를 직접 편집 할 수 있습니다. 별명 (들)을 직접 편집하고/또는 환경 변수 Winvim 및/또는 Vimrun을 추가합니다. 위의 GWRAP와 같이 별칭으로 설정하거나 .BASHRC 또는 Windows 시스템 환경에 추가 할 수 있습니다.

파일의 특정 위치로 이동하고 싶은 경우가 종종 있습니다.내가 찾은 유일한 방법은 다음과 같습니다.

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

어디 ^[ esc (ctrl-v esc 입력)이고 ^M Enter(ctrl-v Enter)입니다.

도움이 되었기를 바랍니다.--remote-expr 사용법을 이해하는 사람이 있으면 나에게 알려주세요.

파일 브라우징에 TotalCommander를 사용하고 있습니다. "F4"를 눌러 파일을 편집 할 수 있습니다. 따라서 "F4의 편집기"옵션 창에서 다음을 수행하면됩니다.

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

내 Win7 64 비트 머신에서 작동합니다.

위의 솔루션은 첫 번째 실행시 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

Windows가 아닙니다

나는 macvim을 사용합니다 (Snapshot 73).

이것을 .bash_profile에 추가하십시오.

"이름 없음"및 오류 메시지가 생성되지 않습니다.

vi() {

    if [[ `mvim --serverlist` == 'VIM' ]]; then
        command mvim --remote-tab-silent "$@"
    else
        command mvim "$@"
    fi
}

MacVim을 사용하여 기본 ServerName이 단순히 vim이라는 것을 발견했습니다. 그 주제를 고수하면서, 나는 bashrc에서 다음과 같은 기능을 던졌고 그것은 매력처럼 작동합니다.

mvim() { ~/bin/mvim --servername VIM --remote-tab-wait-silent $* & }
gvimt () { [ $# -ne 0 ] && command gvim --remote-silent-tab $@ || command gvim $@; }

나는 실제로 사용하고있다

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

오류를 죽이고 매개 변수가있을 때만 깃발을 사용했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top