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
    • 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
    • Vim 编辑器入门指南
      • 📖 快速开始
        • 什么是 Vim?
        • 学习路径
        • vimtutor - 交互式教程
      • 🎯 Vim 模式
      • 1. 普通模式(Normal Mode)
        • 1.1 光标移动
        • 1.2 删除操作
        • 1.3 复制粘贴
        • 1.4 其他操作
      • 2. 插入模式(Insert Mode)
      • 3. 可视模式(Visual Mode)
      • 4. 命令行模式(Command Mode)
        • 4.1 文件操作
        • 4.2 搜索
        • 4.3 替换
        • 4.4 其他命令
      • 5. 多文件编辑
        • 5.1 分割窗口
        • 5.2 标签页
        • 5.3 缓冲区
      • 6. 高级搜索(vimgrep)
        • 6.1 基本用法
        • 6.2 Quickfix 操作
        • 6.3 vimgrepadd
        • 6.4 正则表达式技巧
      • 7. 插件管理
        • 7.1 vim-plug(推荐)
        • 7.2 推荐插件
      • 8. 配置文件(.vimrc)
      • 9. 实用技巧
        • 9.1 复制问题
        • 9.2 从标准输入读取
        • 9.3 快速帮助
      • 10. 常用场景速查
        • 场景 1:快速编辑文件
        • 场景 2:批量替换
        • 场景 3:多文件搜索
        • 场景 4:对比文件
        • 场景 5:批量编辑
      • 📚 学习资源
        • 官方文档
        • 教程资源
        • 插件资源
      • 💡 学习建议
      • 🎯 快捷键速查表
        • 必记快捷键
    • jadx
    • excalidraw
  • 网络

  • algo

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

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

Vim 编辑器入门指南

# Vim 编辑器入门指南

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

# 📖 快速开始

# 什么是 Vim?

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

# 学习路径

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

# vimtutor - 交互式教程

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

使用方法:

# 直接在终端运行
vimtutor

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

学习内容:

  • 移动光标
  • 插入和删除文本
  • 保存和退出文件
  • 搜索和替换
  • 基本编辑技巧

学习建议

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

# 🎯 Vim 模式

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

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

# 1. 普通模式(Normal Mode)

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

# 1.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 移动到段落内下一行
gk 移动到段落内上一行
+ / Enter 移到下一行第一个非空字符
- 移到上一行第一个非空字符

# 1.2 删除操作

命令 说明
x 删除光标后一个字符
dw 删除一个单词
d{n}w 删除 n 个单词
dd 删除整行
{n}dd 删除 n 行
d$ 删除到行尾
d0 删除到行首
df{char} 删除到下一个 {char} 字符
dG 删除到文件末尾
dH 删除到屏幕顶部
:1,2d 删除第 1-2 行
:5,$d 删除第 5 行到文件末尾
:%d 删除文件所有内容

# 1.3 复制粘贴

复制(yank):

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

粘贴(paste):

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

复制多行示例:

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

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

# 1.4 其他操作

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

# 2. 插入模式(Insert Mode)

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

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

常用组合

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

# 3. 可视模式(Visual Mode)

用于选择文本块:

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

可视模式操作:

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

# 4. 命令行模式(Command Mode)

按 : 进入命令行模式。

# 4.1 文件操作

命令 说明
:w 保存
:w! 强制保存
:w {file} 另存为
:saveas {file} 另存为
:q 退出
:q! 强制退出(不保存)
:wq 保存并退出
:x 保存并退出
:qa! 退出所有文件(不保存)
:e {file} 打开文件
:e! 放弃修改,重新加载

# 4.2 搜索

基本搜索:

命令 说明
/{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

# 4.3 替换

基本语法:

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

常用替换:

命令 说明
:s/old/new/ 替换当前行第一个
:s/old/new/g 替换当前行所有
:%s/old/new/ 替换每行第一个
:%s/old/new/g 替换所有
:%s/old/new/gi 替换所有(忽略大小写)
:%s/old/new/gc 替换所有(需确认)
:#,#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

# 4.4 其他命令

显示设置:

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

执行外部命令:

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

# 5. 多文件编辑

# 5.1 分割窗口

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

# 5.2 标签页

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

# 5.3 缓冲区

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

# 6. 高级搜索(vimgrep)

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

# 6.1 基本用法

语法:

:vimgrep /{pattern}/ {files}
1

示例:

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

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

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

# 6.2 Quickfix 操作

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

# 6.3 vimgrepadd

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

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

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

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

对比:

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

# 6.4 正则表达式技巧

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

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

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

# 7. 插件管理

# 7.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 查看插件状态

# 7.2 推荐插件

QFEnter - Quickfix 增强:

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

" 运行安装
:PlugInstall

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

# 8. 配置文件(.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)

# 9. 实用技巧

# 9.1 复制问题

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

解决方法:

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

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

" 方法 3:使用系统剪贴板
set clipboard=unnamedplus  " 在 .vimrc 中设置
1
2
3
4
5
6
7
8
9
10
11
12

# 9.2 从标准输入读取

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

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

# 9.3 快速帮助

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

# 10. 常用场景速查

# 场景 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

# 📚 学习资源

# 官方文档

  • 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 之旅吧!🚀

#vim#shell#tutorial#tool
上次更新: 2025/10/19, 17:40:23
raycast
jadx

← raycast jadx→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式