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.