実行可能ファイルvi
とvim
の違いを理解したかったのです。 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
にもあります)
その説明はありますか?
これは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を参照)。