texsed
내 문제는 실제로 두 가지입니다. 다음과 같이 TeX 처리를 위한 사용자 정의 함수가 있습니다 .
function texsed () {
sed -i -f $S/tex_rule.sed $1 && pdflatex $2 $1
}
정의는 zshrc 파일에 있습니다 ~/.zshrc
. 이제 which texsed
zsh 세션에서 호출할 때마다 다음 출력이 표시됩니다. 문제는 vim에서 동일한 출력을 얻을 수 없다는 것입니다. 나는 다음을 사용하여 출력을 시도했습니다.
:r !which texsed
:r !zsh -c "which texsed"
둘 다 작동하지 않습니다.
나는 분명히 내장 명령을 이해하지 못하므로 내 질문은 (순진하게) 다음과 같습니다.
- zsh 내장은 어떻게
which
작동합니까? - 이와 같은 외부 명령을 통해 구성을 통해 정의된 별칭이나 함수의 정의를 어떻게 얻을 수 있습니까?
미리 감사드립니다 :)
답변1
:!...
Vim에서 사용할 때 일반적으로 $SHELL
인수를 사용 -c
하고 실행됩니다 ...
. 이는 비대화형 쉘을 생성합니다. 모래가 나온다zsh 문서:
그런 다음 에서 명령을 읽으십시오
$ZDOTDIR/.zshenv
. 쉘이 로그인 쉘인 경우 에서 명령을 읽은/etc/zprofile
다음 명령을 읽습니다$ZDOTDIR/.zprofile
. 그런 다음 셸이 대화형이면/etc/zshrc
및 에서 명령을 읽습니다$ZDOTDIR/.zshrc
. 마지막으로 쉘이 로그인 쉘이라면 를/etc/zlogin
읽어보세요$ZDOTDIR/.zlogin
.
따라서 with 는 :!...
전혀 .zshrc
읽혀지지 않으며 함수는 정의되지 않습니다.
~처럼Vim Stack Exchange의 관련 게시물에서 제안했습니다.:!...
, 이 함수를 정의할 수 있도록 호출에 영향을 주는 두 가지 방법이 있습니다 .
:!
명령을 실행하는 데 사용되는 셸에 옵션을 추가합니다.shellcmdflag
. ~에서:h :!
:On Unix the command normally runs in a non-interactive shell. If you want an interactive shell to be used (to use aliases) set 'shellcmdflag' to "-ic".
환경 변수. 이제 이것이 bash라면 빠른 해결책이 있습니다:
$BASH_ENV
. 그러나 zsh의 경우 간단한 동등 항목이 없습니다. 바라보다zsh에 BASH_ENV에 해당하는 것이 있습니까?하지만 저는 VimZDOTDIR
에서 사용할 때 필요한 구성을 정확하게 추가할 수 있기 때문에 이 방법을 선호합니다:!
.