Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

  • tool

    • mac 百问记录
    • mac tool
    • tmux
    • c tool
    • platform
    • dev tool
    • java tool
    • IDEA
    • vscode
    • Docker 使用指南
    • unbuntuOnWindows
    • oh-my-zsh
    • github
    • lldb
    • ripgrep 高性能文本搜索工具使用指南
    • appium
    • mvn
    • ffmpeg
    • gradle
    • git 使用指南
    • jenv
    • php-fpm
    • raycast
    • VisiData 终极生存指南(vd)
    • yq
    • direnv
    • Vim 编辑器入门指南
      • 📑 目录导航
      • 1. 快速开始
        • 1.1 什么是 Vim
        • 1.2 vimtutor 交互式教程
        • 1.3 学习路径
      • 2. Vim 模式总览
      • 3. 普通模式
        • 3.1 光标移动
        • 3.2 删除操作
        • 3.3 复制粘贴
        • 3.4 文本对象(Text Object)
        • 3.5 撤销与重复
      • 4. 插入模式
      • 5. 可视模式
      • 6. 命令行模式
        • 6.1 帮助系统
        • 6.2 文件操作
        • 6.3 搜索
        • 6.4 替换
        • 6.5 其他命令
      • 7. 多文件编辑
        • 7.1 分割窗口
        • 7.2 标签页
        • 7.3 缓冲区
      • 8. 高级搜索(vimgrep)
        • 8.1 基本用法
        • 8.2 Quickfix 操作
        • 8.3 vimgrepadd
        • 8.4 正则表达式技巧
      • 9. 插件管理
        • 9.1 vim-plug(推荐)
        • 9.2 推荐插件
      • 10. 配置文件(.vimrc)
      • 11. 寄存器
        • 11.1 基础操作
        • 11.2 常用寄存器分类
        • 11.3 核心场景:对接系统剪贴板
        • 11.4 自动化配置(进阶)
        • 11.5 管理与查看
      • 12. vimdiff
        • 12.1 基础移动与跳转
        • 12.2 块级同步(Normal 模式)
        • 12.3 局部同步(Visual 模式)
        • 12.4 折叠管理(Folding)
        • 12.5 状态修复与排障
        • 12.6 多文件保存与退出
      • 13. 实用技巧
        • 13.1 复制问题
        • 13.2 从标准输入读取
        • 13.3 快速帮助
      • 14. 常用场景速查
        • 场景 1:快速编辑文件
        • 场景 2:批量替换
        • 场景 3:多文件搜索
        • 场景 4:对比文件
        • 场景 5:批量编辑
      • 15. vv 工具(配套脚本)
        • 15.1 启动
        • 15.2 分屏窗口操作
        • 15.3 环境变量
        • 15.4 复制到系统剪贴板
      • 学习资源
        • 官方文档
        • 教程资源
        • 插件资源
      • 学习建议
      • 快捷键速查表
        • 必记快捷键
    • jadx
    • excalidraw 入门指南
    • whimsical 入门指南
    • mermaid 入门指南
  • client

  • 网络

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • tool
Jacky
2023-05-25
目录

Vim 编辑器入门指南

Vim 是 Linux 上使用最广泛的文本编辑器,具有程序编辑能力,可以主动以字体颜色辨别语法正确性,方便程序设计。

💡 vv 分屏提示:\h 显示/隐藏本文档 · q 关闭 · Ctrl-w w 切换窗口 · / 搜索章节 · 详见「15. vv 工具」

# 📑 目录导航

章节 重点内容
📖 快速开始 vimtutor / 学习路径
🎯 Vim 模式 四大模式总览
3. 普通模式 光标移动 / 删除 / 复制粘贴 / 文本对象
4. 插入模式 i a o 及常用组合
5. 可视模式 字符 / 行 / 块选择
6. 命令行模式 帮助 / 文件 / 搜索 / 替换
7. 多文件编辑 分屏 / 标签页 / 缓冲区
8. 高级搜索 vimgrep / Quickfix
9. 插件管理 vim-plug / 推荐插件
10. 配置文件 .vimrc 模板
11. 寄存器 系统剪贴板对接
12. vimdiff 差异对比 / 块级同步
13. 实用技巧 复制问题 / 管道输入 / 快速帮助
14. 场景速查 5 个常用场景
15. vv 工具 速查分屏 / toggle / 环境变量
📚 学习资源 官方 / 教程 / 插件
💡 学习建议 6 条建议
📋 快捷键速查表 必记快捷键

