web-dev-qa-db-ja.com

vi / vim / view / etc / alternativesループ

実行可能ファイルvivimの違いを理解したかったのです。 whichは私を/usr/bin/に導きました、そしてそこで私は次のシンボリックリンクを見つけました:

/usr/bin/vi -> /etc/alternatives/vi
/usr/bin/vim -> /etc/alternatives/vim

/etc/alternatives/に移動すると、これらの名前が/usr/bin/にリンクしていることがわかりました。

/etc/alternatives/vi -> /usr/bin/vim.gnome
/etc/alternatives/vim -> /usr/bin/vim.gnome

なぜそうなのか少し疑問に思った後、両方が同じ実行可能ファイルを指しているため、完全に同じであるという結論に達しました。

しかし、その瞬間に何かが私の目に留まりました。このリンク:

/etc/alternatives/view -> /usr/bin/vim.gnome

このリンクを伴う:

/usr/bin/view -> /etc/alternatives/view

viewを実行すると、vimを実行するときと同じではないことがわかっているので、これは奇妙なことです。引数として指定されたファイルの読み取り専用モードを開きます。 vim.gnomeバイナリは、実行時に何がリンクしていたかを何らかの形で認識していますか?

(ちなみに、同じ問題はvimdiffにもあります)

その説明はありますか?

3
Bach

これはman vimで説明されています:

コマンドの名前に応じて、Vimの動作は異なります(実行可能ファイルは同じファイルのままである可​​能性があります)。

vim:
「通常の」方法で、すべてがデフォルトです。

例:
Exモードで起動します。 「:vi」コマンドを使用して通常モードに移動します。 「-e」引数を使用して実行することもできます。

表示:
読み取り専用モードで開始します。ファイルの書き込みから保護されます。 「-R」引数を使用して実行することもできます。

gvim gview:
GUIバージョン。新しいウィンドウを開始します。 「-g」引数を使用して実行することもできます。

evim eview:
イージーモードのGUIバージョン。新しいウィンドウを開始します。 「-y」引数を使用して実行することもできます。

rvim rview rgvim rgview
上記と同様ですが、制限があります。 Shellコマンドを開始したり、Vimを一時停止したりすることはできません。 「-Z」引数を使用して実行することもできます。

言い換えれば、vimは呼び出された名前を検出し、それに応じて動作します。実行された名前に応じて動作が異なるプログラムの別の例は、bashであり、shとして呼び出された場合に最小のPOSIXシェルとして機能します(man bashのINVOCATIONを参照)。

3
terdon