Linux 下 的Vim/Vi 操作指南

Linux 的Vim/Vi 操作指南

一、引言

1.1 为什么要学习 Vim/Vi

  • 系统必备工具:在 Arch Linux 等 Linux 发行版中,Vi/Vim 是默认的文本编辑器,无需额外安装
  • 远程服务器利器:在无图形界面的服务器环境中,Vim 是最强大的编辑工具
  • 高效编辑体验:通过快捷键组合实现极速文本处理
  • 终身技能:掌握 Vim 后可显著提升工作效率

1.2 前置准备

  • 一台安装了 Arch Linux 系统的电脑或VirtualMachine虚拟机
  • 基本的 Linux 命令行操作知识
  • 耐心和大量重复练习的决心

二、安装与启动

2.1 安装 Vim

bash 复制代码
# 更新软件源
sudo apt update

# 安装 Vim
sudo pacman -S vim

# 验证安装
vim --version

2.2 启动与退出

bash 复制代码
# 启动 Vim
vim

# 打开指定文件
vim filename.txt

# 退出 Vim
# 在命令模式下输入
:q

# 强制退出(不保存)
:q!

# 保存并退出
:wq

2.3 自动缩进配置

2.3.1 临时生效配置(当前会话)

在 Vim 命令模式下输入:

vim 复制代码
set autoindent
set smartindent
set tab终止=4
set shiftwidth=4
set expandtab
2.3.2 永久生效配置

编辑用户配置文件 ~/.vimrc

bash 复制代码
vim ~/.vimrc

添加以下配置:

bash 复制代码
# 自动缩进
set autoindent
# 智能缩进(根据语法自动调整缩进)
set smartindent
# 设置 tab 键宽度为 4 个空格
set tab终止=4
# 设置自动缩进宽度为 4 个空格
set shiftwidth=4
# 将 tab 键转换为空格
set expandtab

保存并退出后,配置将永久生效。

注意:

  • 统一使用空格缩进,避免混合使用 tab 和空格
  • 使用 :retab 命令将现有文件中的 tab 转换为空格

2.4 语法高亮配置

2.4.1 临时生效配置

在 Vim 命令模式下输入:

vim 复制代码
syntax on
2.4.2 永久生效配置

~/.vimrc 中添加:

bash 复制代码
# 启用语法高亮
syntax on
# 启用文件类型检测
filetype on
# 启用文件类型插件
filetype plugin on
# 启用文件类型缩进
filetype indent on
  • 执行 :set filetype? 查看当前文件类型
  • 执行 :set syntax? 查看当前语法高亮状态

三、基本模式介绍

3.1 三种主要模式

模式名称 模式说明 切换方法
普通模式 默认模式,用于移动光标和执行命令 Esc 键从其他模式切换
插入模式 用于输入文本 iao 等键进入
命令行模式 用于执行保存、退出等命令 : 键进入

3.2 模式切换技巧

  • Esc:从任何模式切换到普通模式
  • i:在光标前插入
  • a:在光标后插入
  • o:在当前行下方新建一行并插入
  • O:在当前行上方新建一行并插入

四、基础操作

4.1 光标移动

4.1.1 基本移动
复制代码
h - 向左移动一个字符
j - 向下移动一行
k - 向上移动一行
l - 向右移动一个字符
4.1.2 快速移动
复制代码
w - 移动到下一个单词开头
b - 移动到上一个单词开头
0 - 移动到行首
$ - 移动到行尾
G - 移动到文件末尾
gg - 移动到文件开头

4.2 文本编辑

4.2.1 删除文本
复制代码
dd - 删除当前行
dw - 删除一个单词
d$ - 删除从光标到行尾的内容
x - 删除光标所在字符
4.2.2 复制粘贴
复制代码
yy - 复制当前行
yw - 复制一个单词
p - 在光标后粘贴
P - 在光标前粘贴
4.2.3 撤销与重做
复制代码
u - 撤销上一步操作
Ctrl+r - 重做撤销的操作

五、高级操作

5.1 搜索与替换

5.1.1 搜索
bash 复制代码
/keyword - 向下搜索关键词
?keyword - 向上搜索关键词
n - 跳转到下一个匹配
N - 跳转到上一个匹配
5.1.2 替换
bash 复制代码
:s/old/new - 替换当前行第一个匹配
:s/old/new/g - 替换当前行所有匹配
:%s/old/new/g - 替换整个文件所有匹配
:%s/old/new/gc - 替换整个文件所有匹配,需要确认

5.2 多文件编辑

bash 复制代码
# 同时打开多个文件
vim file1.txt file2.txt

# 切换文件
:n - 切换到下一个文件
:N - 切换到上一个文件
:args - 查看当前打开的文件列表

5.3 分屏操作

bash 复制代码
:split - 水平分屏
:vsplit - 垂直分屏
Ctrl+w+w - 切换分屏
Ctrl+w+q - 关闭当前分屏

六、配置文件

6.1 全局配置文件

bash 复制代码
# 编辑全局配置文件
sudo vim /etc/vim/vimrc

6.2 用户配置文件

bash 复制代码
# 编辑用户配置文件
vim ~/.vimrc

6.3 常用配置项

bash 复制代码
# 显示行号
set number

