文章列表
6 分钟阅读
更新于

Linux 系统 Vim 编辑器终极指南:从入门到精通


系列:Linux 命令基础

第 14 / 16 篇

  1. Tmux 入门教程:让 SSH 断线和多任务终端不再中断
  2. Tree 命令教程:快速查看和导出目录结构
  3. Linux 搜索命令教程:find、grep、locate、rg 应该怎么选
  4. Linux 压缩与解压命令教程:tar、zip、gzip、xz、zstd 一次讲清
  5. Linux 文本处理命令教程:cat、less、head、tail、wc、sort、uniq
  6. Linux 权限命令教程:chmod、chown、umask
  7. Linux 进程查看与管理:ps、top、htop、kill、jobs
  8. Linux 网络排查命令:ss、curl、dig、ping、traceroute
  9. systemctl 与 journalctl 入门:管理服务和查看日志
  10. rsync 使用指南:服务器文件同步与备份
  11. Linux 服务器安全基础:SSH、用户权限、防火墙和 fail2ban
  12. 线上问题排查流程:日志、端口、进程、磁盘、网络怎么一步步看
  13. 深入浅出:Linux 树状目录神器 tree 命令的安装与使用指南
  14. Linux 系统 Vim 编辑器终极指南:从入门到精通
  15. SSH 隧道实战:本地转发、远程转发和动态转发
  16. SSH Config 使用指南:别名、跳板机与多服务器管理

背景

Vim 是 Linux 和 macOS 系统上预装的文本编辑器,通过纯键盘操作完成代码编写、配置修改等任务。在服务器环境中,图形界面往往不可用,Vim 就成为必备工具。但它的模式切换和快捷键设计让很多初学者卡在退出编辑这一步。本文从实际使用的角度,整理 Vim 的安装、模式概念、高频操作、可视模式、.vimrc 配置和插件管理方法,帮助快速跨过入门阶段。

这里假设你有一个可用的终端,已通过 SSH 或本地登录 Linux 系统。Vim 通常已预装,如果没有,使用包管理器安装即可。

步骤

1. 检查或安装 Vim

多数发行版会预装 Vim 的精简版(vim-tiny),完整功能需要安装完整版。

Terminal window
# Debian/Ubuntu
sudo apt update && sudo apt install vim
# CentOS/RHEL/Fedora
sudo dnf install vim
# 确认版本及是否支持剪贴板等特性
vim --version

安装后可通过 vim 命令直接启动。

2. 理解三种基本模式

Vim 的核心设计是模式切换,所有操作都基于当前所在的模式。

普通模式:打开文件后的默认模式,用于导航、删除、复制等。在任何模式下按 Esc 可返回普通模式。

插入模式:用来输入文本。从普通模式进入的常用方式:

  • i 在光标前插入
  • a 在光标后插入
  • o 在下方新起一行并插入
  • O 在上方新起一行并插入

命令模式:在普通模式下按 : 进入,用于保存、退出、搜索、执行配置命令。输入命令后按回车执行,执行完自动回到普通模式。

Vim 官方文档对模式的详细说明见 Vim 用户手册

3. 打开、保存与退出

终端中执行:

Terminal window
vim filename # 打开已有文件或新建文件

编辑完成后,在普通模式下按 : 进入命令模式:

Terminal window
:w # 保存
:q # 退出
:wq # 保存并退出
:q! # 放弃修改并退出
:w newname.txt # 另存为

如果意外卡在 Vim 里,连续按 Esc 再输入 :q! 强制退出。

4. 光标移动与文本编辑基础

普通模式下的光标移动是效率的基础,熟练后可以脱离方向键。

Terminal window
h 左移一个字符 j 下移一行
k 上移一行 l 右移一个字符
0 跳到行首 $ 跳到行尾
gg 跳到文件开头 G 跳到文件末尾
50G 跳到第50行
Ctrl+f 向下翻页 Ctrl+b 向上翻页

编辑操作需要搭配动作和范围:

Terminal window
x # 删除光标所在字符
dd # 删除当前行
yy # 复制当前行
p # 在光标后粘贴
u # 撤销
Ctrl+r # 重做

5. 批量操作与组合命令

Vim 的命令可以组合数字和范围来批量处理。

Terminal window
3dd # 删除3行(从当前行开始)
5yy # 复制5行
d$ # 从光标处删到行尾
d0 # 从光标处删到行首
yiw # 复制光标所在单词
ciw # 删除当前单词并进入插入模式
ci" # 修改双引号内的内容(光标需在引号内)

这类操作需要一些练习,但它们一旦成为肌肉记忆,编辑文本的速度会明显提升。

6. 可视模式:选中、复制、缩进

可视模式允许像用鼠标拖选一样选中文本块,然后执行操作。按 v 进入字符可视模式,按 V 进入行可视模式,按 Ctrl+v 进入块可视模式。选中区域后可以:

Terminal window
y # 复制选中内容
d # 删除选中内容
> # 向右缩进(一次 shiftwidth)
< # 向左缩进

例如:选中多行后按 > 统一增加缩进,在调整代码结构时很常用。

7. 搜索与全局替换

普通模式下按 / 进入正向搜索,? 进入反向搜索。

