从入门到熟练:Vim高效编辑的20个肌肉记忆技巧

admin 2026-06-30 07:31:59 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档系统介绍Vim高效编辑的20个核心技巧,涵盖模式切换、光标移动、文本操作等关键操作,强调通过三周刻意练习形成肌肉记忆。提供具体学习路径、配置示例及适用场景,适用于运维、开发人员提升编辑效率。 综合评分: 82 文章分类: 其他


cover_image

从入门到熟练:Vim 高效编辑的 20 个肌肉记忆技巧

点击关注 👉 点击关注 👉

马哥Linux运维

2026年6月27日 13:00 广东

在小说阅读器读本章

去阅读

从入门到熟练:Vim 高效编辑的 20 个肌肉记忆技巧

一、问题背景

Vim 是每个 Linux 运维、DBA、后端工程师绕不开的工具。哪怕你不是天天写代码,看日志、改配置、写脚本、排错,几乎都要碰 Vim。但大多数人对 Vim 的印象停留在”按 i 进入编辑、ESC 退出、保存退出 :wq”这一层,剩下的全靠 ↑↓←→ 和方向键慢慢摸。

熟练 Vim 的好处是肉眼可见的:

  • 编辑速度从分钟级压到秒级
  • 远程服务器上没法装 IDE,唯一能用的就是 Vim
  • 大文件编辑效率吊打 nano、sed
  • 配置文件改错可以一键 undo

肌肉记忆不是靠背,是靠练。这 20 个技巧选的是最高频、最有杠杆效应的,每天花 10 分钟连三天就能定型。

二、适用场景

  • 远程服务器改配置、改脚本
  • 看日志、过滤日志、统计日志
  • 写 shell、Python、yaml、ini
  • 编辑大文件(GB 级)
  • 在容器内调试
  • 在 CI 流水线出错时手动改代码
  • 应急救援时没有 IDE
  • 老旧系统只有 Vi
  • 面试被问到 Vim
  • 团队 vimrc 不一致时的统一配置
  • 嵌入式设备调试
  • 文本处理(替代 awk、sed 简单场景)
  • 代码 review 时标注
  • 写 Markdown、技术文档

三、核心知识点

3.1 Vim 的四个模式

Vim 不是单一编辑器,是模式化编辑器:

  1. Normal(普通模式):默认模式,移动光标、操作文本
  2. Insert(插入模式):i/a/o 进入,输入字符
  3. Visual(可视化模式):v/V/Ctrl-v,选择文本
  4. Command(命令模式):: 进入,执行命令

还有 Replace(替换模式):R 进入。

3.2 模式之间的切换

  • i:插入到光标前
  • a:插入到光标后
  • o:在下方新行插入
  • O:在上方新行插入
  • I:在行首插入
  • A:在行尾插入
  • ESC:从任意模式回 Normal
  • Ctrl-[:ESC 的等价快捷键

3.3 Normal 模式下的核心动作

  • 光标移动:h/j/k/l
  • 词移动:w/b/e
  • 行首行尾:0/$/^
  • 上下翻页:Ctrl-u/Ctrl-d
  • 文件首尾:gg/G
  • 字符查找:f/t + char
  • 行内查找:F/T + char
  • 删除:d + motion
  • 复制:y + motion
  • 粘贴:p/P
  • 撤销:u/Ctrl-r

3.4 数字前缀的力量

Vim 几乎所有命令都可以加数字:

  • 5j:下移 5 行
  • 3w:前进 3 个词
  • 2dd:删除 2 行
  • 4yy:复制 4 行
  • 10G:跳到第 10 行

数字前缀是 Vim 提速的核心。

3.5 operator + motion

Vim 的核心是 operator + motion:

  • d:delete
  • y:yank(复制)
  • c:change(删除 + 进入插入模式)
  • > :缩进
  • <:反缩进
  • v:visual

motion 是动作范围:

  • w:词
  • $:到行尾
  • 0:到行首
  • G:到文件尾
  • gg:到文件首
  • /pattern:到下一个匹配
  • ?pattern:到上一个匹配

3.6 text object

text object 是 Vim 的另一个杀器:

  • iw:inner word(当前词)
  • aw:a word(含空格)
  • i”:inner ” ” 内容
  • a”:含 ” ” 的内容
  • i):括号内
  • it:tag 内(HTML/XML)

3.7 寄存器和宏

  • 默认寄存器:无名 “
  • 命名寄存器:a-z
  • 系统剪贴板:+(需 vim-x11 或 vim-gtk)
  • 黑洞寄存器:_(丢弃内容)
  • 录制宏:q + 字母开始,q 结束,@ + 字母执行

3.8 窗口与缓冲区

  • :split:水平切窗
  • :vsplit:垂直切窗
  • Ctrl-w + 方向键:切换窗口
  • :tabnew:新建标签页
  • gt/gT:切换标签页
  • :b:切换到第 N 个缓冲区

3.9 命令历史

Vim 会记住你的命令历史:

  • q/:搜索历史
  • q::命令历史
  • q?:搜索历史(旧语法)

四、整体学习路径

按下面的顺序练,每个动作每天练 10 次:

第一周:模式切换 + 基础移动(i/a/o、ESC、hjkl、0/$、gg/G)

第二周:operator + motion(d/y/c + 各种 motion)

第三周:text object + 数字前缀

第四周:搜索替换 + 寄存器 + 宏

第五周起:配置、插件、组合技

把每天的高频操作全部走一遍,三周就能形成肌肉记忆。

五、20 个肌肉记忆技巧

下面这 20 个,按”高频 + 高杠杆”排序。

技巧 1:模式切换用 i/a/o/O/I/A + ESC,不要用方向键

不要用 ↑↓←→ 移动光标,浪费 4 次按键。用 h/j/k/l。

进入插入模式的最佳位置:

  • i:当前位置前
  • a:当前位置后
  • o:下方新行
  • O:上方新行
  • I:行首
  • A:行尾

