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"
どちらも機能しません。
私は明らかに組み込みコマンドを理解していないので、私の質問は(素直に)次のようになります。
- 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の関連投稿で提案しました。:!...
この関数を定義できるように、呼び出しに影響を与える2つの方法があります。
:!
コマンドの実行に使用されるシェルにオプションを追加します。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
で使用するときに必要な設定を正確に追加できるので、この方法を好みます:!
。