# 1. 快速开始

# 1.1 什么是 Vim

Vim (Vi IMproved) 是一个高度可配置的文本编辑器,以高效的文本编辑著称。它是 Unix 系统中 Vi 编辑器的改进版本。

# 1.2 vimtutor 交互式教程

vimtutor 是 Vim 内置的交互式教程,最适合新手学习。

# 直接在终端运行
vimtutor

# 或指定语言
vimtutor zh  # 中文教程
1
2
3
4
5

学习内容:移动光标、插入和删除文本、保存和退出文件、搜索和替换、基本编辑技巧。

学习建议

vimtutor 教程需要 30-60 分钟完成,建议一次性完成并反复练习。

# 1.3 学习路径

  1. 新手入门:使用内置教程 vimtutor 学习基础操作(强烈推荐)
  2. 配置优化:通过 ~/.vimrc 文件自定义配置
  3. 插件扩展:使用插件管理器安装插件增强功能

# 2. Vim 模式总览

Vim 有多种模式,这是它区别于其他编辑器的核心特性:

模式 说明 进入方式 退出方式
普通模式 默认模式,用于导航和执行命令 启动 Vim 时 -
插入模式 编辑文本 i, a, o 等 Esc
可视模式 选择文本 v, V, Ctrl+v Esc
命令行模式 执行命令 :, /, ? Enter 或 Esc

# 3. 普通模式

这是 Vim 的默认模式,用于导航和执行命令。

# 3.1 光标移动

基础移动

命令 说明
h 左移一个字符
j 下移一行
k 上移一行
l 右移一个字符

行内移动

命令 说明
0 移动到行首
^ 移动到本行第一个非空字符
$ 移动到行尾
g0 移动到屏幕行行首
g^ 移动到屏幕行第一个非空字符
g$ 移动到屏幕行行尾

单词移动

命令 说明
w 移动到下一个单词开头
W 移动到下一个单词开头(忽略标点)
e 移动到下一个单词末尾
E 移动到下一个单词末尾(忽略标点)
b 移动到上一个单词开头
B 移动到上一个单词开头(忽略标点)

字符查找

命令 说明
f{char} 移动到本行下一个 {char} 字符处
F{char} 移动到本行上一个 {char} 字符处
nf{char} 移动到本行第 n 个 {char} 字符处
; 重复上次 f/F 查找
, 反向重复上次 f/F 查找

行跳转

命令 说明
gg 跳转到文件第一行
G 跳转到文件最后一行
{n}G 跳转到第 n 行
{n}gg 跳转到第 n 行
:n 跳转到第 n 行

屏幕移动

命令 说明
H 跳转到屏幕顶部
M 跳转到屏幕中间
L 跳转到屏幕底部
zt 当前行移到屏幕顶部
zz 当前行移到屏幕中间
zb 当前行移到屏幕底部
Ctrl+f 向下翻页
Ctrl+b 向上翻页

其他移动

命令 说明
% 匹配括号移动 (), {}, []
* 查找光标所在单词的下一个
# 查找光标所在单词的上一个
gj 下移一个显示行(长行折行 wrap 时使用)
gk 上移一个显示行(长行折行 wrap 时使用)
+ / Enter 移到下一行第一个非空字符
- 移到上一行第一个非空字符

# 3.2 删除操作

