虚拟机里的vim和你宿主机上的vim是同一份软件,差别全在终端环境:字符集、剪贴板、鼠标支持这三件事要在虚拟机内部单独处理一遍。 换句话说,宿主机上顺手的那套习惯,搬进虚拟机后不是错了,而是缺配置。
先看清虚拟机里vim的运行环境差在哪
宿主机能用、虚拟机别扭的三个变量
vim 本身不关心自己跑在物理机还是虚拟机上,它只关心自己连着什么样的终端,落到 VMware、VirtualBox、Hyper-V 这类环境里,真正变化的只有三处。
- 终端类型:虚拟机窗口里的控制台终端,
$TERM常常是xterm或linux,颜色、功能键、鼠标事件的识别能力弱于本机的 iTerm2、Windows Terminal。 - 字符集环境:
LANG、LC_ALL没设好,中文注释就是一屏问号,这跟 vim 无关,是 locale 的问题。 - 剪贴板通道:宿主机和虚拟机之间隔着虚拟化层,vim 的
"+y要拿到系统剪贴板,得先有 X11 或增强工具在中间牵线。
三种常见操作方式的体验对照
| 操作方式 | 典型场景 | vim 体验上的差别 |
|---|---|---|
| 在虚拟机窗口里直接开终端 | 本地 VMware、VirtualBox 练习环境 | 复制粘贴依赖增强工具,中文字体需单独配置 |
| 从宿主机 SSH 到虚拟机 | 虚拟机跑在服务器或另一台机器上 | 复制粘贴由本地终端接管,最省心 |
| 通过共享文件夹、挂载目录改文件 | 宿主机写代码、虚拟机里跑服务 | 文件属主和换行符容易出问题,建议统一 LF |
行业内比较一致的做法是:能 SSH 就 SSH,SSH 进去后,你用的是宿主机的终端和输入法,剪贴板、字体、快捷键全部继承本机习惯,虚拟机只负责跑进程,据公开资料,vim 长期是 Linux 发行版预装的默认编辑器之一,Red Hat 系、Debian 系都把它放在基础镜像里,这也意味着多数虚拟机开机就自带,不用额外装。
虚拟机里vim怎么用:从敲开文件到保存退出
先接受它不是记事本
新手最容易卡住的点,是把 vim 当记事本用,vim 是模态编辑器,同一批按键在不同模式下含义完全不同,打开文件后你默认处在普通模式,敲 i 才进插入模式开始打字,打完按 Esc 回到普通模式,再用 开头的命令去做保存、退出、替换。
一套够用三周的按键
vim 文件名打开;文件不存在时会新建,但只有w之后才真正落盘。i在光标前插入,a在光标后插入,o在下一行新开一行。Esc回普通模式, 进命令行模式。w保存,q退出,wq保存并退出,q!丢弃修改强退。- 向下搜索,
n跳下一个,N跳上一个。 dd删当前行,yy复制当前行,p粘贴,u撤销,Ctrl+r重做。gg到文件首行,G到末行,数字G跳到指定行。%s/旧内容/新内容/g全文件替换,把g换成gc会逐处确认。
一份可直接抄进 .vimrc 的配置
在虚拟机里创建 ~/.vimrc,粘进下面几行,日常编辑就顺手了。
set nocompatible
set number
set tabstop=4
set shiftwidth=4
set expandtab
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,gbk,gb18030,latin1
set mouse=a
syntax on
set mouse=a 这一行在虚拟机里尤其值钱,开了之后可以用鼠标点光标位置、拖选文本,操作直觉立刻向普通编辑器靠拢。
虚拟机里vim和vi的区别:为什么你的按键没反应
有人照着教程敲 dd、u,结果毫无反应,八成是敲的 vi 而不是 vim,这两者在多数发行版里指向同一个程序,但启动参数不同。
- 用
vi启动时,vim 会进入 vi 兼容模式,u只能撤销一步,方向键可能插入乱码字符,退格键行为也不对。 - 用
vim启动则是完整模式,.vimrc会正常加载。 - 部分精简镜像装的是
vim-tiny,功能被裁剪,+clipboard、语法高亮都缺。
对比一下:Ubuntu 上 sudo apt install vim 装完整版,Debian 上同理;CentOS、Rocky 系用 sudo yum install vim-enhanced 或 sudo dnf install vim-enhanced,装完用 vim --version | head -5 看一眼版本和特性列表,心里有底。
顺带一提,在 .vimrc 第一行写 set nocompatible,可以避免某些系统上 vi 兼容模式带来的连锁问题。
虚拟机vim中文乱码怎么解决:从locale查到fileencoding
中文乱码分三层,顺序别搞反,从外往里查。
第一层:系统 locale
在终端执行 locale,看 LANG 是不是 C 或 POSIX,如果是,中文环境基本没戏,修改 /etc/locale.conf(CentOS、Rocky)或 /etc/default/locale(Ubuntu),写入 LANG=zh_CN.UTF-8 或 LANG=en_US.UTF-8,登出重进生效,更简单的替代方案是用 en_US.UTF-8,界面英文但中文文件不乱码,服务器上很多人这么干。
第二层:终端本身的编码
虚拟机窗口终端如果被设成 GBK,vim 里显示 UTF-8 文件就会花屏,VMware、VirtualBox 的终端设置里把字符集改成 UTF-8,或者直接 SSH 进来绕开这个问题。
第三层:文件自身的编码
在 vim 里执行 set fileencoding? 查看当前识别结果,如果是 latin1,说明识别错了,用 e ++enc=gbk 以 GBK 重新读入;确认内容正常后,set fileencoding=utf-8 再 w,就把文件转成了 UTF-8。.vimrc 里的 fileencodings 顺序决定了 vim 的探测顺序,把 utf-8 放最前面通常最稳。
虚拟机和宿主机之间vim复制粘贴失败怎么办
这是虚拟机场景里被问得最多的一类问题,原因基本只有两个。
先确认 vim 带不带剪贴板支持
执行 vim --version | grep clipboard,看到 +clipboard 才能用 "+y 复制到系统剪贴板、"+p 从系统剪贴板粘贴,看到 -clipboard 就是没编进去,装 vim-gtk3(Ubuntu)或 vim-X11 即可。
再确认虚拟机增强工具装没装
- VMware:确认虚拟机设置里“选项客户机隔离”中的复制粘贴已勾选,并安装 open-vm-tools 或 VMware Tools。
- VirtualBox:安装增强功能包(Guest Additions),装完后双向剪贴板才生效。
- Hyper-V:使用增强会话模式。
实在懒得折腾的替代路径
- 在 vim 里
set paste再粘,能避免自动缩进把代码搞成阶梯状。 - 选中即复制:
set mouse=a之后用鼠标拖选,虚拟机终端一般会把选区送进宿主机剪贴板。 - 再不行就走 SSH 或共享文件夹,把文件当作中转站,反而最稳。
在简米云ECS这类云虚拟机里装vim和找配置
云主机本质也是虚拟机,只是你摸不到它的显示器,Ubuntu 系执行 sudo apt update && sudo apt install vim,CentOS 系执行 sudo dnf install vim-enhanced,配置文件分两级:
- 全局配置:Ubuntu 是
/etc/vim/vimrc,CentOS 系是/etc/vimrc。 - 用户配置:
~/.vimrc,优先级更高,改坏了只影响自己,推荐先从这里下手。
改完用 source ~/.vimrc 立即生效,不用退出重开。
业内专家指出,服务器环境下用 .vimrc 做轻量定制,比装整套插件更利于排障,虚拟机本来就常被当成一次性环境,配置越薄,重建越快。
会了这些,虚拟机里的vim就不再别扭
虚拟机不该成为你放弃 vim 的理由,它只是要求你把终端、编码、剪贴板这三件外围的事补齐,补完之后,SSH 也好、本地窗口也好,操作手感就和宿主机上没区别了。
虚拟机里vim常见问题问答
虚拟机里vim方向键变成 ABCD 怎么处理?
这是 vi 兼容模式的典型表现,在 ~/.vimrc 里加 set nocompatible,并确认是用 vim 而不是 vi 启动,精简版 vim-tiny 也可能出现类似问题,换成完整版 vim 即可。
虚拟机里vim打开大文件卡顿明显怎么办?
先排除虚拟机显示层的影响,把窗口降到最小或用 SSH 接入,vim 侧可以临时 set nowrap、set noswapfile、syntax off,关闭换行计算、交换文件和语法高亮,千行级日志的翻页速度会明显回升。
虚拟机里vim的配置改动重启后丢失是怎么回事?
多数情况是把命令敲在了运行时,没有写进文件。set number 只在当前会话有效,要持久化必须写进 ~/.vimrc 或 /etc/vim/vimrc,写完后 source ~/.vimrc 生效,重启后由 vim 自动加载。