Vi/Vim 在远程服务器上的行为与在我的本地 (ubuntu) PC 上的行为截然不同

Vi/Vim behaves quite different on remote server compared to on my local (ubuntu) PC

在我的本地电脑上,我是 运行 Ubuntu 20.10 Vim:

:version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Aug 11 2020 17:00:59)
Included patches: 1-716

在这个版本中,我可以使用 Ctrl + u 撤消文本 打开文件资源管理器 :Explore 这很好。

在另一台(远程)linux/ubuntu 机器上(我无权安装任何东西):

$ cat /proc/version
Linux version 4.15.0-1111-azure (buildd@lcy01-amd64-016) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)) #123~16.04.1-Ubuntu SMP Sat Mar 20 01:52:07 UTC 2021

和:

$ cat /etc/os-release 
NAME=Buildroot
VERSION=2014.02
ID=buildroot
VERSION_ID=2014.02
PRETTY_NAME="Buildroot 2014.02"

我不能使用那些 Vim 命令。例如。如果我:

:Explore
'Explore' is not implemented

Ctrl + u 也不起作用。进一步:

:help compatible
'help' is not implemented

我可以得到版本:

:version
1.22.1 2014-09-13 22:15:30 PDT

与我主机系统上的版本相比,它绝对是 Vim(vi?) 的另一个版本。

这台机器上是 Vi 的某个 vanilla/old/minimal 版本吗?

我怎么知道它是 Vi 还是 Vim(来自 :version 的信息非常有限)?

我可以使用箭头键进行导航,所以我希望它是 Vim.

的一些最小版本

也在远程机器上:

$ which vi
/bin/vi
$ which vim
$ whereis vim
sh: whereis: not found

您在该主机上拥有的既不是 Vim 也不是原始的 vi。它是“BusyBox vi”,a partial reimplementation of vi that is part of the BusyBox 项目。

如果您想要 Vim,您必须自己在 $HOME 中安装它,或者请该机器的管理员为您安装。


附带说明一下,Vim(和 vi)的普遍存在是一个可悲的普遍误解。

POSIX-认证系统必须有一个遵循规范的 vi 命令,但该命令的实际实现方式留给了供应商。在某些系统上,它可能是原始的 vi,在其他系统上,它可能是最小的 Vim,或最大的 Vim,或 nvi 等。然后你有 Linux 个供应商,他们通常尝试遵循规范但不受其约束。然后你有 VM/container-oriented 倾向于追求极简主义的发行版,甚至可能没有 vi 开始的命令。然后你有 Vim 本身,它可以在有或没有这个或那个功能的情况下构建,并且从未停止过进化,所以两个 Vim 很少相同。

在容器世界之外,假设在类 Unix 系统上存在 vi 命令是相对安全的,但是该命令的行为位于 vi 规范的范围内到最新 Vim 的完整 GUI 版本几乎是轮盘赌游戏。

在容器的世界里,最好不要做任何假设。