16、Linux常用命令-vim 文本编辑

vim 是 Linux 系统中功能最强大、最常用的文本编辑器,基于经典的 vi 编辑器扩展而来,支持多模式编辑语法高亮代码补全多窗口操作 等高级功能,尤其适合编辑代码、配置文件和日志。其核心特点是模式化操作(不同模式下快捷键和功能不同)

1. vim 的启动与退出

a. 启动 vim

bash 复制代码
vim [文件名]  # 打开指定文件(若文件不存在,保存时会创建)
vim          # 直接启动 vim(无文件,需手动通过 [:w 文件名] 保存)

启动后默认进入命令模式(不可直接输入文本,需切换到输入模式)。

b. 退出 vim

退出需在命令模式 下执行(按 Esc 确保处于命令模式),常用退出命令:

命令 功能描述
:q 退出(若文件未修改,直接退出)
:q! 强制退出(不保存修改,丢弃所有变更)
:wqZZ 保存并退出(ZZ 是命令模式快捷键,无需输入 :
:wq! 强制保存并退出,是 root 用户要写入文件,但文件不允许写入,这样就还可以保存
:w 保存文件(不退出,可继续编辑)

2. vim 的核心模式

vim 有多种模式,核心是以下三种,模式切换是使用 vim 的基础:

模式 进入方式 功能描述
命令模式 启动 vim 默认进入;任何模式按 Esc 退回 执行快捷键命令(光标移动、删除、复制、粘贴等),不可直接输入文本。
输入模式 命令模式下按 i/a/o 可直接输入文本(类似记事本),按 Esc 退回命令模式。
末行模式 命令模式下按 : 进入 执行单行命令(保存、退出、查找替换、配置等),按 Enter 执行,按 Esc 退回命令模式。

a. 模式切换示意图:

b. 命令模式:核心操作

命令模式是 vim 的"操作中心",所有编辑操作(光标移动、删除、复制等)都在此模式下执行

i. 光标移动(精准定位)

快捷键 功能描述 等价方向键
h 光标向左移动一个字符
j 光标向下移动一个字符
k 光标向上移动一个字符
l 光标向右移动一个字符
gg 光标跳至文件首行 -
G 光标跳至文件尾行 -
nG 光标跳至第 n 行(如 5G 跳至第5行) -
^ 光标跳至当前行第一个非空字符(行首) Home
$ 光标跳至当前行末尾 End
w 光标向右跳一个单词(到下一词首) -
b 光标向左跳一个单词(到上一词首) -
Ctrl + f 向下翻一页(Forward) PageDown
Ctrl + b 向上翻一页(Backward) PageUp

ii. 文本编辑(删除、复制、粘贴、撤销)

(1)删除操作
快捷键 功能描述
x 删除光标所在位置的字符(同 Delete)
nx 删除光标开始的 n 个字符(如 3x 删除3个字符)
dw 删除从光标开始的一个单词(包括空格)
d$ 删除从光标到当前行末尾的所有内容
d^ 删除从光标到当前行开头的所有内容
dd 删除当前行(常用!删除后可粘贴)
ndd 删除从当前行开始的 n 行(如 2dd 删除当前行+下一行)
(2)复制与粘贴
快捷键 功能描述
yy 复制当前行(常用)
nyy 复制从当前行开始的 n 行(如 3yy 复制3行)
p 将复制/删除的内容粘贴到光标下方(新行)
P 将复制/删除的内容粘贴到光标上方(新行)
(3)撤销与重做
快捷键 功能描述 类似 Windows 操作
u 撤销上一步操作(Undo) Ctrl + Z
Ctrl + r 重做上一步被撤销的操作(Redo) Ctrl + Y
(4)替换字符
快捷键 功能描述
r 替换光标所在位置的单个字符 (按 r 后输入新字符,直接替换)
R 进入替换模式 (从光标位置开始,输入的字符会覆盖后续字符,按 Esc 退出)

iii. 查找与替换(命令模式快速操作)

(1)查找文本
  • 命令模式下按 /关键词 向下查找(从当前位置往后找);
  • ?关键词 向上查找(从当前位置往前找);
  • n 跳至下一个 匹配项;按 N 跳至上一个匹配项;
  • :noh 取消查找高亮(避免屏幕混乱)。

示例:

bash 复制代码
/error  # 向下查找所有包含 "error" 的位置
?warning  # 向上查找所有包含 "warning" 的位置
(2)快速替换(单行)

命令模式下按 cc 清空当前行并进入输入模式(快速重写一行);

S(大写)效果同 cc

c. 输入模式:输入文本(基础)

输入模式用于直接输入文本,从命令模式进入输入模式的常用方式(区别在于光标位置):

快捷键 进入输入模式的位置
i 在光标当前位置前插入
I 在当前行第一个非空字符前插入(行首插入)
a 在光标当前位置后插入
A 在当前行末尾插入
o 在当前行下方新建一行并插入,如果当前行是注释会带上#
O 在当前行上方新建一行并插入,如果当前行是注释会带上#

d. 末行模式:高级操作(命令行命令)

末行模式通过 : 进入,支持复杂命令(保存、查找替换、配置等),格式为 :命令 [参数]

a. 保存与退出(基础)

bash 复制代码
:w       # 保存当前文件(不退出)
:w 文件名 # 另存为指定文件(如 :w new.txt)
:q       # 退出(文件未修改时)
:q!      # 强制退出(不保存)
:wq      # 保存并退出(等价于 ZZ)
:wq!      # 强制保存并退出

b. 全局查找替换(核心功能)

格式::[范围]s/原内容/新内容/[选项]

  • 范围
    • 不指定:仅替换当前行;
    • n,m:替换第 n 行到第 m 行(如 1,5 表示1-5行);
    • %:替换所有行(全局替换);
  • 选项
    • g:全局替换(一行内所有匹配都替换,默认只替换第一个);
    • c:替换前确认 (每次替换会提示 y/n,防止误操作);
    • i:忽略大小写(如替换 "Error" 同时匹配 "error")。

示例

bash 复制代码
# 1. 替换当前行第一个 "old" 为 "new"
:s/old/new  

# 2. 替换全局(所有行)所有 "old" 为 "new"
:%s/old/new/g  

# 3. 替换第5-10行的 "hello" 为 "hi",且替换前确认
:5,10s/hello/hi/gc  

# 4. 全局替换 "Error" 为 "Warning",忽略大小写
:%s/error/Warning/gi  

c. 显示/隐藏行号

bash 复制代码
:set nu   # 显示行号(number 的缩写)
:set nonu # 隐藏行号

d. 分屏操作(多文件编辑)

bash 复制代码
:split 文件名   # 水平分屏(上半部分显示当前文件,下半部分显示新文件)
:vsplit 文件名  # 垂直分屏(左半部分当前文件,右半部分新文件)
Ctrl + w + w    # 切换分屏窗口(在命令模式下)
:q              # 关闭当前分屏窗口

vim -o 1.txt 2.txt # 上下分屏
vim -O 1.txt 2.txt # 左右分屏

e. 指定字符替换

bash 复制代码
:ab 自定义字符 长串字符 # 以后在输入模式输入自定义字符+回车会变成长字符串,如 :ab mymail 1083910359@qq.com

f. 其他实用命令

bash 复制代码
:!命令   # 在 vim 中执行外部 Linux 命令(如 :!ls 查看当前目录文件,按 Enter 返回 vim)
:r 文件名 | !命令 # 导入内容到光标位置,比如 :r !date -R 把当前日期导入到当前位置
:set paste  # 进入粘贴模式(解决复制粘贴时格式错乱问题,粘贴后用 :set nopaste 退出)
:help 关键词 # 查看 vim 帮助文档(如 :help dd 查看 dd 命令说明)

3. vim 配置:自定义编辑器(.vimrc)

通过修改用户家目录的 .vimrc 文件(若不存在则创建),可自定义 vim 行为(如默认显示行号、设置缩进等),提升使用体验。

常用配置示例(添加到 ~/.vimrc):

vim 复制代码
set nu          " 默认显示行号
set tabstop=4   " Tab 键宽度为4个空格
set shiftwidth=4 " 自动缩进宽度为4个空格
set autoindent  " 自动缩进(新行与上一行对齐)
set expandtab   " 将 Tab 转换为空格
set hlsearch    " 查找结果高亮
set incsearch   " 实时查找(输入时即时匹配)
syntax on       " 开启语法高亮(不同文件类型显示不同颜色)

保存后,新启动的 vim 会自动应用这些配置。

4. 高频命令

场景需求 命令/快捷键
进入末行模式 i(光标前插入)、a(光标后插入)
退出末行模式 Esc(退回命令模式)
保存并退出 :wqZZ(命令模式)
强制退出(不保存) :q!(末行模式)
光标移动到行首/行尾 ^ / $(命令模式)
光标移动到文件首/尾 gg / G(命令模式)
删除当前行 dd(命令模式)
复制当前行并粘贴 yy + p(命令模式)
撤销操作 u(命令模式)
全局替换文本 :%s/原内容/新内容/g(末行模式)

5. .swap隐藏文件

当 vim 之后没有正常退出,而是直接 ctrl + z退出了,会产生一个 .swap 的文件,再次 vim 文件会是只读模式,可以通过以下方式解决

bash 复制代码
ll -a # 查询隐藏文件,找到文件对应的 .swap 的隐藏文件
rm 隐藏文件 # 删除隐藏文件
vim 文件即可
相关推荐
剑动山河2 小时前
ubuntu 22.04 升级openssh默认版本8.9p1 到10.1p1
linux·ubuntu
huangyuchi.2 小时前
【Linux网络】基于UDP的Socket编程,实现简单聊天室
linux·网络·udp·网络通信·c/c++·socket编程·简单聊天室
egoist20232 小时前
[linux仓库]多线程同步:基于POSIX信号量实现生产者-消费者模型[线程·柒]
linux·运维·生产者消费者模型·环形队列·system v信号量
DeeplyMind2 小时前
linux drm子系统专栏介绍
linux·驱动开发·ai·drm·amdgpu·kfd
艾莉丝努力练剑2 小时前
【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上)
linux·运维·服务器·人工智能·ubuntu·centos·vim
拾光Ծ2 小时前
Linux高效编程与实战:自动化构建工具“make/Makefile”和第一个系统程序——进度条
linux·运维·自动化·gcc
差点GDP5 小时前
常用 Linux Shell 命令
linux
z202305087 小时前
Linux之vmlinux文件段布局和arm64 的链接脚本vmlinux.lds.S分析
linux·运维·服务器
濊繵8 小时前
Linux网络-Socket 编程 UDP
linux·网络·udp