ESC 可以按 Ctrl-[,更快。

肌肉记忆:每次想”开始打字”就 i,要”换一行继续”就 o,要”在这一行结尾加东西”就 A。

技巧 2:hjkl 移动,不要用方向键

hjkl 移动的好处:

  • 不需要离开主键区
  • 距离短
  • 与其他快捷键组合方便

练法:把方向键当成”作弊器”,强迫自己用 hjkl。两天就能改掉。

肌肉记忆:移动光标 = hjkl。

技巧 3:词移动 w/b/e,比 hjkl 跨多个字符快

  • w:到下一个词首
  • b:到上一个词首
  • e:到当前/下一个词尾

对于长变量名、行很长,w 比 j 效率高 5-10 倍。

肌肉记忆:跨多字符 = w/b/e。

技巧 4:行内跳转 0/$/^,比 END/HOME 键快

  • 0:行首
  • $:行尾
  • ^:行首第一个非空白字符

肌肉记忆:行首 = 0,行尾 = $,第一个字符 = ^。

技巧 5:文件级跳转 gg/G

  • gg:到文件首
  • G:到文件尾
  • G:到第 N 行
  • ::同样到第 N 行

肌肉记忆:到文件头 = gg,到文件尾 = G。

技巧 6:f/F/t/T 字符跳转

  • f:到行内下一个 X 字符
  • F:到行内上一个 X 字符
  • t:到行内下一个 X 字符前
  • T:到行内上一个 X 字符后

加分号 ; 重复 f,逗号 , 反向重复。

例如:f;a 表示跳到下一个分号然后删除到行尾(实际是 df;a,简化版)。

肌肉记忆:在行内找字符 = f/F/t/T。

技巧 7:删除 d + motion(dw、d$、d0、dd)

  • dd:删除当前行
  • dw:删除到下一个词首
  • d$:删除到行尾
  • d0:删除到行首
  • 3dd:删除 3 行
  • dG:删除到文件尾

肌肉记忆:删除 = d + 范围。

技巧 8:复制 y + motion(yw、y$、yy)

  • yy:复制当前行
  • yw:复制一个词
  • y$:复制到行尾
  • yG:复制到文件尾

肌肉记忆:复制 = y + 范围。

技巧 9:粘贴 p/P

  • p:粘贴到光标后(行下)
  • P:粘贴到光标前(行上)

粘贴行为会按删除/复制的内容自动调整。

肌肉记忆:粘贴 = p。

技巧 10:撤销与重做 u/Ctrl-r

  • u:撤销
  • Ctrl-r:重做
  • U:撤销当前行的所有改动

肌肉记忆:u 是”后悔药”。

技巧 11:搜索 / + n/N

  • /pattern:向下搜
  • ?pattern:向上搜
  • n:下一个匹配
  • N:上一个匹配
  • *:搜索光标下的词(向下)
  • #:搜索光标下的词(向上)

肌肉记忆:搜索 = / + Enter,跳转 = n。

技巧 12:替换 :s

  • :s/old/new:替换当前行第一个匹配
  • :s/old/new/g:替换当前行所有匹配
  • :%s/old/new/g:替换全文所有匹配
  • :%s/old/new/gc:替换并确认
  • :5,10s/old/new/g:替换第 5 到 10 行

肌肉记忆:替换 = :%s/old/new/g。

技巧 13:可视化选择 v/V/Ctrl-v

  • v:字符可视化
  • V:行可视化
  • Ctrl-v:块可视化(矩形)

选中后可以:

  • d:删除
  • y:复制
  • > :缩进
  • :命令:对选中区域执行

Ctrl-v 块选择是注释、编辑多行的利器。

肌肉记忆:v 选字符,V 选行,Ctrl-v 选块。

技巧 14:缩进 >> 和 <<

  • > > :缩进当前行

  • <<:反缩进

  • motion:缩进一个范围

  • 在 V 模式下 > 缩进选中行

肌肉记忆:缩进 = >>,反缩进 = <<。

技巧 15:插入模式下的快捷键

  • Ctrl-h:删除前一个字符(等同 backspace)
  • Ctrl-w:删除前一个词
  • Ctrl-u:删除到行首
  • Ctrl-a:插入上一个 insert 的内容
  • Ctrl-e:插入下一行同列内容
  • Ctrl-r + 寄存器:插入寄存器内容

例如 Ctrl-r " 插入无名寄存器。

肌肉记忆:插入模式下的 Ctrl 键是隐藏快捷键。

技巧 16:寄存器 ” + 命令

  • “ayy:复制当前行到寄存器 a
  • “ap:粘贴寄存器 a 的内容
  • “+yy:复制到系统剪贴板
  • “+p:从系统剪贴板粘贴
  • “_d:删除到黑洞(不污染剪贴板)

在写脚本时,多寄存器能极大减少切换。

肌肉记忆:寄存器 = ” + 字母。

技巧 17:宏 q + 字母 + q + @ + 字母

录制宏:

  1. q + 字母(如 qa):开始录制到寄存器 a
  2. 执行操作
  3. q:结束录制
  4. @a:执行宏
  5. @@:重复执行上一个宏
  6. 数字 + @a:执行多次

例:把每一行的末尾加分号:

qa
A;<Esc>
q
:%normal @a

肌肉记忆:宏 = q + 字母 + 操作 + q + @ + 字母。

技巧 18:窗口 :split / :vsplit / Ctrl-w

  • :split:水平切窗
  • :vsplit:垂直切窗
  • :split:水平切窗并打开文件
  • Ctrl-w + h/j/k/l:切换窗口
  • Ctrl-w + w:循环切换窗口
  • Ctrl-w + c:关闭当前窗口
  • Ctrl-w + =:等分窗口

肌肉记忆:分屏 = :vsplit,切换 = Ctrl-w。

技巧 19:常用 :! 与 :r 执行 shell

  • :!command:执行 shell 命令
  • :r !command:把命令输出读入文件
  • :r file:读入文件内容

例如 :!ls 执行 ls,:r !date 把当前日期插入到光标位置。

肌肉记忆:临时执行命令 = :!。

技巧 20:常用设置 set

vim

:set&nbsp;nu&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 显示行号
:set&nbsp;relativenumber &nbsp;&nbsp;" 相对行号(移动神器)
:set&nbsp;hlsearch &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 高亮搜索
:set&nbsp;incsearch &nbsp; &nbsp; &nbsp; &nbsp;" 增量搜索
:set&nbsp;ignorecase &nbsp; &nbsp; &nbsp;&nbsp;" 忽略大小写
:set&nbsp;smartcase &nbsp; &nbsp; &nbsp; &nbsp;" 智能大小写(大写含大写时精确)
:set&nbsp;tabstop=4&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" Tab 显示宽度
:setshiftwidth=4&nbsp; &nbsp; &nbsp;" 缩进宽度
:set&nbsp;expandtab &nbsp; &nbsp; &nbsp; &nbsp;" Tab 转空格
:set&nbsp;autoindent &nbsp; &nbsp; &nbsp;&nbsp;" 自动缩进
:set&nbsp;cursorline &nbsp; &nbsp; &nbsp;&nbsp;" 高亮当前行
:set&nbsp;showmatch &nbsp; &nbsp; &nbsp; &nbsp;" 显示配对括号
:set&nbsp;laststatus=2&nbsp; &nbsp; &nbsp;" 总是显示状态栏
:set&nbsp;scrolloff=5&nbsp; &nbsp; &nbsp;&nbsp;" 光标上下留 5 行
:syntaxon&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 语法高亮
:filetypeon&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 文件类型检测

肌肉记忆::set 是配置神器,常用配置放在 .vimrc。

六、常用的 .vimrc 配置

6.1 基础配置

vim

" 基础设置
set&nbsp;nocompatible
syntaxon
filetypeon
filetype&nbsp;plugin&nbsp;indenton

set&nbsp;encoding=utf-8
set&nbsp;fileencoding=utf-8

setnumber
set&nbsp;relativenumber
set&nbsp;cursorline
set&nbsp;scrolloff=5

set&nbsp;showmatch
set&nbsp;showcmd

set&nbsp;ignorecase
set&nbsp;smartcase
set&nbsp;incsearch
set&nbsp;hlsearch

set&nbsp;tabstop=4
setshiftwidth=4
set&nbsp;softtabstop=4
set&nbsp;expandtab

set&nbsp;autoindent
set&nbsp;smartindent

set&nbsp;laststatus=2
set&nbsp;ruler

set&nbsp;wildmenu
set&nbsp;wildmode=longest:list,full

set&nbsp;backspace=indent,eol,start
sethistory=1000

set&nbsp;ttimeoutlen=100
set&nbsp;notimeout ttimeout

6.2 键位映射

vim

" 快速移动
nnoremap<C-j>5j
nnoremap<C-k>5k
nnoremap<C-h>5h
nnoremap<C-l>5l

" 快速保存
nnoremap<C-s>&nbsp;:w<CR>
inoremap<C-s><Esc>:w<CR>a

" 快速退出
nnoremap<C-q>&nbsp;:wq<CR>

" 清除搜索高亮
nnoremap<Esc><Esc>&nbsp;:nohlsearch<CR>

" 翻页
nnoremap<C-d><C-d>
nnoremap<C-u><C-u>

" 块编辑
vnoremap<C-c>"+y
vnoremap<C-x>"+x

" 自动补全
inoremap<C-n><C-n>
inoremap<C-p><C-p>

" 切换 buffer
nnoremap<Tab>&nbsp;:bnext<CR>
nnoremap<S-Tab>&nbsp;:bprevious<CR>

6.3 主题与外观

vim

" 颜色
colorscheme&nbsp;desert
" 或
colorscheme&nbsp;molokai
" 或
colorscheme&nbsp;solarized

" 字体
set&nbsp;guifont=Monaco:h13

6.4 文件类型配置

vim

" Python
autocmd&nbsp;FileType&nbsp;pythonsetlocal&nbsp;tabstop=4shiftwidth=4&nbsp;expandtab
autocmd&nbsp;FileType&nbsp;pythonsetlocal&nbsp;textwidth=79

" Shell
autocmd&nbsp;FileType&nbsp;shsetlocal&nbsp;tabstop=2shiftwidth=2&nbsp;expandtab

" YAML
autocmd&nbsp;FileType yaml&nbsp;setlocal&nbsp;tabstop=2shiftwidth=2&nbsp;expandtab

" Markdown
autocmd&nbsp;FileType markdown&nbsp;setlocal&nbsp;textwidth=0&nbsp;wrapmargin=0

6.5 自动命令

vim

" 去除 Windows 换行
autocmd&nbsp;BufRead *&nbsp;set&nbsp;fileformat=unix

" 退出时自动保存 session
autocmd&nbsp;VimLeavePre * mksession! ~/.vim/session.vim

" 进入目录自动加载 session
autocmd&nbsp;VimEnter * silent!&nbsp;source&nbsp;~/.vim/session.vim

七、常用命令

7.1 基础命令

vim

:e&nbsp;<file>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 打开文件
:w&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 保存
:q &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 退出
:wq&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 保存退出
:q! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 强制退出
:x&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 保存退出(无改动时不改 mtime)
:e! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 放弃改动重新加载
:r&nbsp;<file>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 读入文件
:r!&nbsp;<cmd>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 读入命令输出
:!&nbsp;<cmd>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 执行命令

7.2 搜索命令

vim

:set&nbsp;hlsearch &nbsp; &nbsp; &nbsp;" 启用高亮
:set&nbsp;nohlsearch&nbsp; &nbsp;&nbsp;" 关闭高亮
:nohlsearch&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 临时关闭高亮
:grep&nbsp;<pattern>&nbsp; &nbsp;&nbsp;" 用 grep 搜索
:cnext&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 下一个 quickfix
:cprevious&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 上一个 quickfix

7.3 替换命令

vim

:s/old/new&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 当前行第一个
:s/old/new/g &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 当前行全部
:%s/old/new/g &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 全文全部
:%s/old/new/gc &nbsp; &nbsp; &nbsp; &nbsp;" 全部并确认
:'<,'>s/old/new/g &nbsp; &nbsp;&nbsp;" 选中区域
:5,10s/old/new/g &nbsp; &nbsp; &nbsp;" 5-10 行

7.4 缓冲区命令

vim

:ls&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 列出所有 buffer
:b&nbsp;<N>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 切换到第 N 个 buffer
:bd&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 删除当前 buffer
:bn&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 下一个 buffer
:bp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 上一个 buffer
:bf&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 第一个 buffer
:bl&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 最后一个 buffer

7.5 窗口命令

vim

:split&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 水平分屏
:vsplit&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 垂直分屏
:split&nbsp;<file>&nbsp; &nbsp; &nbsp;" 水平分屏打开文件
:vsplit&nbsp;<file>&nbsp; &nbsp;&nbsp;" 垂直分屏打开文件
Ctrl-w&nbsp;+ q &nbsp; &nbsp; &nbsp; &nbsp;" 关闭窗口
Ctrl-w&nbsp;+&nbsp;c&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 关闭窗口(同上)
Ctrl-w&nbsp;+ s &nbsp; &nbsp; &nbsp; &nbsp;" 水平分屏(与 split 同)
Ctrl-w&nbsp;+ v &nbsp; &nbsp; &nbsp; &nbsp;" 垂直分屏(与 vsplit 同)

7.6 标签页

vim

:tabnew&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 新建标签
:tabnew&nbsp;<file>&nbsp; &nbsp; &nbsp;" 新建标签打开文件
:tabnext&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 下一个标签(gt)
:tabprevious&nbsp; &nbsp; &nbsp; &nbsp;" 上一个标签(gT)
:tabfirst&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 第一个标签
:tablast&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 最后一个标签
:tabclose&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 关闭标签

7.7 折叠

vim

:foldenable &nbsp; &nbsp; &nbsp; &nbsp;" 启用折叠
:foldmethod=manual&nbsp;" 手动折叠
:zf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 创建折叠
:zo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 打开折叠
:zc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 关闭折叠
:zR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 打开所有折叠
:zM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 关闭所有折叠

7.8 标记

vim

ma&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 设置 a 标记
'a &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 跳到 a 标记
:marks &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 列出所有标记
:delmarks a &nbsp; &nbsp; &nbsp; " 删除 a 标记

7.9 宏

vim

qa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 录制到寄存器 a
q &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 停止录制
@a &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 执行宏 a
@@ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 重复上次宏
100@a &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 执行 100 次

7.10 diff 模式

vim

vimdiff&nbsp;a.txt&nbsp;b.txt
:diffupdate
:diffget
:diffput
:diffoff

八、日志或指标观察方法

8.1 看编辑历史

vim

:changes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 列出所有改动
:earlier&nbsp;5m&nbsp; &nbsp; &nbsp; &nbsp;" 回到 5 分钟前的状态
:later&nbsp;5m&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 前进到 5 分钟后的状态
:undo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 撤销
:redo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 重做

8.2 看编辑时间

vim

:ed &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 重新加载并显示编辑时间

判断:能看到文件最后一次修改时间。

8.3 看命令历史

vim

q: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 进入命令历史窗口
:<Up>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 上一条命令

8.4 看搜索历史

vim

q/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 进入搜索历史

8.5 看寄存器内容

vim

:registers&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 列出所有寄存器

判断:能看到每个寄存器的当前内容。

8.6 看 buffer 列表

vim

:ls&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 列出所有 buffer
:buffers&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 同上

8.7 看 jump 列表

vim

:ju&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 列出 jump 历史
:ju! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 列出 jump(含当前位置)

判断:Ctrl-o / Ctrl-i 在 jump 中前后跳。

8.8 看 mark 列表

vim

:marks&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 列出所有 mark

8.9 看宏统计

vim

:reg&nbsp;a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 看寄存器 a 的内容

8.10 编辑时间统计

vim

:set&nbsp;showcmd &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 显示已输入的命令

九、常见场景的快捷键组合

9.1 改一个变量名

vim

"* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&nbsp;选中变量名(先 / 搜索)
ciw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 改 inner word

更系统的方法:

vim

:%s/oldname/newname/g

9.2 在多行行尾加分号

vim

:%normal&nbsp;A;

或块选择:

vim

Ctrl-v &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 进入块模式
G &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 到文件尾
$ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 到行尾
A; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 在所有选中行尾加分号
Esc

9.3 注释多行(Python)

vim

Ctrl-v &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 进入块模式
j5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 向下选 5 行
I# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 在所有选中行首插入 #
Esc

9.4 删除多行

vim

5dd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 删除 5 行

9.5 移动多行

vim

V &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 行选择
3j&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 选 3 行
:move&nbsp;+5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 向下移动 5 行

9.6 排序

vim

:sort&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 排序
:sort! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 反向排序
:sort&nbsp;u&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 去重排序

9.7 数字递增

vim

:let&nbsp;i=0
:g/^/s//\=i/|let&nbsp;i=i+1

或:

vim

:put&nbsp;=range(1,100)

9.8 大小写转换

vim

guw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 当前词转小写
gUw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 当前词转大写
guu &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 当前行转小写
gUU &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 当前行转大写
g~w&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 当前词反转大小写

9.9 文件编码转换

vim

:e&nbsp;++enc=gbk &nbsp; &nbsp; &nbsp;&nbsp;" 以 GBK 编码打开
:set&nbsp;fenc=utf-8&nbsp; &nbsp;&nbsp;" 设置输出编码
:w&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 保存为 utf-8

9.10 十六进制查看

vim

:%!xxd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 转为十六进制
:%!xxd -r &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 转回二进制

十、风险提醒

  • :w!

    强制写只读文件:可能改错配置

  • :q!

    强制退出不保存:丢失改动

  • :set

    选项设错:可能影响正常编辑

  • 替换命令没有 /g:只替换每行第一个

  • 替换命令没有 /c:批量替换可能改错

  • 宏录制后立即全文件执行:可能造成大范围改动

  • 不备份改配置文件:改错无法恢复

  • 在大文件上录制宏:可能很慢

  • 块选择后用错命令:可能错删

  • :!

    执行破坏性命令:可能误操作

  • 误按 Ctrl-z:vim 被挂起到后台

  • 误按 Ctrl-s:vim 被锁定(Ctrl-q 解锁)

  • 误删字符 u 撤销后又 Ctrl-r 重做:可能搞混历史

  • 改 .vimrc 后未 source:以为生效实际未生效

  • 用方向键破坏肌肉记忆

十一、验证方式

  • 模式切换是否能丝滑
  • hjkl 移动是否流畅
  • 数字 + motion 是否熟练
  • 搜索替换是否正确
  • 块选择能否多行编辑
  • 宏能否批量处理
  • .vimrc 是否正确加载
  • 配色是否符合预期
  • 自动补全是否正常
  • 配置文件改完后业务是否正常

十二、回滚方案

12.1 改配置文件回滚

bash

cp&nbsp;/etc/my.cnf.bak /etc/my.cnf

12.2 改 .vimrc 回滚

bash

cp&nbsp;~/.vimrc.bak ~/.vimrc

12.3 Vim 内撤销

vim

u&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 撤销
:earlier&nbsp;5m&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 回到 5 分钟前

12.4 替换回滚

vim

:undo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 撤销替换

12.5 宏回滚

录制宏后未执行前,用 u 撤销。

12.6 块编辑回滚

vim

u

12.7 插件回滚

bash

mv&nbsp;~/.vim ~/.vim.bak
git&nbsp;clone&nbsp;<plugin repo> ~/.vim

12.8 配色回滚

vim

:colorscheme&nbsp;default

12.9 全部撤销

vim

:q!
:e!

12.10 文件级回滚

bash

git checkout file

十三、生产环境注意事项

  • 生产环境改配置文件要备份
  • 用 vim 改 nginx/apache/my.cnf 等要小心
  • 改完要 reload/restart 前必须验证
  • 改完要业务测试
  • 多人共用服务器时 .vimrc 要统一
  • 在容器内使用 vim 可能没有高亮
  • 远程服务器 vim 版本可能很老
  • 远程 vim 可能没有 clipboard 寄存器
  • 修改 systemd unit 要 systemctl daemon-reload
  • 修改 cron 要 crontab -e 不要改 /etc/crontab 后忘重启
  • 不要在 vim 内直接执行破坏性 :! 命令
  • 改完立即 :w + 备份

十四、总结

Vim 是工具,肌肉记忆是熟能生巧。这 20 个技巧是杠杆最高的起点,每天练 10 分钟,三周就能定型:

  1. 模式切换 i/a/o + ESC
  2. hjkl 移动
  3. 词移动 w/b/e
  4. 行内 0/$/^
  5. 文件级 gg/G
  6. 字符查找 f/F/t/T
  7. 删除 d
  8. 复制 y
  9. 粘贴 p
  10. 撤销 u
  11. 搜索 /
  12. 替换 :s
  13. 可视化 v/V/Ctrl-v
  14. 缩进 >>/<<
  15. 插入模式 Ctrl 键
  16. 寄存器 “
  17. 宏 q + @
  18. 窗口 :split / :vsplit
  19. :! 执行 shell
  20. :set 配置

把这 20 个练熟,再根据自己的工作场景拓展。Vim 是越用越快、越用越顺的工具,前期慢一点没关系,三个月后会感谢自己。

十五、Vim 的进阶方向

15.1 文本对象深入

vim

ci" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&nbsp;改双引号内
ci' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 改单引号内
ci( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 改括号内
ci[ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 改中括号内
ci{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 改大括号内
cit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 改 HTML tag 内
di" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 删双引号内
yi" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 复制双引号内
va( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " 选含括号的内容

15.2 命令模式的高级用法

vim

:read&nbsp;!date &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 读入日期
:%!python -c&nbsp;"..."&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 用外部命令处理
:g/pattern/d &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 删除匹配行
:v/pattern/d &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 删除不匹配行
:g/pattern/s/old/new/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 匹配行内替换
:'<,'>!column -t &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 格式化对齐

15.3 寄存器的进阶用法

vim

:let&nbsp;@a =&nbsp;"long text"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;" 设置寄存器
:let&nbsp;@a =&nbsp;""&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 清空寄存器
"ayw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&nbsp;复制到&nbsp;a
:put&nbsp;a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" 粘贴 a

15.4 表达式寄存器

vim

"=1+2<CR>p &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp;粘贴计算结果
"=system('date')<CR>p &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp;粘贴命令输出

15.5 自动命令深入

vim

autocmd&nbsp;FileType&nbsp;python&nbsp;nmap&nbsp;<buffer>&nbsp;<F5>&nbsp;:!python %<CR>
autocmd&nbsp;BufWritePost *.py&nbsp;!python -m&nbsp;py_compile %
autocmd&nbsp;InsertLeave *&nbsp;set&nbsp;cul
autocmd&nbsp;InsertEnter *&nbsp;set&nbsp;nocul

15.6 状态行自定义

vim

set&nbsp;statusline=%f\ %y\ %m\ %r\ %=Line\ %l\/%L\ Col\ %c

15.7 命令补全

vim

:command&nbsp;-nargs=* MyCmd&nbsp;echo&nbsp;<q-args>

15.8 函数

vim

:function!&nbsp;Hello()
: &nbsp;echo&nbsp;"Hello"
:endfunction
:call&nbsp;Hello()

15.9 插件入门

推荐新手友好的插件:

  • vim-commentary(注释)
  • vim-surround(包围符)
  • vim-repeat(重复 operator)
  • nerdtree(文件树)
  • fzf.vim(模糊搜索)
  • coc.nvim / YouCompleteMe(补全)
  • vim-airline(状态栏)
  • vim-gitgutter(git 标记)

15.10 学习路径

  1. 一周:掌握 20 个肌肉记忆
  2. 两周:熟悉 .vimrc 配置
  3. 一月:掌握插件使用
  4. 三月:根据自己的工作流定制

十六、推荐配置和工具

16.1 vim-plug 插件管理

vim

call&nbsp;plug#begin('~/.vim/plugged')
Plug&nbsp;'tpope/vim-surround'
Plug&nbsp;'tpope/vim-commentary'
Plug&nbsp;'scrooloose/nerdtree'
Plug&nbsp;'junegunn/fzf.vim'
call&nbsp;plug#end()

16.2 实用搜索工具

  • ack
  • ag (silver searcher)
  • rg (ripgrep)
  • fzf

16.3 远程编辑

  • ssh + vim
  • scp + vim
  • rsync + vim
  • vim + netrw (内置)

16.4 IDE 替代品

  • SpaceVim
  • LunarVim
  • NvChad
  • AstroVim

十七、Vim 与其他工具的搭配

17.1 Vim + tmux

tmux 分屏 + vim 分屏,编辑器与终端双分屏。

17.2 Vim + fzf

fzf 模糊搜索文件,vim 编辑。

17.3 Vim + ripgrep

vim

:grep! -n pattern %
:copen

17.4 Vim + git

  • vimdiff:git difftool
  • vim-fugitive:vim 内 git
  • gv.vim:commit browser

17.5 Vim + SSH

bash

vim scp://user@host//etc/my.cnf

判断:vim 内置 netrw 支持 scp 编辑。

十八、典型场景的 vimrc 模板

18.1 运维工程师 vimrc

vim

set&nbsp;nocompatible
syntaxon
filetype&nbsp;plugin&nbsp;indenton

setnumber&nbsp;relativenumber cursorline scrolloff=5

set&nbsp;tabstop=2shiftwidth=2&nbsp;expandtab

set&nbsp;ignorecase smartcase incsearch hlsearch

sethistory=1000&nbsp;undolevels=1000

" 运维相关映射
nnoremap<F5>&nbsp;:!bash %<CR>
nnoremap<F6>&nbsp;:!./%<CR>

" 文件类型
autocmd&nbsp;FileType&nbsp;shsetlocal&nbsp;tabstop=2shiftwidth=2
autocmd&nbsp;FileType yaml&nbsp;setlocal&nbsp;tabstop=2shiftwidth=2
autocmd&nbsp;FileType nginx&nbsp;setlocal&nbsp;commentstring=#\ %s

" 自动保存
autocmd&nbsp;BufWritePre *.sh&nbsp;!shfmt -i&nbsp;2&nbsp;-w&nbsp;%

18.2 DBA vimrc

vim

set&nbsp;tabstop=4&nbsp;shiftwidth=4&nbsp;expandtab

" SQL 高亮
autocmd&nbsp;FileType sql&nbsp;setlocal&nbsp;commentstring=--\ %s

" 大写关键字
nnoremap&nbsp;<leader>u&nbsp;:s/\b\(SELECT\|FROM\|WHERE\|JOIN\)\b/\U\1/g<CR>

18.3 开发者 vimrc

vim

" 通用配置
set&nbsp;nocompatible
syntaxon
filetype&nbsp;plugin&nbsp;indenton

setnumber&nbsp;relativenumber cursorline scrolloff=5
set&nbsp;tabstop=4shiftwidth=4&nbsp;expandtab
set&nbsp;ignorecase smartcase incsearch hlsearch

" 代码折叠
set&nbsp;foldmethod=indent
setfoldlevel=2

" 自动补全
set&nbsp;completeopt=menuone,noinsert,noselect
set&nbsp;omnifunc=syntaxcomplete#Complete

十九、面试常见的 Vim 问题

  1. Vim 有几种模式?4 种:Normal、Insert、Visual、Command,还有 Replace。
  2. 如何从 Insert 模式快速回 Normal?ESC 或 Ctrl-[。
  3. 如何跳到行首/行尾?0 行首、$ 行尾、^ 第一个非空白字符。
  4. 如何跳到文件头/文件尾?gg / G。
  5. 如何搜索替换?/pattern + n/N;:s/old/new/g。
  6. 如何复制粘贴?yy / p;”+y / “+p 跨系统剪贴板。
  7. 如何录制宏?q + 字母,操作,q,@ + 字母执行。
  8. 如何分屏?:split 水平、:vsplit 垂直,Ctrl-w 切换。
  9. 如何块编辑?Ctrl-v 进入块模式。
  10. 如何快速注释?Ctrl-v 选行,I//,Esc。

二十、写在最后

Vim 是工具,肌肉记忆是技能。每天花 10 分钟,把这 20 个技巧练熟,遇到常用的操作就用 Vim 而不是方向键,三周就能定型。

Vim 的学习曲线前期陡峭,但一旦过去就一劳永逸。比 IDE 更快、比 nano 更强、比 sed 更友好,是运维、DBA、开发者都该掌握的工具。

记住一句话:肌肉记忆不是背下来的,是用出来的。打开 Vim,用 hjkl 移动,用 / 搜索,用 :s 替换,用 dd 删除。十天之后,你会感谢现在的自己。

二十一、扩展:每个技巧的实战场景

21.1 技巧 1(i/a/o/O/I/A)实战

场景 1:在文件第 5 行末尾加注释。

gg
4j
A
# 这是注释
Esc

场景 2:在文件中间插入一段。

50G
o
新内容
Esc

21.2 技巧 2(hjkl)实战

场景 1:上下移 1 行。

  • j:下移 1 行
  • k:上移 1 行

场景 2:左右移动。

  • h:左移 1 字符
  • l:右移 1 字符

21.3 技巧 3(w/b/e)实战

场景 1:在长变量名之间跳转。

  • var_one_two_three
  • w 跳到 var_one_two_three 下一个词

场景 2:在代码中跳到下一个函数。

  • w 反复按可以跨多个标识符

21.4 技巧 4(0/$/^)实战

场景 1:在长行中快速到行尾。

  • $ 比 End 键快

场景 2:从行尾回到行首。

  • 0 直接到行首,比 Home 键快

21.5 技巧 5(gg/G)实战

场景 1:查看文件总行数。

  • G 然后 Ctrl-g 可以看到行数

场景 2:到指定行。

  • 100G 到第 100 行

21.6 技巧 6(f/F/t/T)实战

场景 1:在 SQL 中跳到 WHERE 关键字。

  • fW 跳到下一个 W

场景 2:删除到分号。

  • df; 删除到分号

21.7 技巧 7(d)实战

场景 1:删除一行。

  • dd

场景 2:删除一个词。

  • dw(光标在词首)或 daw(任何位置)

场景 3:删除到行尾。

  • D 或 d$

21.8 技巧 8(y)实战

场景 1:复制一行。

  • yy

场景 2:复制一个词。

  • yw

场景 3:复制多行。

  • 5yy

21.9 技巧 9(p/P)实战

场景 1:复制后粘贴。

  • yyp

场景 2:从寄存器粘贴。

  • “ayy,”ap

21.10 技巧 10(u)实战

场景 1:撤销最近改动。

  • u

场景 2:重做。

  • Ctrl-r

21.11 技巧 11(/)实战

场景 1:搜索关键字。

  • /keyword Enter

场景 2:搜索当前光标下的词。

  • *(向下)或 #(向上)

21.12 技巧 12(:s)实战

场景 1:替换所有。

  • :%s/old/new/g

场景 2:替换并确认。

  • :%s/old/new/gc

21.13 技巧 13(v/V/Ctrl-v)实战

场景 1:选择 5 行注释。

  • V 然后 4j,然后 I#,然后 Esc

场景 2:在多行末尾加分号。

  • Ctrl-v 然后 4j,然后 A; 然后 Esc

21.14 技巧 14(>)实战

场景 1:缩进当前行。

场景 2:缩进多行。

  • V 选中,>

21.15 技巧 15(Ctrl 键)实战

场景 1:删除刚输入的词。

  • Ctrl-w(写一半发现错了)

场景 2:撤销最近删除。

  • Ctrl-r

21.16 技巧 16(” + 字母)实战

场景 1:复制到 a,剪切到 b。

  • “ayy,”bdd,”ap

场景 2:保留原剪切板内容。

  • “_d(删到黑洞)

21.17 技巧 17(q + 字母)实战

场景 1:把每行加 .bak。

  • qa I.bak Esc q,:%normal @a

场景 2:批量格式化。

  • qa 录制格式化动作 q,:%normal @a

21.18 技巧 18(窗口)实战

场景 1:左右分屏。

  • :vsplit + 文件名

场景 2:在窗口间跳转。

  • Ctrl-w + h/j/k/l

21.19 技巧 19(:!)实战

场景 1:插入当前时间。

  • :r !date

场景 2:执行命令。

  • :!ls

21.20 技巧 20(:set)实战

场景 1:行号。

  • :set nu

场景 2:自动缩进。

  • :set autoindent

二十二、Vim 在不同场景下的实战

22.1 改 nginx 配置

vim

/etc/nginx/nginx.conf
:1
/worker_processes
dw
i4
Esc
:w
:!nginx -t

22.2 改 my.cnf

vim

/etc/my.cnf
/innodb_buffer_pool_size
daW
i8GEsc
:w

22.3 看日志并标记异常

vim

/var/log/messages
/ERROR
n
:bn

22.4 改 K8s manifest

vim

deployment.yaml
/containers
j
/image:
ciw
Esc

22.5 批量改配置

vim

:%s/localhost/db.internal/g
:%s/127.0.0.1/db.internal/g

22.6 临时加注释

vim

:s/^/# /
:%s/^/# /
:%s/^# //

22.7 调整缩进

vim

:1,20>>
:20,$<<
gg=G

22.8 合并行

vim

J
3J
gJ

22.9 多文件编辑

vim

vim&nbsp;a.txt&nbsp;b.txt&nbsp;c.txt
:bn
:bp
:ls
:b&nbsp;2
:bd

22.10 远程编辑

vim

:e&nbsp;scp://user@server//etc/my.cnf
:w&nbsp;!sudo tee %

二十三、Vim 的隐藏神器

23.1 Ctrl-r 寄存器

在插入模式下:

vim

Ctrl-r&nbsp;"
Ctrl-r&nbsp;a
Ctrl-r +
Ctrl-r =

23.2 gq 格式化

vim

gqq
gq}
:set&nbsp;formatoptions+=a

23.3 :try / :catch

vim

:try
: &nbsp;/pattern
:catch&nbsp;/^Vim:E/
: &nbsp;echomsg&nbsp;"pattern not found"
:endtry

23.4 :set list

vim

:set&nbsp;list
:set&nbsp;listchars=eol:$,tab:>-,trail:·,nbsp:_

23.5 :set path

vim

:set&nbsp;path+=**
:find&nbsp;filename
:gf

23.6 :args 文件列表

vim

:args&nbsp;*.txt
:next
:prev

23.7 :cfile 错误列表

vim

:grep&nbsp;-r pattern .
:copen
:cnext

23.8 :DiffOrig

vim

:Diffoff
:DiffOrig

23.9 :w !sudo tee %

vim

:w&nbsp;!sudo tee %
:!chmod&nbsp;644&nbsp;%

23.10 :Termdebug

vim 8.1+ 内置 debug:

vim

:packadd termdebug
:Termdebug

二十四、Vim 的高效组合键

24.1 改全文

vim

:%s/foo/bar/g

24.2 全局缩进

vim

gg=G

24.3 多行合并为一行

vim

:v/^$/,/^$/-j!

24.4 多行拆分为多行

vim

:%s/,/<CR>/g

24.5 删除空行

vim

:g/^$/d

24.6 删除重复行

vim

:sort&nbsp;u

24.7 反转行

vim

:g/^/m0

24.8 大小写反转

vim

:g/^/s/.*/\U&/

24.9 数字求和

vim

:put&nbsp;=eval(getline(1,'$'))

24.10 计算当前列数字之和

vim

:'<,'>s/.*/\=eval(submatch(0))/

二十五、Vim 与 Git 的协作

25.1 vimdiff 作为 git difftool

bash

git config --global diff.tool vimdiff
git diff

25.2 vim-fugitive

vim

:Git status
:Git diff
:Git commit
:Git&nbsp;log
:Git blame

25.3 gv.vim

vim

:GV

25.4 提交时编辑 message

bash

git config --global core.editor&nbsp;"vim"

25.5 在 vim 内做 code review

vim

:tabnew&nbsp;file
:vsp&nbsp;file.bak
Ctrl-w&nbsp;+ h/l

二十六、Vim 的故障排查思路

26.1 Vim 启动报错

bash

vim -u NONE
vim -u NONE -N

判断:排查 .vimrc 问题。

26.2 插件冲突

bash

mv&nbsp;.vim .vim.bak
git&nbsp;clone&nbsp;<plugin repo> .vim

26.3 快捷键不生效

vim

:verbose&nbsp;map&nbsp;<key>

判断:能看到快捷键的来源。

26.4 高亮丢失

vim

:syntax&nbsp;on
:filetype&nbsp;on

26.5 中文乱码

vim

:set&nbsp;encoding=utf-8
:set&nbsp;fileencoding=utf-8
:set&nbsp;termencoding=utf-8

26.6 中文宽度

vim

:set&nbsp;ambiwidth=double

判断:CJK 字符宽度。

26.7 删除键问题

vim

set&nbsp;backspace=indent,eol,start

26.8 方向键问题(A 字母乱出)

Vim 兼容模式:set nocompatible

26.9 Ctrl-S 锁定

vim

Ctrl-Q

判断:Ctrl-S 是终端的 XOFF,按 Ctrl-Q 解锁。

26.10 编辑大文件卡

vim

:set&nbsp;lazyredraw
:set&nbsp;undolevels=-1
:set&nbsp;noswapfile

判断:大文件需要关闭部分功能。

二十七、运维工程师的 vimrc 推荐

vim

set&nbsp;nocompatible
set&nbsp;encoding=utf-8
set&nbsp;fileencoding=utf-8
syntaxon
filetype&nbsp;plugin&nbsp;indenton

setnumber&nbsp;relativenumber
set&nbsp;cursorline
set&nbsp;scrolloff=5
set&nbsp;laststatus=2
set&nbsp;showcmd
set&nbsp;ruler

set&nbsp;ignorecase
set&nbsp;smartcase
set&nbsp;incsearch
set&nbsp;hlsearch
nnoremap<Esc><Esc>&nbsp;:nohlsearch<CR>

set&nbsp;tabstop=2shiftwidth=2&nbsp;expandtab
set&nbsp;autoindent
set&nbsp;smartindent

sethistory=1000
set&nbsp;undolevels=1000

autocmd&nbsp;FileType&nbsp;shsetlocal&nbsp;tabstop=2shiftwidth=2
autocmd&nbsp;FileType yaml&nbsp;setlocal&nbsp;tabstop=2shiftwidth=2
autocmd&nbsp;FileType&nbsp;pythonsetlocal&nbsp;tabstop=4shiftwidth=4
autocmd&nbsp;FileType json&nbsp;setlocal&nbsp;tabstop=2shiftwidth=2

nnoremap<C-s>&nbsp;:w<CR>
inoremap<C-s><Esc>:w<CR>a
nnoremap<C-q>&nbsp;:wq<CR>
nnoremap<F5>&nbsp;:!bash %<CR>
nnoremap<F6>&nbsp;:!./%<CR>
nnoremap<C-j>5j
nnoremap<C-k>5k

autocmd&nbsp;BufWritePre *.sh&nbsp;!shfmt -i&nbsp;2&nbsp;-w&nbsp;%
autocmd&nbsp;BufWritePre *.yaml !python -c"import yaml,sys; yaml.safe_load(open(sys.argv[1]))"&nbsp;%

set&nbsp;backup
set&nbsp;backupdir=~/.vim/backup
set&nbsp;directory=~/.vim/tmp

colorscheme&nbsp;desert
syntaxon

二十八、本文总结与行动计划

28.1 行动计划

  1. 第 1-3 天:练模式切换 + hjkl + 基础移动
  2. 第 4-7 天:练 d/y + 数字前缀
  3. 第 8-14 天:练 w/b/e、0/$/^、gg/G、f/F/t/T
  4. 第 15-21 天:练搜索、替换、可视化、缩进
  5. 第 22-30 天:练寄存器、宏、窗口、配置文件

28.2 配套练习

  • 用 vim 改 100 个配置文件
  • 用 vim 改 100 个 shell 脚本
  • 用 vim 写 100 个 Markdown 文档
  • 用 vim 处理 100 个日志文件

28.3 检验标准

  • 30 秒内能用 vim 完成任意编辑任务
  • 能用宏批量处理 100 行
  • 能用块编辑改多行
  • 能用 :! 执行命令并插入结果
  • 能用 netrw 远程编辑

28.4 推荐资源

  • vimtutor:vim 自带教程(必学)
  • :help:vim 帮助(详尽)
  • vim help tags:标签搜索
  • Practical Vim(书籍)
  • vimcasts.org(视频)
  • Brendan Gregg vim 配置

28.5 持续学习

vim 是终身学习的工具。每天学一个新技巧,每月读一篇高级用法,每年读一遍 :help,都会让 vim 更顺手。

把 vim 用熟,比 IDE 更纯粹,比 nano 更强大,比 sed 更友好。

文末福利

今天给大家分享一份超级牛掰的Linux学习笔记,足足有1456页!是一位Linux运维大佬整理分享的,分享是获得大佬同意的,大家有需要的尽管收藏起来!

笔记介绍

这份笔记非常全面且详细,从Linux基础到shell脚本,再到防火墙、数据库、日志服务管理、Nginx、高可用集群、Redis、虚拟化、Docker等等,与其说Linux学习笔记,不如说是涵盖了运维各个核心知识。

并且图文并茂,代码清晰,每一章下面都有更具体详细的内容,十分适合Linux运维学习参考!

笔记展示

笔记下载

扫描下方二维码,回复暗号“1456页Linux笔记“,即可100%免费领取成功


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:马哥Linux运维 点击关注 👉 点击关注 👉《从入门到熟练:Vim 高效编辑的 20 个肌肉记忆技巧》

评论:0   参与:  0