Terminal window
/error # 向下搜索 error
?TODO # 向上搜索 TODO
n # 跳转到下一个匹配
N # 跳转到上一个匹配

替换操作在命令模式下进行:

Terminal window
:%s/old/new/g # 全文替换,把 old 换成 new
:10,20s/old/new/g # 仅替换第10到20行
:%s/old/new/gc # 每次替换前询问确认

官方对搜索和替换的详细参数说明可参考 Vim 帮助 :substitute

8. 窗口与标签页管理

Vim 支持分割窗口和多标签页,便于同时查看多个文件。

Terminal window
:split file2.txt # 水平分屏打开 file2.txt
:vsplit file3.txt # 垂直分屏打开 file3.txt
Ctrl+w + 方向键 # 在分屏窗口间切换
Ctrl+w = # 均分窗口大小
:tabnew file4.txt # 新建标签页打开文件
gt # 下一个标签页
gT # 上一个标签页

这在对照配置文件或代码时很实用。

9. 配置 .vimrc 文件

Vim 的个性化设置通过主目录下的 .vimrc 文件实现。

Terminal window
vim ~/.vimrc

常用配置示例:

Terminal window
" 基础外观
set number " 显示行号
set relativenumber " 显示相对行号(便于跳转)
syntax on " 开启语法高亮
" 缩进设置
set tabstop=4 " tab 显示宽度
set shiftwidth=4 " 自动缩进宽度
set expandtab " tab 转换为空格
set autoindent " 继承上一行缩进
" 搜索相关
set incsearch " 边输入边高亮匹配
set hlsearch " 保留搜索结果高亮
set ignorecase " 忽略大小写
set smartcase " 有大写字母时区分大小写
" 其他实用项
set mouse=a " 允许鼠标点击定位
set backupdir=~/.vim/tmp//,~/tmp//,. " 集中存放备份文件
set undofile " 持久化撤销记录,关闭文件后仍可撤销

详细的配置选项可以在 Vim 内通过 :help options 查看官方说明。

10. 用 vim-plug 管理插件

插件可以扩展 Vim 的功能,比如文件树、状态栏、代码补全。推荐使用 vim-plug 管理插件。

安装 vim-plug:

Terminal window
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

.vimrc 中添加插件列表:

Terminal window
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree' " 文件树
Plug 'vim-airline/vim-airline' " 底部状态栏增强
Plug 'tpope/vim-commentary' " 快速注释/取消注释(gcc)
Plug 'morhetz/gruvbox' " 配色主题
call plug#end()

保存文件后,在 Vim 中执行 :PlugInstall 即可安装所有插件。之后重启 Vim 或执行 :source ~/.vimrc 让配置生效。

NERDTree 的用法::NERDTree 打开文件树,在文件树窗口内按 ? 查看帮助。vim-commentary 可以用 gcc 快速注释/取消注释当前行,适合频繁调试代码。

常见问题

1. 卡在 Vim 里退不出来

Esc 几次确保回到普通模式,然后输入 :q! 强制退出。如果想保存后再退,输入 :wq

2. 粘贴外部代码时缩进错乱

这是自动缩进和粘贴内容中的多余空格叠加导致的。粘贴前在普通模式下执行:

Terminal window
:set paste

粘贴完后再执行 :set nopaste 恢复常规缩进。或者在 .vimrc 中设置快捷键切换粘贴模式:

Terminal window
set pastetoggle=<F3>

3. 打开文件时提示 swap 文件已存在

这是因为上次 Vim 异常退出留下了交换文件(.filename.swp)。提示信息中会给出几个选项,通常按 R 恢复上次的修改,或按 D 删除交换文件(确认旧修改不需要保留)。如果经常遇到,可以在 .vimrc 中指定 swap 文件统一存放:

Terminal window
set directory=~/.vim/swap//,~/tmp//,.

4. 保存文件时提示 “E212: Can’t open file for writing”

通常是权限问题。用 ls -l filename 检查文件权限。如果是只读文件,可以用 :w !sudo tee %sudo 权限写入,但更稳妥的做法是退出后用 sudo vim filename 重新编辑。

5. 显示中文等非 ASCII 字符乱码

.vimrc 中明确指定编码:

Terminal window
set encoding=utf-8
set fileencodings=utf-8,gbk,gb2312,cp936
set termencoding=utf-8

如果打开已有文件仍乱码,可以用 :e ++enc=gbk 强制以 gbk 编码重新加载。

6. 撤销历史在关闭文件后丢失

默认 Vim 的撤销记录只在编辑会话内有效。要持久化,在 .vimrc 中加入:

Terminal window
set undofile
set undodir=~/.vim/undo

并确保 ~/.vim/undo 目录存在。之后每个文件都会生成一个 undo 历史文件,下次打开时可以继续使用 u 撤销。

总结

Vim 的上手成本主要花在理解三种模式以及记住常用快捷键上。初期可以把基础操作(移动、删除、复制、粘贴、撤销、保存退出)练到不假思索,再逐步接触可视模式、窗口管理、.vimrc 定制和插件。内置的 vimtutor 命令提供了一个约30分钟的交互式教程,适合初次学习。遇到不清楚的命令或配置,直接在 Vim 里用 :help 关键字 查阅文档,能解决大部分问题。