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 版本几乎是轮盘赌游戏。
在容器的世界里,最好不要做任何假设。
在我的本地电脑上,我是 运行 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 版本几乎是轮盘赌游戏。
在容器的世界里,最好不要做任何假设。