vi命令打开哪个应用程序?

在终端中键入vi时,将显示以下输出

 ~ VIM - Vi IMproved ~ ~ version 7.3.547 ~ by Bram Moolenaar et al. ~ Modified by pkg-vim-maintainers@lists.alioth.debian.org ~ Vim is open source and freely distributable ~ ~ Help poor children in Uganda! 

所以根据这个, vi必须启动VIm
但是当你键入vim它给出了

 aditya@aditya-desktop:~$ vim The program 'vim' can be found in the following packages: * vim * vim-gnome * vim-tiny * vim-athena * vim-gtk * vim-nox Try: sudo apt-get install  

这表明没有安装vim
值得注意的是, man viman vim推出了相同的手册页。

那么vi命令实际上是什么启动的呢?

这是vim-tiny :“Vi IMproved – 增强的vi编辑器 – 紧凑版”。

我在13.10做了这个:

 user@ubuntu:~$ which vi /usr/bin/vi user@ubuntu:~$ which vim user@ubuntu:~$ ls -l /usr/bin/vi lrwxrwxrwx 1 root root 20 ago 13 2013 /usr/bin/vi -> /etc/alternatives/vi user@ubuntu:~$ ls -l /etc/alternatives/vi lrwxrwxrwx 1 root root 17 dic 20 04:39 /etc/alternatives/vi -> /usr/bin/vim.tiny user@ubuntu:~$ apt-cache search vim.tiny vim-common - Vi IMproved - Common files vim-tiny - Vi IMproved - enhanced vi editor - compact version user@ubuntu:~$ dpkg --get-selections | grep vim vim-common install vim-tiny install 

如您所见,vim未安装(空输出),vi是/ etc / alternatives / vi的符号链接(请参阅替代机制 ),这是/usr/bin/vim.tiny的符号链接,属于包vim -小。

如果你type vi

 ➜ ~ type vi vi is /usr/bin/vi 

您将知道二进制文件在哪里,如果您这样做:

 ➜ ~ ls -l /usr/bin/vi lrwxrwxrwx. 1 root root 20 jun 22 2013 /usr/bin/vi -> /etc/alternatives/vi 

它由替代vi ,可以通过以下方式vi

 ➜ ~ update-alternatives --display vi vi - auto mode link currently points to /usr/bin/vim.basic /usr/bin/vim.basic - priority 30 slave vi.1.gz: /usr/share/man/man1/vim.1.gz slave vi.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz slave vi.it.1.gz: /usr/share/man/it/man1/vim.1.gz slave vi.ja.1.gz: /usr/share/man/ja/man1/vim.1.gz slave vi.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz slave vi.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz Current 'best' version is '/usr/bin/vim.basic'. 

因此,在我的例子中, vivim.basic提供的替代vi的符号链接。

如果你做sudo update-alternatives --config vi你可以改变vi提供的包

它类似于@ignis的答案,但我减少了步骤。如果文件是另一个的符号链接,它只能工作。如果它的路径中有数千个符号链接,你可以轻松获得原始文件路径。

symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk – > symlnk- – > symlnk – > symlnk – > symlnk – > symlnk – > ……………..–>原始文件

 $ which vi /usr/bin/vi $ ls -l $(which vi) lrwxrwxrwx 1 root root 20 Feb 22 20:14 /usr/bin/vi -> /etc/alternatives/vi # So /usr/bin/vi is an symlink to /etc/alternatives/vi $ dpkg -S $(readlink -f $(which vi)) vim-tiny: /usr/bin/vim.tiny 

所以vi属于vim-tiny包。

readlink -f为您提供文件的规范路径( 原始文件路径 )。