Vim에서 셸을 만들 때 셸 별칭을 사용하려면 어떻게해야합니까?


11

.zshrc에서 일부 별칭을 선언합니다. 예를 들어, which dbstart해당 별칭의 내용을 보여줍니다.

해당 쉘에서 vim을 열면 자식 프로세스입니다. Vim에서는으로 쉘 명령을 실행할 수 있습니다 :! some_command. 내가 할 경우 :! echo $0빔이 사용하는 쉘을 확인하려면, 그것은 '/ 빈 / zsh을'출력합니다. 그러나 내 별칭은 사용할 수 없습니다.

Vim에서 쉘을 만들 때 어떻게 일반적인 쉘 별칭을 사용할 수 있습니까?

두 가지 아이디어 :

  • 어쨌든 EXPORT원래 쉘에서 자식 프로세스로 vim, 그리고 다시 쉘 자식 프로세스로 의 별칭
  • .zshrc서브 쉘을 작성할 때 Vim이 읽도록 구성

당신의 포함 .zshrc에 의해 사용을 것 같다로의 .profile에 (vim
Kiwy

답변:


13

오래된 질문이지만 zsh에서 vim에 대한 가장 깨끗한 해결책은 zsh가 ~/.zshenv모든 쉘, 로그인, 대화 형 또는 기타에 대해로드하는 파일에 별칭을 추가하는 것이 었습니다 . 이것은 플래그로 vim 또는 zsh를 시작하는 것을 피하고 가능한 문제가 있습니다.

의 좋은 설명있다 ~/.zshenv~/.zshrc여기가 : http://tanguy.ortolo.eu/blog/article25/shrc

기본적으로 zsh는 항상 소싱합니다 ~/.zshenv. 대화식 쉘 소스 ~/.zshrc및 로그인 쉘 소스 ~/.zprofile~/.zlogin. 따라서 대화식 로그인 쉘 소스 ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogin및 vim과 같은 비 대화식 비 로그인 쉘은 소스 만 명령을 실행하는 데 사용합니다 ~/.zshenv.


이것은 링크 전용 답변은 아니지만 링크와의 차이점에 대한 설명을 인라인하는 것이 가장 좋습니다. 그렇게하면 모든 사람이 여기 설명의 혜택을받을 수 있고 우리는 링크 로트로부터 안전합니다.
HalosGhost

1
링크의 주요 요점으로 답변을 업데이트했습니다.
Kevin Lee

이것은 다른 답변보다 기하 급수적으로 나아졌습니다. 대화식 쉘을 시작하기 위해 vim을 추가하자마자 일시 중단되었습니다. .zshenv 파일 (이전에 존재하지 않았 음)을 사용하면 별칭이 다시 나타납니다!
Caleb

5

zsh에서 다음과 같이 작동합니다.

  • 위치한 $ZDOTDIR=디렉토리를 확인하십시오 .zshrc. 예 :export ZDOTDIR=$HOME
  • 에서 .vimrc, set shell=zsh\ -i또는 set shellcmdflag+=i동일한 효과.

-i, 대화 형 모드로 시작했을 때, 부하를 zshell 때문이다 $ZDOTDIR/.zshrc. 자세한 내용을 man zsh보고 검색 $ZDOTDIR하십시오.


1
흠, 이것은 나를 위해 이상한 문제를 만듭니다 : "+y지금 처럼 시스템 클립 보드에 복사하면 Vim이 일시 중단됩니다! superuser.com/questions/712245/…
Nathan Long

5
내 vim을 열 자마자 일시 중지됩니다.
Caleb

0

나는 당신이있을 때 그것을 믿고 환경 변수에 의해 정의 된 모든 쉘 vim을 사용하고 있다고 생각 :!some_command합니다 $SHELL.

이것은 구성 가능하므로 대신 사용하도록 파일 의 $SHELL동작 을 재정 의하여 변경할 수 있습니다 .$HOME/.vimrczsh

:set shell
shell=/bin/bash
:set shell=zsh\ -i

또는 .vimrc이 두 줄 중 하나를 사용하여

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

Vim help

자세한 내용 :help shell은 내부 vim를 참조하십시오.

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \\!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.

아니, 내가 말했듯이 : "만약 :! echo $ 0 셸 Vim이 어떤 것을 사용하고 있는지 알면 '/ bin / zsh'를 출력합니다"
Nathan Long

@NathanLong-아니요 오해의 소지가 있다고 생각합니다. 내 업데이트를 참조하십시오.
slm

@slm vim은에서 값을 가져옵니다 $SHELL. 그래서 당신의 껍질은 /bin/bash입니다. 내 쉘이 /bin/zsh인 경우 사용할 것입니다.
패트릭

0

내 문제 shell=/usr/bin/zsh\ -l.vimrc해결 함으로써

노트 :

나는 사용하고있다 : linux mint 17.1


우분투 14.04를 사용하여 이것은 작동하지 않습니다
vilsbole
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.