# 自动缩进
set autoindent

# 语法高亮
syntax on

# 显示光标所在行
set cursorline

# 显示括号匹配
set showmatch

# 设置 tab 宽度为 4 个空格
set tabstop=4
set shiftwidth=4
set expandtab

# 启用鼠标支持
set mouse=a

# 设置编码为 UTF-8
set encoding=utf-8

七、常见问题与解决方案

7.1 无法退出 Vim

问题描述:不小心进入了 Vim,不知道如何退出

解决方案

  1. Esc 键确保处于普通模式
  2. 输入 :q:q!:wq 退出

7.2 配置不生效

问题描述 :修改了 .vimrc 但配置没有生效

解决方案

  1. 检查配置文件是否有语法错误
  2. 在 Vim 中执行 :source ~/.vimrc 重新加载配置
  3. 确保配置文件权限正确

7.3 中文乱码

问题描述:打开中文文件时出现乱码

解决方案

.vimrc 中添加以下配置:

bash 复制代码
# 设置文件编码自动检测顺序
# 优先尝试 UTF-8,然后依次是 GB2312、GBK、GB18030
# 确保 Vim 能正确识别各种中文编码文件
set fileencodings=utf-8,gb2312,gbk,gb18030

# 设置终端编码为 UTF-8
# 确保 Vim 与终端之间的编码一致,避免显示乱码
set termencoding=utf-8

# 设置 Vim 内部编码为 UTF-8
# 统一内部处理编码,确保文本处理的一致性
set encoding=utf-8

小拓展提示:

  1. 编码优先级
    • 配置顺序决定了编码检测的优先级
    • UTF-8 作为国际通用编码应放在最前面
  2. 中文兼容性
    • GB2312、GBK、GB18030 是中文常用编码
    • 确保覆盖所有可能的中文编码场景
  3. 终端匹配
    • 确保终端的编码设置与 Vim 的 termencoding 一致
    • 大多数现代终端默认使用 UTF-8 编码

7.4 快捷键冲突

问题描述:某些快捷键不工作或被其他程序占用

解决方案

  1. 检查终端模拟器的快捷键设置
  2. 在 Vim 中重新映射冲突的快捷键

八、高级配置与插件

8.1 安装插件管理器

Vundle 是为 Vim 编辑器设计的插件管理工具,它通过自动化插件的安装、更新、搜索和清理流程,从而极大简化了 Vim 插件的管理工作。

bash 复制代码
# 安装 Vundle
mkdir -p ~/.vim/bundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

8.2 常用插件推荐

  • NERDTree:文件浏览器
  • YouCompleteMe:代码补全
  • vim-airline:状态栏美化
  • ctrlp.vim:文件搜索

8.3 配置示例

bash 复制代码
set nocompatible              # 必须:关闭 Vi 兼容模式
filetype off                  # 必须:关闭文件类型检测
set rtp+=~/.vim/bundle/Vundle.vim # 设置 Vundle 的运行时路径
call vundle#begin()           # 必须:初始化 Vundle

# 让 Vundle 管理自身,这行必须存在
Plugin 'VundleVim/Vundle.vim'

" 在此处添加其他插件声明,例如:
" Plugin 'preservim/nerdtree'     # 文件浏览器
" Plugin 'tpope/vim-fugitive'    # Git 管理
" Plugin 'vim-airline/vim-airline' # 状态栏

call vundle#end()             # 必须:结束 Vundle 配置
filetype plugin indent on     # 必须:开启文件类型检测、插件和缩进

九、学习资源与练习

9.1 在线资源

9.2 练习项目

  1. 用 Vim 编辑自己的 .bashrc 文件
  2. 用 Vim 编写一个简单的 Python 脚本
  3. 尝试用 Vim 进行 Markdown 文档写作

十、总结

10.1 学习要点回顾

  • 掌握三种基本模式的切换;
  • 熟练使用光标移动快捷键;
  • 学会基本的编辑操作;
  • 配置个性化的 Vim 环境。
相关推荐
专注前端30年3 小时前
负载均衡实战项目搭建指南:从基础到高可用全流程
运维·数据库·负载均衡
码云数智-大飞3 小时前
负载均衡:让网站“扛得住”千万用户访问的秘密武器
运维·负载均衡
AI云原生与云计算技术学院3 小时前
提示系统负载均衡设计:架构师如何通过负载策略提升提示服务的稳定性
运维·ai·负载均衡
nudt_qxx4 小时前
CUDA编程模型与硬件执行层级对应关系
linux·人工智能·算法
猫头虎4 小时前
web开发常见问题解决方案大全:502/503 Bad Gateway/Connection reset/504 timed out/400 Bad Request/401 Unauthorized
运维·前端·nginx·http·https·gateway·openresty
开开心心就好4 小时前
免费轻量电子书阅读器,多系统记笔记听书
linux·运维·服务器·安全·ddos·可信计算技术·1024程序员节
RisunJan4 小时前
Linux命令-lvreduce (收缩逻辑卷空间)
linux·运维·服务器
袁袁袁袁满5 小时前
Linux命令sudo -i和su root有什么区别吗?
linux·运维·服务器·su root·sudo -i
Full Stack Developme6 小时前
语法树与自动化技术
运维·前端·自动化