命令 说明
x 删除光标后一个字符
dw 删除一个单词
d{n}w 删除 n 个单词
dd 删除整行
{n}dd 删除 n 行
d$ 或者 D 删除到行尾
d0 删除到行首
dG 删除到文件末尾
dH 删除到屏幕顶部
df{char} 删除到下一个 {char} 处,包含该字符(dF{char} 朝行首方向删)
dt{char} 删除到下一个 {char} 之前,不包含该字符(dT{char} 朝行首方向删)
diw 删除光标所在单词
di" 删除双引号内的内容(不删引号本身)
di' 删除单引号内的内容(不删引号本身)
di( 删除圆括号内的内容(不删括号本身)
di{ 删除花括号内的内容(不删括号本身)
:1,2d 删除第 1-2 行
:5,$d 删除第 5 行到文件末尾
:%d 删除文件所有内容

d 命令的组合规则

  • df vs dt:df{char} 删除到字符并包含该字符,dt{char} 删除到字符但不包含该字符(t = till)
  • di = delete inside:删除包裹内容,保留外层引号/括号。对应的 da = delete around,会连同引号/括号一起删除
  • 示例:光标在 "hello world" 的 h 上,di" 结果为 "",da" 则整个删除

# 3.3 复制粘贴

复制(yank)

命令 说明
yw 复制一个单词
yy 复制整行
y$ 复制到行尾
{n}yy 复制 n 行
:31,100y 复制第 31-100 行

粘贴(paste)

命令 说明
p 在光标后粘贴
P 在光标前粘贴

复制多行示例

" 方法 1:使用可视模式
gg        " 跳到第一行
V         " 进入可视行模式
100G      " 选择到第 100 行
y         " 复制
p         " 粘贴

" 方法 2:使用命令
:1,100y   " 复制第 1-100 行到寄存器
1
2
3
4
5
6
7
8
9

# 3.4 文本对象(Text Object)

文本对象是 Vim 的核心概念,允许基于语义单位(单词、句子、段落、引号包裹等)进行操作,而不是逐字符选择。

基本格式:{操作符}{i/a}{文本对象}

  • i = inside(内部,不包含边界)
  • a = around(周围,包含边界)

常用文本对象

文本对象 说明 di 示例 da 示例
w 单词 diw 删除光标所在单词 daw 删除单词及后面的空格
W 单词(忽略标点) diW daW
s 句子 dis das
p 段落 dip dap
" 双引号 di" 删除引号内内容 da" 连引号一起删除
' 单引号 di' da'
` | 反引号 | di` da`
( / ) 圆括号 di( 删除括号内 da( 连括号一起删
{ / } 花括号 di{ da{
[ / ] 方括号 di[ da[
< / > 尖括号 di< da<
t XML/HTML 标签 dit 删除标签内内容 dat 连标签一起删

操作符组合

操作符 说明 示例
d 删除 dip 删除段落
c 删除并进入插入模式 ci" 修改引号内内容
y 复制 yip 复制段落
v 可视模式选中 vip 选中段落
> 缩进 >ip 段落右缩进
= 格式化 =ip 格式化段落

常用技巧

  • ci" = 修改引号内内容(最常用,删除后直接进入插入模式)
  • ciw = 修改当前单词
  • cip = 修改当前段落
  • vi{ = 选中花括号内所有内容

# 3.5 撤销与重复

命令 说明
u 撤销
Ctrl+r 恢复撤销
. 重复上次操作
cw 删除单词并进入插入模式

# 4. 插入模式

从普通模式进入插入模式的方式:

命令 说明
i 在光标前插入
I 在行首插入
a 在光标后插入
A 在行尾插入
o 在下一行插入
O 在上一行插入
s 删除光标字符并插入
S 删除整行并插入

常用组合

  • i / a:最常用,分别在光标前/后插入
  • o / O:快速创建新行
  • A:快速跳到行尾插入

# 5. 可视模式

用于选择文本块:

命令 说明
v 字符可视模式
V 行可视模式
Ctrl+v 块可视模式

可视模式操作

" 选择并操作
V         " 进入行可视模式
5j        " 向下选择 5 行
y         " 复制选中内容
d         " 删除选中内容
>         " 向右缩进
<         " 向左缩进
1
2
3
4
5
6
7

# 6. 命令行模式

# 6.1 帮助系统

  • :help 或者 :h 进入命令行模式
  • :h quickref: 最基础的命令列表
  • 查特定的键
    • :h x: 查 x 键是干嘛的
  • 查组合键
    • CTRL 键用 c- 表示::h c-w (查看窗口切换相关的快捷键)。
    • ALT/Option 键用 m- 表示::h m-a
  • 查模式特定键
    • :h v_u: 可视模式下的快捷键
    • :h i_ctrl-w: 插入模式下的快捷键

# 6.2 文件操作

命令 说明
:w 保存
:w! 强制保存
:w {file} 另存为
:saveas {file} 另存为
:q 退出
:q! 强制退出(不保存)
:wq 保存并退出
:x 保存并退出
:qa! 退出所有文件(不保存)
:e {file} 打开文件
:e! 放弃修改,重新加载
:bd 删除该文档缓存并关闭
:only 只保留当前窗口,关闭其他所有(包括报错窗口或多个帮助窗口)

# 6.3 搜索

基本搜索

命令 说明
/{pattern} 向下搜索
?{pattern} 向上搜索
n 下一个匹配
N 上一个匹配
/\<word\> 精确匹配单词
* 搜索光标所在单词
# 反向搜索光标所在单词

搜索技巧

" 统计匹配次数
:%s/\<word\>/&/gn

" 统计单词数
:%s/\a\+/&/gn

" 统计非空字符数
:%s/\S\+/&/gn

" 查找配对括号
%
1
2
3
4
5
6
7
8
9
10
11

# 6.4 替换

基本语法

:[range]s/{pattern}/{replacement}/{flags}
1

常用替换

命令 说明
:s/old/new/ 替换当前行第一个
:s/old/new/g 替换当前行所有
:%s/old/new/gc 替换所有(需确认)
:%s/old/new/ 替换每行第一个
:%s/old/new/g 替换所有
:%s/old/new/gi 替换所有(忽略大小写)
:#,#s/old/new/g 替换指定行范围
:.,+2s/foo/bar/g 当前行及接下来 2 行

实用示例

" 删除行首空白
:%s/^\s*//g

" 删除行尾空白
:%s/\s\+$//g

" 删除空行
:g/^$/d

" 每行行尾添加分号
:%s/$/;/g
1
2
3
4
5
6
7
8
9
10
11

# 6.5 其他命令

显示设置

命令 说明
:set nu 显示行号
:set nonu 隐藏行号
:set nu! 切换行号显示
:set ic 忽略大小写
:set noic 区分大小写
Ctrl+G 显示文件信息

粘贴模式

:set paste: Vim 会进入一个特殊的 "粘贴模式"。在这个模式下,Vim 会暂时禁用以下所有干扰项:

  • 禁用 自动缩进 (autoindent)、智能缩进 (smartindent) 等。
  • 禁用 插入模式下的某些特殊快捷键和映射 (mappings)。
  • 禁用 自动换行等格式化功能。

执行外部命令

:!{command}         " 执行外部命令
:!ls                " 列出文件
:!python %          " 执行当前 Python 文件
1
2
3

# 7. 多文件编辑

# 7.1 分割窗口

命令 说明
:sp {file} 水平分割打开文件
:vsp {file} 垂直分割打开文件
Ctrl+w Ctrl+w 切换窗口
Ctrl+w h/j/k/l 切换到指定方向窗口
Ctrl+w = 窗口等宽等高
Ctrl+w + 增加窗口高度
Ctrl+w - 减少窗口高度
:q 关闭当前窗口

# 7.2 标签页

命令 说明
:tabe {file} 新标签页打开文件
:tabn 下一个标签页
:tabp 上一个标签页
:tabc 关闭当前标签页
gt 下一个标签页
gT 上一个标签页

# 7.3 缓冲区

命令 说明
:e {file} 打开文件到缓冲区
:bnext / :bn 下一个缓冲区
:bprev / :bp 上一个缓冲区
:bd 关闭当前缓冲区
:buffers / :ls 查看所有缓冲区

# 8. 高级搜索(vimgrep)

vimgrep 用于在多个文件中搜索,结果保存在 Quickfix 列表中。

# 8.1 基本用法

语法

:vimgrep /{pattern}/ {files}
1

示例

" 在当前文件搜索
:vimgrep /TODO/ %

" 在所有 .txt 文件中搜索
:vimgrep /error/ **/*.txt

" 在当前目录及子目录的所有 .py 文件中搜索
:vimgrep /function/ **/*.py
1
2
3
4
5
6
7
8

# 8.2 Quickfix 操作

命令 说明
:copen 打开 Quickfix 窗口
:cclose 关闭 Quickfix 窗口
:cn / :cnext 下一个匹配
:cp / :cprev 上一个匹配
:cc 跳到指定匹配
:cfilter {pattern} 过滤 Quickfix 列表

# 8.3 vimgrepadd

vimgrepadd 将搜索结果追加到 Quickfix 列表,而不是替换。

" 第一次搜索
:vimgrep /error/ *.log

" 追加搜索结果
:vimgrepadd /warning/ *.log

" 查看所有结果
:copen
1
2
3
4
5
6
7
8

对比

命令 行为
vimgrep 替换 Quickfix 列表
vimgrepadd 追加到 Quickfix 列表

# 8.4 正则表达式技巧

" OR 搜索(注意 | 需要转义)
:vimgrep 'aaaa\|bbbb' %

" 复杂模式
:vimgrep '\[17474.*\(Report\.PMMReport\]\|PlayTimeHelper\]\)' *.log

" 搜索连续两行包含相同内容
:vimgrep '.*onReallyStart\n.*onReallyStart' *.log
1
2
3
4
5
6
7
8

# 9. 插件管理

# 9.1 vim-plug(推荐)

安装 vim-plug

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

配置 ~/.vimrc

" 插件列表开始
call plug#begin('~/.vim/plugged')

" 插件示例
Plug 'preservim/nerdtree'           " 文件树
Plug 'yssl/QFEnter.vim'             " Quickfix 增强
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'             " 模糊查找

" 插件列表结束
call plug#end()
1
2
3
4
5
6
7
8
9
10
11

插件管理命令

命令 说明
:PlugInstall 安装插件
:PlugUpdate 更新插件
:PlugClean 清理未使用插件
:PlugStatus 查看插件状态

# 9.2 推荐插件

QFEnter - Quickfix 增强

" 在 .vimrc 中添加
Plug 'yssl/QFEnter.vim'

" 运行安装
:PlugInstall

" 使用
:QFEnter           " 打开新 Quickfix 窗口
:QFEnter <number>  " 切换 Quickfix 窗口
1
2
3
4
5
6
7
8
9

# 10. 配置文件(.vimrc)

创建或编辑 ~/.vimrc 文件来自定义 Vim:

" 基础设置
set number              " 显示行号
set relativenumber      " 显示相对行号
set cursorline          " 高亮当前行
set showcmd             " 显示命令
set showmatch           " 显示括号匹配

" 缩进设置
set tabstop=4           " Tab 宽度
set shiftwidth=4        " 缩进宽度
set expandtab           " Tab 转空格
set autoindent          " 自动缩进
set smartindent         " 智能缩进

" 搜索设置
set ignorecase          " 搜索忽略大小写
set smartcase           " 智能大小写搜索
set hlsearch            " 高亮搜索结果
set incsearch           " 增量搜索

" 外观设置
syntax on               " 语法高亮
set background=dark     " 深色背景
colorscheme desert      " 配色方案

" 其他设置
set mouse=a             " 启用鼠标
set encoding=utf-8      " 编码
set nobackup            " 不创建备份文件
set noswapfile          " 不创建交换文件

" 快捷键映射
" 快速保存
nnoremap <C-s> :w<CR>

" 快速退出
nnoremap <C-q> :q<CR>

" 清除搜索高亮
nnoremap <Esc><Esc> :noh<CR>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

配置文件参考:vimrc configuration guide (opens new window)

# 11. 寄存器

Vim 的寄存器可以看作是多个剪贴板的集合。当你执行删除(d)、复制(y)或粘贴(p)时,Vim 其实是在操作这些特定的内存空间。

# 11.1 基础操作

  • 指定寄存器:在执行 y 或 p 之前,按 " (双引号) 加上 寄存器名。
  • 命令格式:"{register}{action}
    • 示例:"*y (复制到系统剪贴板)
    • 示例:"ap (粘贴寄存器 a 中的内容)

# 11.2 常用寄存器分类

寄存器类型 名称 描述
无名寄存器 "" 默认寄存器。任何 d, c, s, x, y 的内容都会存入此处。
系统剪贴板 "* 或 "+ 与操作系统剪贴板交互(macOS/Windows 通常用 *)。
有名寄存器 a - z 用户自定义存储。例如 "ay 会永久保存内容直到你覆盖它。
黑洞寄存器 "_ 彻底删除。执行 "_dd 内容不会覆盖任何寄存器,直接消失。
搜索寄存器 "/ 存储上一次搜索的关键词。
表达式寄存器 "= 在插入模式按 Ctrl-R = 可以进行数学计算并插入结果。

# 11.3 核心场景:对接系统剪贴板

为了解决 Vim 与 macOS 之间"数据不互通"的痛点,主要依赖以下两个寄存器:

  • * 寄存器:在 macOS/Linux 中通常指向 Primary Selection(即鼠标选中的内容)。
  • + 寄存器:指向系统的 Clipboard(即 Cmd+C 复制的内容)。

高频操作:

  • 复制到系统:进入 Visual 模式选中文本,依次按下 "*y。
  • 从系统粘贴:在 Normal 模式依次按下 "*p。

# 11.4 自动化配置(进阶)

方案 1:自动同步。如果你不想每次都输入 "*,可以在 ~/.vimrc 中开启自动同步:

" 将默认寄存器与系统剪贴板关联
set clipboard=unnamed

" 如果上面的不行,试试这个(针对特定 Linux/Unix 环境)
" set clipboard=unnamedplus
1
2
3
4
5

配置后的变化: 所有的 y 操作都会直接进入系统剪贴板,所有的 p 都会读取系统剪贴板。

方案 2:映射快捷键(不改变 Vim 默认行为)。在 ~/.vimrc 加入:

" Visual 模式下,按 F 把选中内容传给系统剪贴板
vmap F "*y
1
2

# 11.5 管理与查看

如果你忘记了寄存器里存了什么,可以使用以下命令:

  • :reg:列出所有寄存器及其当前内容。
  • :reg a:只查看寄存器 a 的内容。
  • Ctrl + r + {name}:在 插入模式 (Insert Mode) 下,直接把某个寄存器的内容打出来。

# 12. vimdiff

# 12.1 基础移动与跳转

  • ]c : 跳到 下一个 差异点 (Next Change)
  • [c : 跳到 上一个 差异点 (Previous Change)

# 12.2 块级同步(Normal 模式)

  • dp : Diff Put - 把当前窗口的内容"推"给另一个窗口
  • do : Diff Obtain - 从另一个窗口"拿"内容到当前窗口

# 12.3 局部同步(Visual 模式)

注意:在 V (Visual Line) 模式下,直接按 d 会触发删除。此时必须使用冒号命令:

  • :'<,'>diffput : 仅将选中的行 推 过去
  • :'<,'>diffget : 仅将选中的行 拉 过来 (等同于 :diffget)

# 12.4 折叠管理(Folding)

  • zo : Open - 展开当前折叠
  • zc : Close - 关闭当前折叠
  • zr : Reduce - 展开全文所有折叠
  • zm : More - 关闭全文所有折叠

# 12.5 状态修复与排障

  • :diffupdate : 强制刷新。当手动编辑后高亮没及时跟上时使用。
  • :diffthis : 检查模式是否关闭。若某个窗口变白,进入该窗口输入此命令重新加入对比。
  • :set diff? : 检查当前窗口是否处于 diff 模式(返回 diff 或 nodiff)。
  • :set wrap / :set nowrap : 开启或关闭折行(对比长代码时很有用)。

# 12.6 多文件保存与退出

  • :wa : 保存所有窗口 (Write All)
  • :qa : 退出所有窗口 (Quit All)
  • :wqa : 保存并退出所有窗口 (Write & Quit All)

进阶:配置优化

如果觉得每次输入 :diffput 太麻烦,可以在配置文件中加入映射,实现 Visual 模式下按 g 拉取,按 p 推送:

" 在 Visual 模式下,按 g 执行拉取,按 p 执行推送
vmap g :diffget<CR>
vmap p :diffput<CR>
1
2
3

# 13. 实用技巧

# 13.1 复制问题

问题:启用行号后,在可视模式复制可能包含空格。

解决方法

" 方法 1:临时关闭行号
:set nu!        " 关闭行号
" 复制后再开启
:set nu!

" 方法 2:使用寄存器复制
" 选择文本后直接 y 复制到寄存器
" 然后 :e file 打开其他文件
" 使用 p 粘贴

" 方法 3:使用系统剪贴板
set clipboard=unnamedplus  " 在 .vimrc 中设置(详见 11.4 自动化配置)
1
2
3
4
5
6
7
8
9
10
11
12

# 13.2 从标准输入读取

# 通过管道将命令输出用 Vim 打开
command | vim -

# 示例
cat file.txt | vim -
ls -la | vim -
1
2
3
4
5
6

# 13.3 快速帮助

:help quickfix       " Quickfix 帮助
:help pattern        " 正则表达式帮助
:help usr_toc        " 用户手册目录
:h {keyword}         " 查询关键字帮助
1
2
3
4

# 14. 常用场景速查

# 场景 1:快速编辑文件

vim file.txt       " 打开文件
i                  " 进入插入模式
# 编辑内容
Esc                " 返回普通模式
:wq                " 保存并退出
1
2
3
4
5

# 场景 2:批量替换

vim file.txt
:%s/old/new/gc     " 全局替换(需确认)
# 按 y 确认,n 跳过,a 全部替换
:wq
1
2
3
4

# 场景 3:多文件搜索

vim
:vimgrep /TODO/ **/*.py    " 搜索所有 Python 文件
:copen                     " 打开结果窗口
# Enter 跳转到匹配位置
:cn                        " 下一个结果
1
2
3
4
5

# 场景 4:对比文件

# 使用 vimdiff
vimdiff file1.txt file2.txt
1
2

# 场景 5:批量编辑

vim *.txt          " 打开所有 txt 文件
:%s/old/new/g      " 替换当前文件
:wnext             " 保存并打开下一个
# 重复上述操作
1
2
3
4

# 15. vv 工具(配套脚本)

vv 是配套本文档的 shell 函数(com.shell.useful/a_vv.sh),编辑文件时自动在右侧分屏显示本文档,边写边查。

# 15.1 启动

用法 说明
vv 文件 左侧编辑文件,右侧显示本文档
vv 无参数时 fzf 选择当前目录文件

# 15.2 分屏窗口操作

操作 说明
Ctrl-w w 文件 / 文档窗口间循环切换
鼠标点击 切换窗口焦点并定位光标(普通模式)
\h 文档窗口 显示/隐藏 切换(同 :VvToggle)
q 在文档窗口内直接关闭
/关键词 只搜索当前焦点文档
关闭文件窗口 vim 自动整体退出,无需退两次

# 15.3 环境变量

变量 说明 默认值
VV_WIDTH 文档窗口宽度 66
VV_CHEAT 速查文档路径 本文档
VV_WIDTH=80 vv 文件      # 临时加宽文档窗口
1

# 15.4 复制到系统剪贴板

vv 启动的 vim 会话自动开启 set clipboard=unnamed:鼠标拖选 → 按 y → 直接进系统剪贴板,任意应用可粘贴。

# 学习资源

# 官方文档

  • Vim 官方网站 (opens new window)
  • Vim 帮助文档 (opens new window)
  • Vim FAQ (opens new window)

# 教程资源

  • Vim Search in File (opens new window)
  • 知乎 - 精通 Vim (opens new window)
  • Vim Pattern 文档 (opens new window)

# 插件资源

  • vim-plug 官方 (opens new window)
  • vim-plug 中文教程 (opens new window)
  • Vim 插件分享 (opens new window)
  • Quickfix 和 Location List (opens new window)

# 学习建议

  1. 从 vimtutor 开始:这是最好的入门教程
  2. 每天练习:Vim 需要肌肉记忆,每天使用才能熟练
  3. 逐步学习:不要一次学太多,先掌握基础移动和编辑
  4. 使用插件:合适的插件能大幅提升效率
  5. 自定义配置:根据个人习惯配置 .vimrc
  6. 查阅帮助:遇到问题使用 :help 命令

# 快捷键速查表

# 必记快捷键

功能 命令
进入插入模式 i
退出插入模式 Esc
保存 :w
退出 :q
保存并退出 :wq 或 :x
强制退出 :q!
撤销 u
重做 Ctrl+r
复制行 yy
粘贴 p
删除行 dd
搜索 /pattern
替换 :%s/old/new/g

开始你的 Vim 之旅吧!

#tool#Shell#tutorial#base
上次更新: 2026/09/10, 20:52:09
direnv
jadx

← direnv jadx→

最近更新
01
direnv
09-09
02
nvim
09-09
03
wget
09-09
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式