Fish EDITOR環境変数が機能していないようです。

Fish EDITOR環境変数が機能していないようです。

私は最近フィッシュシェルを使い始めました。

echo $EDITOR返品vim

ところでエディタを実行させてEDITOR環境変数で探してみなければならないプログラムを使えば何も出ないようです。

使用時の例としてpass edit(fromhttps://www.passwordstore.org/)それは戻ります

vi: command not found(env変数に何も設定されていない場合は、viを代替手段として使用しますEDITOR

私が逃したものは何ですか?

ベストアンサー1

一部のプログラムは$VISUAL環境変数よりも環境変数を最初に見つける$EDITORため、両方が設定されている場合は$VISUALその変数が優先されます。

また、シェル変数はシェル言語の変数です。EDITOR=preferred-editorそのコマンドからコマンドを呼び出す必要があります。環境彼らにそれを選択させてください。

シェルは一部の変数を環境変数にマップし、これらの変数をvar=value実行するすべてのコマンドの環境に渡すことができます。rc-like シェルでは、次のように実行されます。みんなBourneなどのシェルではシェル変数が使用されますexport var。シェルでは環境変数を設定cshできますsetenv var value。次のオプションをfish使用してください。-xset

> set var value
> echo $var
value
> printenv var
>

$varシェル変数が設定されましたが、に渡されたvar=value環境にエクスポートされませんでしたprintenv

> set -x var value2
> echo $var
value2
> printenv var
value2

今回は、それが受け取ったコンテキストからprintenv1つを取得します。var=value2

printenv標準コマンドではありませんが、一般的です。envは標準コマンドなので、システムにない場合は、次のことをprintenv試すことができます。

env | grep -E '^(VISUAL|EDITOR)='

ただし、変数にvar=<newline>VISUAL=同じ値がある場合、またはそれより大きい値がある場合は、だますことがLINE_MAXできます。

他のオプションは次のとおりです。

perl -le 'print $ENV{VISUAL}'
python -c 'import os; print(os.getenv("VISUAL"))'

var=valueさらに、ここのシナリオはごくまれですが、特定のvar環境に対して複数のコマンドを使用してコマンドを実行できます。

たとえば、次のことができます。

execve("/path/to/cmd", ["cmd", "some arg"], ["VISUAL=vi", "VISUAL=emacs"])

cmd環境変数が持つと見なされる値は、VISUAL受け取る環境変数のリストを取得する方法によって異なりますexceve()。一部のコマンド/ライブラリ(例:libc's getenv())は最初のコマンドを選択し、一部のコマンド/ライブラリは最後のコマンドを選択します。一部のシェルはこれらのいずれかを対応する環境変数にマップしますが、他のシェルは保持して追加の実行時に渡すことができます。

だからあなたはそれを行うことができset -x VISUAL vim、両方とも実行され、最初のものだけを変更するので、2番目のものも提供することがprintenvわかります。emacsfishVISUAL=viVISUAL=emacsVISUALprintenv

しかし、これには積極的にユーザーを欺くために何かまたは誰かがfish必要です。

おすすめ記事