組み込み機能であるzshはどのように機能しますか?

組み込み機能であるzshはどのように機能しますか?

texsed私の問題は実際には2つです。次のように、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"

どちらも機能しません。

私は明らかに組み込みコマンドを理解していないので、私の質問は(素直に)次のようになります。

  1. zsh組み込みはどのようにwhich機能しますか?
  2. このような外部コマンドを使用して、構成によって定義されたエイリアスまたは関数の定義をどのように取得できますか?

よろしくお願いします:)

ベストアンサー1

:!...Vimで使用すると、通常は$SHELL引数を使用して-c実行されます...。これは非対話型シェルを生成します。砂が出るzsh ドキュメント:

次にコマンドを読んでください$ZDOTDIR/.zshenv。シェルがログインシェルの場合は、コマンドを読んでから/etc/zprofileコマンドを読みます$ZDOTDIR/.zprofile。次に、シェルがインタラクティブである場合、および/etc/zshrcからコマンドを読みます$ZDOTDIR/.zshrc。最後に、シェルがログインシェルの場合はを/etc/zlogin読んでください$ZDOTDIR/.zlogin

したがって、withは:!...まったく.zshrc読み込まれず、関数は定義されていません。


〜のようにVim Stack Exchangeの関連投稿で提案しました。:!...この関数を定義できるように、呼び出しに影響を与える2つの方法があります。

  1. :!コマンドの実行に使用されるシェルにオプションを追加します。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".
    
  2. 環境変数今これがbashの場合は、迅速な解決策があります$BASH_ENV。しかし、zshの場合、単純な同等のエントリはありません。バラよりzshにBASH_ENVに対応するものはありますか?しかし、私はVimZDOTDIRで使用するときに必要な設定を正確に追加できるので、この方法を好みます:!

おすすめ記事