私の~/.bashrc
には、$ EDITORをgvimに設定する部分があります。 Xウィンドウを表示しているときは正常に動作します。しかし、(別のワークステーションから)自分のワークステーションにSSHで接続すると、gvimは「ディスプレイを開けません」と文句を言い始めます。
したがって、bashrcにif
ステートメントを入れたいと思います。Xウィンドウが使用可能な場合はgvimを使用し、そうでない場合はvimにします。
どうすればそれを達成できますか?
これを行う1つの方法は、DISPLAY環境変数の存在をテストします。
if [ "$DISPLAY" ]
then
EDITOR=gvim
else
EDITOR=vim
fi
GvimがXサーバーに接続できない場合でも、DISPLAYが設定される場合があります。そのような場合は、 RunningX プログラムを使用してください。
if RunningX
then
EDITOR=gvim
else
EDITOR=vim
fi
$DISPLAY
環境変数は、Xを使用している場合は何かに設定し、ディスプレイに接続していない場合は設定を解除する必要があります。
したがって、これを使用できます:
if [ -n "$DISPLAY" ]; then
alias vim='gvim'
else
alias vim='vim'
fi
しかし、別の解決策があります。これはsshX転送と呼ばれます。
実行
ssh -X yourworkstation
次に、sshを実行しているマシンでvimを実行すると、Xを実行しているマシンに表示されます。
これを.bashrcに入れます:
if [ -z "${DISPLAY:-}" ]; then
EDITOR='vim'
else
EDITOR='gvim'
fi
これはあなたの質問に対する答えではありませんが、X *を実行している1つのワークステーションから別のワークステーションにSSHで接続する場合、実際にはcan Xをセットアップする場合はgvimを使用することを指摘しておくと便利だと思います。 sshで転送します。ウィンドウ情報はネットワーク経由で送信され、gvimはローカルで実行された場合と同じようにポップアップ表示されます。
〜/ .ssh/configに以下を追加します
Host *
ForwardX11 yes
これで、gvimを実行できるようになります。
OriginのワークステーションがWindowsで、Xを実行していない場合、実際にはCygwinを使用してローカルでXサーバーを起動できます。セットアップが完了すると、PuTTYなどの一般的なsshクライアントを構成してX11転送を実行できます。そうすると、ネイティブのウィンドウで装飾されたウィンドウのように見えるものにgvimがポップアップ表示されます。
私はRunningXを使用したgaryjohnの答えが好きでした。それは、悪いが空ではないDISPLAY変数について賢いからです。
でも..もっと上手く行きたいです。私はよくスクリーンセッションを使用します。自宅でスクリーンセッションを開始する可能性があります。DISPLAYが定義されています。次に、他の場所からSSHで接続しますが、DISPLAYはまだ定義されており、実際に表示されます...自宅で!だから..それから私は '$ DISPLAY ='をエクスポートします。これは問題ありませんが、その回答はすでにチェックされており、.bashrcが最初に実行されたときに有効なDISPLAY変数が見つかったため、EDITORは引き続きgvimに設定されます。
同様の問題の解決策を探してここに来ました。X-GUIのマンページブラウジングにYelpを使用したかったのですが、Xを使用しない場合は自動的に従来のmanコマンドにドロップダウンしました。ここで読んだ内容に基づいて、次のことを思いつきました。
man () {
if RunningX
then
Yelp "man:$@";
else
/usr/bin/man "$@";
fi
}
EDITORの問題については、次のようなことができると思います。
EDITOR=vim
vim () {
if RunningX
then
gvim "$@";
else
vim "$@";
fi
}
私はそれを長い話なしで投稿したでしょうが、私はそれをテストしていません。私は自分自身をbash初心者だと思っています。私は自分の「manコマンド」をテストしました、それはうまくいきます!私はエディターにemacsを使用していますが、Xの独自のチェックを行います。gvimもインストールしていません。
現在のX11セッションに関する情報を含むXLOCALなど、Xorgが起動時に設定する環境変数の1つを確認するだけです。