第一次在Ubuntu虚拟机里打开终端准备改配置文件的时候,绝大多数人都会卡在同一个地方:界面是黑乎乎的,光标一闪一闪,随便按两下键盘就开始发出嘀嘀的警告音,最后只能把窗口强制关掉。这篇文章就围绕Ubuntu虚拟机中的Vim编辑器来聊,把从虚拟机环境准备、Ubuntu系统安装、Vim基础操作到日常踩坑排查的完整链路都梳理一遍。适合刚用VMware把Ubuntu跑起来、又需要改网络配置或写脚本的人看,也适合想系统梳理Vim命令的初学者做一次集中扫盲。
这套组合之所以值得专门写一篇,是因为它几乎是所有人在学习Linux过程中绕不开的第一关。虚拟机给了你一个随便折腾也不怕搞坏电脑的环境,Ubuntu是用户量最大的Linux发行版之一,Vim则是Linux服务器上永远存在的编辑器。把这三个东西串起来,你实际上就打通了一条从Windows桌面到Linux世界的路,后面无论是学运维、接触云服务器,还是搞开发部署,都用得上这套基本功。
1. 为什么选“虚拟机 + Ubuntu + Vim”这套组合
1.1 虚拟机能解决什么真实问题
很多人第一次听到虚拟机,第一反应是“这不就是在一个系统里装另一个系统吗,图个新鲜”。其实虚拟机解决的是三个特别现实的问题:隔离、快照和迁移。
隔离是最直观的。你在虚拟机里可以放心大胆地敲命令、改配置、装软件,哪怕把系统搞到起不来,宿主电脑也就是Windows桌面依然安然无恙,顶多也就是虚拟机这个窗口里的系统挂了。对初学者来说,这种“随便作死也不怕”的容错空间非常重要,因为学习Linux的过程本质就是不断试错的过程。
快照功能更是实操中的救命稻草。装好系统、配好基础环境之后打一个快照,后面如果再想折腾什么高风险操作,比如重装桌面环境、调整磁盘分区、编译安装大软件,出问题了直接恢复到之前的快照状态,几分钟就能回到干净环境。我自己的习惯是:系统刚装完、源换好、必备工具安装完之后必打一个快照,后面每完成一个阶段配置再打一个,这样整个学习过程都很有安全感。
还有一个容易被忽略的是迁移能力。虚拟机的本质是一个文件夹和几个配置文件,拷到另一台电脑上就能跑起来。你在单位的电脑上配置好环境,把虚拟机文件夹拷回家,直接就能接着用,不需要重新装系统,这比物理机方便太多了。
1.2 Vim在这套组合里的定位
再来说Vim。Vim的前身是vi,这是一个从1976年就存在的编辑器,几乎所有Unix/Linux系统都自带vi,但在很多精简版服务器系统里,你找不到图形界面编辑器,也不一定装得了VS Code,但vi一定在。Vim就是vi的增强版,增加了语法高亮、多窗口、插件系统等功能,所以它成了Linux世界里事实上的标准编辑器。
为什么说在虚拟机里学Vim特别合适?因为Vim的学习曲线有个非常陡峭的起步阶段,而虚拟机给了你一个低成本的练习环境。你不需要担心在服务器上误操作搞出问题,也不用担心在真实生产环境里手忙脚乱。在虚拟机里打开一个临时文件,随便练习hjkl移动、练习各种命令,按错了就按Esc重来,完全没有任何心理负担。
而且虚拟机里的Ubuntu有完整的图形界面,这意味着你可以在图形终端和Vim之间来回切换,一边查命令一边练习,这在纯命令行服务器上做不到。等你把Vim的基本操作练熟之后,切换到远程服务器场景,就会发现只是终端窗口变了,操作逻辑完全一致。这也是为什么这套组合是很多Linux入门教程的第一课。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:从零把Ubuntu虚拟机跑起来
2.1 虚拟机软件选型:VMware还是VirtualBox
在我接触过的虚拟机软件里,最常用的是VMware Workstation和Oracle的VirtualBox。两者都能跑Ubuntu,但体验差异还是有的,我直接说结论:如果电脑配置不是特别老旧,优先选VMware Workstation,兼容性和图形性能都更好;如果完全是个人学习用途、不想折腾激活或者在意开源,VirtualBox也完全够用。
从真实使用体验来看,VMware的安装过程对新手更友好,VMware Tools(也就是增强工具)装好之后,分辨率自适应、剪贴板共享、文件拖拽这些功能都很顺滑。VirtualBox则需要在安装之后手动安装增强功能,有时候还会遇到内核头文件版本不匹配的问题,虽然也不是大问题,但对新手来说多一个步骤就多一个坑。
从性能角度看,两者跑Ubuntu桌面版差别不大,但如果要在虚拟机里做编译、跑Docker之类的操作,建议优先考虑VMware,它对CPU调度和内存管理的优化更成熟一些。另外VMware Workstation Player是免费版本,日常学习完全够用,不用一开始就去折腾Pro版本的激活问题。
2.2 Ubuntu镜像怎么选
Ubuntu官方提供的镜像分为LTS(长期支持版)和普通版本,日常使用我强烈建议选择LTS版本。LTS每两年发布一次,官方提供长达五年的安全更新和维护,比如22.04 LTS、24.04 LTS,它们的稳定性经过了大量用户的验证,网上能搜到的问题处理方案也更多。
关于桌面版和服务器版的选择,在虚拟机里学习的话,我建议用桌面版(Desktop)。虽然我们的核心目标是学Vim、学命令行,但桌面版提供了图形化的浏览器、文件管理器、设置界面,对新手友好很多。比如网络连接出问题了,你还可以打开桌面右上角的网络图标看看状态,这在纯命令行服务器版里是没有的。
镜像下载认准Ubuntu官网和国内高校镜像站。官网速度慢的时候,可以到清华TUNA镜像站、阿里云镜像站下载,速度会快很多。下载的时候注意文件名里的版本号,比如ubuntu-22.04.4-desktop-amd64.iso,其中amd64表示64位x86架构,现在绝大多数电脑都是这个架构。
2.3 安装过程与资源配置
拿到ISO镜像之后,在VMware里新建虚拟机的流程大概是:选择典型配置,选择镜像文件为安装盘,设置用户名密码,分配磁盘容量。这里有几个容易踩坑的地方我逐个说。
内存分配方面,Windows宿主机如果16GB内存,建议给Ubuntu分配4GB;如果是8GB内存,就分配2到3GB,不要太贪心,否则宿主机卡顿会影响整体体验。CPU核心数给2到4个就行。磁盘容量建议60GB起步,使用“将虚拟磁盘存储为单个文件”选项。注意,这里分配的60GB不是立即占用60GB,而是随着使用逐渐增长,所以不用怕浪费。
处理器设置里有个容易忽略的关键项:在“虚拟化引擎”里勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”。如果这个选项没有正确启用,开机的时候会出现“客户机操作系统已禁用CPU”之类的报错,后面第5章我会详细讲这个问题。
安装Ubuntu的过程中,中文字体、中文语言包这些在安装完成后可以再补,安装时选择英语或中文都可以,关键是记住自己设置的用户名和密码。安装过程中会问“是否下载更新”,如果网络状况一般,建议先跳过,等装完系统再手动换源更新会更快更稳。
2.4 装完系统后的基础优化
系统安装完成后,第一件事不是急着学Vim,而是先把软件源换成国内的镜像源。Ubuntu默认的软件源服务器在国外,直接apt安装软件速度会很慢,有时候甚至超时。换源的核心原理是把下载地址从一个慢的服务器换成离你近的快速服务器,在国内用清华源或阿里源是主流选择。
我用清华源的操作步骤整理一下:打开终端,先把原来的源文件备份,然后编辑 /etc/apt/sources.list。Ubuntu 22.04及之后的版本用的源格式是 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse 这样的行,把里面默认的 archive.ubuntu.com 替换成 mirrors.tuna.tsinghua.edu.cn 就行。
换完源之后,用 sudo apt update 更新软件包索引,再 sudo apt upgrade 升级所有已安装软件。最后顺手把Vim装上,命令是 sudo apt install vim。Ubuntu系统通常自带的vi是精简版,用起来会少很多功能,比如方向键异常、没有语法高亮,所以安装完整的Vim是有必要的。
3. Vim编辑器上手:从打开文件到保存退出
3.1 模式机制:为什么Vim一上来让人懵
Vim劝退绝大多数新手的原因,就是它的“模式”设计。大多数常规编辑器只有一种状态:你敲什么字符,屏幕上就出现什么字符。Vim不一样,它把键盘输入分成好几种模式来理解,最常见的三种是普通模式、插入模式和命令行模式。
普通模式是Vim启动后的默认状态,在这个模式下,你按下的字母不是输入到文本里的内容,而是命令。比如按 j 代表光标向下移动一行,按 x 代表删除光标所在字符,按 dd 代表删除整行。这是一套和日常输入完全不同的逻辑,需要花一段时间来适应。
插入模式才是真正往文本里输入内容的状态,按 i 进入,进入之后就能像在记事本里一样打字了。打完字之后按 Esc 退出回到普通模式。命令行模式则是在普通模式下按冒号进入的,用于执行保存、退出、搜索替换等操作。
生活化的类比是这样的:Vim的普通模式相当于游戏里的“操作指令菜单”状态,每一个按键都是一个操作指令;插入模式则是“对话输入”状态,此时敲的键才进入文本。刚开始肯定会频繁忘记切模式,这是所有人的必经之路,不用沮丧,多练几次就习惯了。
3.2 核心命令速查表:打开、编辑、保存退出
我把平时最常用的Vim操作整理成了一张表,先掌握这些就够应对绝大多数场景了。
常用Vim命令速查表
| 操作类型 | 按键/命令 | 作用说明 |
|---|---|---|
| 打开文件 | vim filename |
用Vim打开指定文件 |
| 进入插入模式 | i |
在光标当前位置之前插入 |
| 进入插入模式 | a |
在光标当前位置之后插入 |
| 进入插入模式 | o |
在下一行插入新行 |
| 返回普通模式 | Esc |
退出插入模式/取消当前命令 |
| 保存文件 | :w |
在普通模式下输入冒号+ w,保存 |
| 退出Vim | :q |
退出,若文件未保存会提示 |
| 保存并退出 | :wq |
保存文件并退出 |
| 强制退出 | :q! |
不保存修改,强制退出 |
| 移动光标 | h j k l |
左/下/上/右移动 |
| 删除整行 | dd |
在普通模式下删除当前行 |
| 撤销 | u |
撤销上一步操作 |
| 搜索 | /关键词 |
在文件中搜索关键词,n 跳到下一个匹配 |
| 替换 | :%s/旧/新/g |
全文件把所有“旧”替换为“新” |
在这个表里面, :wq 是最高频使用的组合命令,所以我再单独强调一下它的执行逻辑。先按Esc确保自己在普通模式,再输入冒号、w、q这三个按键,最后按回车。如果文件名是新建的,还要在保存时指定文件名,比如 :w ~/test.txt。
实际操作中最容易犯的错是:在插入模式里直接输冒号wq,结果得到的是文本里多了“:wq”这几个字符。这就是模式混淆的典型表现。记住一个原则:所有以冒号开头的命令,都要先按Esc退到普通模式再输入。
3.3 配置一个能用的.vimrc文件
Vim裸奔状态下虽然能用,但体验确实一般。不想一上来就折腾复杂的插件管理器,先做几个基础配置就能让体验提升一大截。配置文件位于用户目录下的 .vimrc,如果文件不存在就创建一个。
我用的是下面这个最小配置,每一行的作用我都解释清楚:
code复制set number " 显示行号,定位时非常有用
set relativenumber " 显示相对行号,配合下方/上方跳转命令使用
syntax on " 开启语法高亮,看代码时舒服很多
set autoindent " 换行时自动缩进,写脚本比手动敲空格高效
set tabstop=4 " Tab占4个空格宽度
set shiftwidth=4 " 自动缩进步长为4个空格
set expandtab " 用空格代替Tab字符
set hlsearch " 搜索时高亮匹配结果
set incsearch " 边输入搜索词边高亮
set ignorecase " 搜索时忽略大小写
set smartcase " 但如果输入包含大写字母,则区分大小写
set cursorline " 高亮显示当前光标所在行
set showcmd " 显示底部的命令输入内容
set showmatch " 输入右括号时显示匹配的左括号
filetype on " 启用文件类型检测
这个配置不需要任何插件,写在 .vimrc 里保存即可,新建的Vim窗口会自动加载。如果改了配置想立即生效,在Vim里执行 :source ~/.vimrc 就行,不用重启Vim。
很多新人对配置文件的印象是比较高端、复杂,其实换一个角度理解就简单了:Vim就像一台没有出厂的编辑器,你必须通过配置文件告诉它你希望用什么风格工作。 .vimrc 就是一份“偏好设置文档”,写的每一条都对应一个开关,按需开启就行了。后面你有更多需求的时候再往里加配置项,这个文件会慢慢长大。
3.4 用vimtutor和vim大冒险来练手
光看命令记不住,这是正常的。Vim自带的 vimtutor 是一个系统内置的交互式教程,在终端里执行 vimtutor 就会打开一个专门教Vim操作的文档,里面是一步一步的练习,从移动光标到删除、修改、保存退出都有。我建议每个新手至少完整过一遍vimtutor,这个过程大概一个小时左右,做完之后基本能摆脱“不敢碰Vim”的状态。
还有一个比较有意思的学习方式是“Vim大冒险”,这是一个通过游戏来练习Vim操作的开源项目。它的交互逻辑和Vim一致,但你是在一个迷宫地图里行动,需要用Vim的快捷键来移动和操作角色,比如在地图上用 h 往左走,用 j 往下走,碰到需要交互的物体还得按对应的Vim命令。这种把学习融入游戏的方式确实能让键位记忆更牢固,适合在vimtutor之外作为补充练习。
我个人实际测试下来,vimtutor和Vim大冒险的组合学习方法很有效:先跟着vimtutor把基础操作逐个过一遍,理解每个命令的用途;然后在Vim大冒险里有目标地重复使用,加深肌肉记忆。大概两到三天的碎片时间练习之后,你再回到真实场景里编辑文件,会发现手指已经能下意识地按出正确的命令了。
4. 虚拟机与Vim协同的实操细节
4.1 宿主机与虚拟机的文件互传
用Vim编辑文件只是开端,真正让虚拟机环境好用起来,必然涉及文件在Windows宿主机和Ubuntu虚拟机之间的互传。我试过几种方案,使用频率和推荐程度从高到低排列如下。
最推荐的是VMware的共享文件夹功能。在VMware的虚拟机设置里,添加一个共享文件夹,把Windows本机的某个目录共享给虚拟机。开启之后,Ubuntu里会把这个共享目录挂载到 /mnt/hgfs/ 下面,你可以在虚拟机里直接读文件、在宿主机里写文件,两边文件名一致,编辑同步,非常方便。要使用这个功能,前提是VMware Tools已经安装好,否则共享文件夹不会生效。
第二个方案是用 scp 命令传输文件。在虚拟机的Ubuntu终端里,如果开启了SSH服务,可以在宿主机Windows上用命令行执行 scp 本地文件路径 用户名@虚拟机IP:目标路径,或者反过来用 scp 从虚拟机拉文件回宿主机。这个方案适合偶尔传输单文件,不依赖图形界面,也能顺便体验一下Linux命令行在网络传输中的工作方式。
第三个方案是直接用VMware的拖拽功能。安装了VMware Tools之后就支持从Windows桌面向Ubuntu窗口里拖文件,反之亦然。这个方案最直观,但也最不稳定,大文件或者大量文件拖拽时偶尔会失败,所以适合传小配置文件。
4.2 剪贴板共享与复制粘贴问题
在虚拟机里用Vim复制代码,结果在Windows里粘贴不上,这是很多人遇到过的尴尬问题。剪贴板共享同样依赖VMware Tools,安装好之后,Windows和Ubuntu之间就能双向复制粘贴了。
VMware Tools的安装方式在VMware菜单里就有选项,选择“安装VMware Tools”,Ubuntu桌面端会自动挂载一个虚拟光驱,里面有 tar.gz 格式的安装包。把它解压出来,进入目录,执行 sudo ./vmware-install.pl,然后一路回车用默认配置就好。安装完成并重启虚拟机之后,拖拽、剪贴板共享、分辨率自适应就都正常了。
如果你用的不是VMware而是VirtualBox,对应的功能叫“增强功能”,安装方式类似。实操经验是,安装增强功能有时会遇到编译失败的问题,原因是缺少内核头文件,这时先执行 sudo apt install linux-headers-$(uname -r) build-essential 补上依赖再重试,问题基本就能解决。
4.3 中文输入法与Vim中文显示
在虚拟机里用Vim编辑中文文档,容易遇到两个问题:一是中文显示乱码,二是想输入中文但输入法没配置好。
关于中文乱码,本质是Vim没有正确识别文件编码。Ubuntu默认使用UTF-8编码,如果你打开的是Windows传来的GBK编码文件,或者反之,就会出现乱码。解决方法是让Vim自动识别编码,在 .vimrc 里加上这几行:
code复制set fileencodings=utf-8,gbk,gb2312,big5
set termencoding=utf-8
set encoding=utf-8
其中 fileencodings 是Vim打开文件时的编码列表,它会从左到右尝试判断文件编码; encoding 是Vim内部显示使用的编码; termencoding 是终端显示使用的编码。配置好之后,再打开GBK编码的文件一般就能正确显示了。
中文输入法方面,Ubuntu桌面版默认带了一个IBus输入法框架,装完系统之后可以在系统设置中添加中文输入法,常见的选择是智能拼音。安装搜狗输入法也能在Ubuntu上用,但需要先安装fcitx输入法框架,然后从搜狗官网下载安装包,步骤相对多一些。从我的实际体验来说,日常在虚拟机里用Vim编辑文本,系统自带的IBus智能拼音就够用了,没必要一上来就折腾搜狗。
5. 常见问题排查与避坑记录
5.1 VMware的启动与连接问题
虚拟机用久了,一定会碰到几个让人头大的通用问题。我在各个技术社区里看到最多的问题就是“VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录”。
这个问题的原因多半是VMware相关的Windows服务没有正常运行。排查思路是:按下 Win+R,输入 services.msc 打开服务管理器,找到 VMware 开头的服务,比如 VMware Authorization Service、VMware DHCP Service、VMware NAT Service,确认它们的状态是“正在运行”。如果显示停止或禁用,右键把它们启动,并建议把启动方式改为“自动”,避免下次开机再次出问题。
另一个高频报错是“客户机操作系统已禁用 CPU。请关闭或重置虚拟机。”这基本可以判定是CPU虚拟化功能没有正确开启或传递到虚拟机里。解决步骤是:关闭虚拟机,在虚拟机设置里找到处理器选项,勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”,然后重启虚拟机。如果设置里这个选项是灰色的,说明宿主机BIOS/UEFI里的虚拟化功能没有开启,需要进入BIOS设置,找到Intel Virtualization Technology或AMD-V的选项并设为Enabled。
还有“虚拟机一直转圈”或者卡在开机界面不动的现象,很大概率是虚拟机配置的资源不够,比如内存分配太少、CPU核心数太少。可以在虚拟机设置里把内存调到4GB以上,CPU核心数调到2或4再试。如果是宿主机本身就紧张,优先考虑换成轻量的桌面环境。
5.2 虚拟化未正确开启时的处理
和虚拟化相关的问题不只在VMware里出现,Windows自带的WSL2也依赖虚拟化功能。如果你在Windows上用过 wsl --install,可能遇到过“WSL2 无法启动,因为此计算机上未启用虚拟化”的报错。这个报错的解决方法和VMware几乎一样,都需要确认BIOS/UEFI的虚拟化开关是否开启。
具体操作上,重启电脑,在开机画面时按Del或F2进入BIOS设置界面,不同主板的按键不同,比如戴尔是F2,联想是F1或F2,华硕是Del。进入之后找 Advanced Mode 或高级模式,再找 CPU Configuration 或者叫 Processor Settings,把 SVM Mode 或 Intel Virtualization Technology 设为 Enabled,保存退出。开机后可以在任务管理器里的“性能”选项卡中确认虚拟化是否已启用。
有几个容易忽略的点:一是CPU型号本身就支持虚拟化,但BIOS默认关闭了开关;二是开启虚拟化后Windows下如果使用了其他Hypervisor功能,有时会与VMware冲突,可以暂时关闭Windows功能里的Hyper-V、虚拟机平台,避免同时抢资源;三是笔记本的BIOS入口可能有差异,但关键词搜索基本能查到自己机型的具体路径。
5.3 Vim使用中的常见毛病
在虚拟机的Ubuntu里用Vim,还有几个高频小毛病会让新手特别难受,我打包整理一下排查方案。
方向键按下出现ABCD字符的问题。用完整版Vim之后一般不会出现,但如果仍遇到这种情况,说明Vim可能运行在vi兼容模式,或者终端对按键序列的解析有问题。解决办法是在 .vimrc 里加上 set nocompatible,同时确认已经安装了 vim 而不是 vim-tiny。
按退格键(Backspace)无法删除字符,这是新手在插入模式下最常遇到的问题。原因跟 Vim 的 backspace 选项有关。在 .vimrc 里加上 set backspace=indent,eol,start,这样无论光标在哪,退格键都能正常删除前面的字符。
退出Vim时不知所措的问题,则要来来回回强调模式的概念。如果按 :q 提示文件已被修改而无法退出,可以使用 :q! 放弃修改强制退出。如果连命令模式都没法进入,直接按 Q 进入了Ex模式,按Esc,再输入 :q! 退出。
中文显示乱码的问题前面已详细写过配置方法,但还有一个隐蔽点:如果文件本身是UTF-8编码,但系统地区设置为非UTF-8语言环境,也可能出现显示异常。检查一下环境变量 echo $LANG,如果是中文系统应该显示类似 zh_CN.UTF-8 的字符串,如果不是就可以安装中文语言包。
5.4 从虚拟机到远程服务器的思路延伸
当你在虚拟机的Ubuntu里把Vim操作练熟之后,自然会有一种需求:以后到了真实的云服务器上,总不能也开个虚拟机模拟吧。这里先给一个思路:本地虚拟机环境主要用于实验和练习,生产环境通常直接用SSH登录远程服务器操作。
在虚拟机里练习SSH连接也是一个很自然的进阶路径。在宿主机Windows上执行 ssh 用户名@虚拟机IP,输入密码就能登录进虚拟机的终端,这时候使用的Vim服务和在虚拟机图形界面里操作是完全一样的。如果你还会用Windows自带的PowerShell或者安装Windows Terminal,把SSH加进去之后,在Windows里操作远程Linux就更顺手了。
这个思维转换很重要。Vim在虚拟机里练熟了之后,实际上任何一台Linux服务器的终端就是你的工作台,Vim是这台工作台上的默认编辑器。你不需要再依赖图形界面,只需要一个终端窗口就能完成绝大多数文件编辑任务,这也是为什么Vim在运维和开发领域经久不衰的原因。
我个人在实际操作中的体会是,在虚拟机里学Vim有两条捷径。第一条捷径是强制自己“能用命令行就不用鼠标”,在编辑文件的时候尽量用Vim的命令完成移动、删除、复制,而不是靠方向键和鼠标选择,这会快速建立键位记忆。第二条捷径是不要追求一次学完所有命令,Vim有几百个命令,绝大多数人每天都只用到其中二三十个,先把打开、编辑、保存、退出、移动、搜索这六类操作练扎实,后面再遇到什么冷门需求就去查命令表,慢慢补充到自己的操作体系里。
最后再分享一个小技巧:如果你在虚拟机里发现某个Vim操作特别繁琐,说明大概率有一个更高效的命令存在,只是还没被你发现。无论是进插入模式之前想好了要输入什么,还是用后视操作跳转光标位置,Vim的设计哲学是让每个高频动作都有对应的快捷键。保持这种“我在用80%的精力做20%的事”的觉察,你的Vim水平会在不知不觉中提升很多。希望这篇从虚拟机到Vim的完整操作记录,能帮你少走一些我当年走过的弯路。
