如何使 vimdiff 命令使用与 vi 和 vim 命令相同的 Vim 版本?

如何使 vimdiff 命令使用与 vi 和 vim 命令相同的 Vim 版本?

我从来没有担心过vimdiff在我自己的计算机上安装了 archlinux,所以一般来说一切都是最新的;我一般只是用它,而且我觉得还好。毕竟,无论我启动、 、、 或 ,:version都会给出相同的输出。vivimvimdiff

然而,在我的工作计算机 (Debian 10) 上,vimdiff打开的 Vim 版本比vi或旧版本vim

/etc/alternatives我想这可能与我安装 Vim 和/或其他东西有关。我已经玩了很长一段时间了(可能没有真正理解它),所以我不记得太多了。


反馈答案和评论

ls -lF /etc/alternatives/ | grep bin/vim | sed 's/.*-> //' | sort -u

仅产生一个结果,即/usr/bin/vim.gtk*.那么,怎么可能vimdiff打开vim不同的版本呢?或者我误解了答案?

的输出type -a vimdiff

vimdiff is /usr/bin/vimdiff
vimdiff is /bin/vimdiff

输出:type -a vim

vim is aliased to `/home/me/vim-dist/bin/vim'
vim is /usr/bin/vim
vim is /bin/vim

输出type -a vi

vi is aliased to `/home/me/vim-dist/bin/vim'
vi is /usr/bin/vi
vi is /bin/vi

/bin/vim --version | head -n 1都有/usr/bin/vim --version | head -n 1相同的输出:

VIM - Vi IMproved 8.1 (2018 May 18, compiled Jun 15 2019 16:41:15)

这是我执行时运行的版本,比我执行/vimdiff时运行的版本旧。vimvi

答案1

您已为;中的别名使用了vi和。想必您也可以使用别名。vim/home/me/vim-dist/binvimdiff

为了vimdiff正常工作,它需要作为“vimdiff”而不是“vim”执行,所以你不能只给“vimdiff”起别名/home/me/vim-dist/bin/vim

/home/me/vim-dist/bin但是, named中可能已经存在符号链接vimdiff。如果有则别名“vimdiff”。

如果没有,创建它可能会起作用。

cd /home/me/vim-dist/bin
ln -s vim vimdiff

然后将“vimdiff”别名为/home/me/vim-dist/bin/vimdiff.

如果您不想或无法创建链接,则可以将“vimdiff”别名为/home/me/vim-dist/bin/vim -d.

alias vimdiff="/home/me/vim-dist/bin/vim -d"

(在您的.bashrc.zshrc或任何您保留别名的地方。)

所有别名的替代方法是将添加/home/me/vim-dist/bin到您的$PATH并确保它出现事先的/bin/usr/bin。看如果您不熟悉更改您的$PATH.

答案2

啊? vimdiff只是 的符号链接vim。具体来说,在 debian 上,/usr/bin/vimdiff有一个符号链接/etc/alternatives/vimdiff,而该符号链接又是您首选的 vim 版本的符号链接。

例如,在我的主台式机上,使用vim.gtk3我首选的 vim:

$ ls -lF /usr/bin/vimdiff
lrwxrwxrwx 1 root root 25 May 18  2018 /usr/bin/vimdiff -> /etc/alternatives/vimdiff*

$ ls -lF /etc/alternatives/vimdiff
lrwxrwxrwx 1 root root 17 Nov  8  2019 /etc/alternatives/vimdiff -> /usr/bin/vim.gtk3*

您可以通过以下方式查看可用的替代方案:

$ update-alternatives --list vimdiff
/usr/bin/vim.basic
/usr/bin/vim.gtk3

并将其更改为:

$ sudo update-alternatives --config vimdiff
There are 2 choices for the alternative vimdiff (providing /usr/bin/vimdiff).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/vim.gtk3    50        auto mode
  1            /usr/bin/vim.basic   30        manual mode
  2            /usr/bin/vim.gtk3    50        manual mode

Press <enter> to keep the current choice[*], or type selection number: 

如果我安装了更多 vim 软件包(例如vim-tiny),那么它们也会显示为选项。

可以为 vim 和 vimdiff (以及其他几个*vim*程序 - 请参阅下面的一些二进制文件)选择不同的替代方案。我怀疑这就是你所做的。如果您希望它们相同,请使用update-alternatives更改其中一个或两个。

$ ls -lF /etc/alternatives/ | grep bin/vim
lrwxrwxrwx 1 root root  17 Nov  8  2019 editor -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 eview -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 evim -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 gview -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Dec 24  2019 gvim -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 gvimdiff -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 rgview -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 rgvim -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 rview -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 rvim -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 vi -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 view -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Nov  8  2019 vim -> /usr/bin/vim.gtk3*
lrwxrwxrwx 1 root root  17 Mar 18 21:58 vimdiff -> /usr/bin/vim.gtk3*

(或者,你可以运行类似的东西grep -r bin/vim /var/lib/dpkg/alternatives/

其中每一个都可以独立设置为指向不同的 vim 替代版本。我可能应该安装vim-tiny(或者至少将上面的大部分设置为vim.basic),我真的不需要在我的 vi 中内置精美的 GUI 或 perl/python/ruby/tcl 支持。我唯一使用的时候gvim是在极少数情况下从 GUI 应用程序或文件浏览器运行它。

相关内容