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

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

当你vi在终端输入时,会显示以下输出

~                             VIM - Vi IMproved                                
~                                                                             
~                               version 7.3.547                                 
~                           by Bram Moolenaar et al.                            
~           Modified by [email protected]             
~                 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 <selected package>

这表明vim尚未安装。
值得注意的是man viman vim启动相同的手册页。

那么该vi命令实际上启动了什么?

答案1

这是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-tiny 软件包。

答案2

如果你这样做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,可通过以下方式了解:

➜  ~  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'.

因此,就我而言,是指向 提供的vi替代方案的符号链接。vivim.basic

你可以改变哪个软件包提供了 vi 如果你这样做sudo update-alternatives --config vi

答案3

它与@ignis 的回答类似,但我减少了步骤。只有当文件是另一个文件的符号链接时,它才有效。如果文件的路径中有数千个符号链接,您可以轻松获取原始文件路径。

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为您提供文件的规范路径(原始文件路径)。

相关内容