我想了解可执行文件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
)
你对此有什么解释吗?
答案1
解释如下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
如果被调用,它将充当最小的 POSIX shell sh
(请参阅 中的 INVOCATION man bash
)。