VIM使用指南
VIM使用指南
MaoDeYuVIM 完整使用指南
VIM(Vi IMproved)是一款功能强大且高度可定制的文本编辑器,广泛应用于编程、系统管理和文本处理等领域。VIM 基于经典的 Vi 编辑器,增加了许多现代化的功能,使其在效率和灵活性上有显著提升。本指南将从基础到高级,全面介绍 VIM 的使用方法,帮助您充分发挥其潜力。
目录
- VIM 简介
- VIM 安装与启动
- VIM 模式
- 基本导航
- 编辑文本
- 复制与粘贴(Yank 与 Put)
- 搜索与替换
- 高级编辑操作
- 寄存器(Registers)
- 宏(Macros)
- 分屏与窗口管理
- 缓冲区与标签页
- 自定义配置(.vimrc)
- 插件管理
- VIM 高级技巧
- 结语
1. VIM 简介
VIM 是一个高度可定制的文本编辑器,具有强大的文本处理能力和丰富的插件生态系统。它支持多种编程语言的语法高亮、代码折叠、自动补全等功能,同时通过键盘操作提高编辑效率。
VIM 的特点
- 模式编辑:通过不同的模式(如普通模式、插入模式等)实现不同的操作。
- 可扩展性:支持大量插件和脚本,可以根据需求定制功能。
- 轻量高效:占用资源少,响应快速,适用于各种操作系统。
- 跨平台:可在 Linux、macOS、Windows 等系统上运行。
2. VIM 安装与启动
安装 VIM
在 Linux 上
大多数 Linux 发行版默认已经安装 VIM。如果没有,可以使用包管理器进行安装。
Debian/Ubuntu
1
2sudo apt update
sudo apt install vimFedora
1
sudo dnf install vim
Arch Linux
1
sudo pacman -S vim
在 macOS 上
使用 Homebrew 安装:
1 | brew install vim |
在 Windows 上
可以下载预编译的安装包:
安装完成后,可以通过命令行或图形界面启动 VIM。
启动 VIM
打开一个文件
1
vim 文件名
新建并编辑文件
如果文件不存在,VIM 会创建一个新文件:
1
vim 新文件.txt
不带文件启动
直接输入
vim
打开空白编辑器:1
vim
3. VIM 模式
VIM 的核心在于其多模式编辑机制,主要包括以下几种模式:
普通模式(Normal Mode)
默认模式,用于导航、删除、复制、粘贴等操作。
插入模式(Insert Mode)
用于输入文本。可通过按
i
、a
、o
等命令进入。可视模式(Visual Mode)
用于选择文本范围,可通过按
v
(字符可视)、V
(行可视)或Ctrl+v
(块可视)进入。命令行模式(Command-Line Mode)
用于执行命令,如保存文件、退出、搜索等。通过按
:
进入。替换模式(Replace Mode)
用于替换现有字符。通过按
R
进入。
切换模式
从普通模式进入插入模式
i
:在光标前插入I
:在行首插入a
:在光标后追加A
:在行尾追加o
:在当前行下方新开一行并进入插入模式O
:在当前行上方新开一行并进入插入模式
从插入模式返回普通模式
按
Esc
键从普通模式进入可视模式
v
:字符可视模式V
:行可视模式Ctrl+v
:块可视模式
从普通模式进入命令行模式
按
:
键
4. 基本导航
在普通模式下,可以使用多种快捷键进行高效导航。
移动光标
h
:左移一个字符j
:下移一行k
:上移一行l
:右移一个字符
快速移动
w
:跳到下一个单词的开头e
:跳到当前或下一个单词的结尾b
:跳到上一个单词的开头0
(零):跳到行首^
:跳到行首第一个非空字符$
:跳到行尾gg
:跳到文件开头G
:跳到文件末尾{数字}G
:跳到指定行号- 例如,
10G
跳到第 10 行
- 例如,
页面滚动
Ctrl+f
:向前滚动一页Ctrl+b
:向后滚动一页Ctrl+d
:向前滚动半页Ctrl+u
:向后滚动半页
查找
/pattern
:向前搜索pattern
?pattern
:向后搜索pattern
n
:跳到下一个匹配项N
:跳到上一个匹配项
5. 编辑文本
在插入模式下,可以进行文本输入和编辑。
插入文本
进入插入模式后,可以直接输入文本:
i
:在光标前插入a
:在光标后插入o
:在当前行下方新开一行并插入O
:在当前行上方新开一行并插入
删除文本
在普通模式下,可以使用以下命令删除文本:
x
:删除光标所在的字符X
:删除光标前的字符dw
:删除从光标到下一个单词的开头dd
:删除当前行d$
:删除光标到行尾的内容d0
:删除光标到行首的内容
修改文本
cw
:修改从光标到下一个单词开头的内容c$
:修改从光标到行尾的内容c0
:修改从光标到行首的内容r{char}
:替换光标所在的字符为{char}
R
:进入替换模式,可以连续替换多个字符
撤销与重做
u
:撤销上一步操作Ctrl+r
:重做上一步撤销的操作
6. 复制与粘贴(Yank 与 Put)
VIM 中的复制称为“yank”,粘贴称为“put”。复制的内容存储在寄存器中,可在不同位置粘贴。
复制(Yank)
yy
或Y
:复制当前行{数字}yy
:复制指定数量的行- 例如,
5yy
复制当前行及其下 4 行
- 例如,
yw
:复制从光标到单词结尾的内容y$
:复制从光标到行尾的内容y0
:复制从行首到光标的内容v
+ 移动光标 +y
:复制选中的文本(可视模式)
粘贴(Put)
p
:在光标后粘贴P
:在光标前粘贴"+p
或"*p
:从系统剪贴板粘贴(取决于系统配置)
使用寄存器
"aY
:将当前行复制到寄存器a
"ap
:从寄存器a
粘贴内容- 可以使用多个寄存器(
a
到z
)进行分类存储
7. 搜索与替换
VIM 提供强大的搜索与替换功能,支持正则表达式,便于高效编辑。
搜索
/pattern
:向前搜索pattern
?pattern
:向后搜索pattern
n
:跳转到下一个匹配项N
:跳转到上一个匹配项*
:搜索光标下的单词#
:反向搜索光标下的单词
高亮显示
:set hlsearch
:启用搜索高亮:nohlsearch
或:noh
:取消搜索高亮:set incsearch
:启用增量搜索,即输入搜索模式时即时显示匹配结果
替换
:s/pattern/replacement/
:替换当前行第一个匹配项:s/pattern/replacement/g
:替换当前行所有匹配项:%s/pattern/replacement/g
:替换整个文件所有匹配项:n,m s/pattern/replacement/g
:替换第n
行到第m
行的匹配项- 例如,
:10,20s/foo/bar/g
替换第 10 行到第 20 行中的所有foo
为bar
- 例如,
:s/pattern/replacement/gc
:在替换时逐个确认- 按提示输入
y
(替换)、n
(跳过)、a
(全部替换)、q
(退出)、l
(仅替换当前项)
- 按提示输入
使用正则表达式
VIM 的搜索与替换支持正则表达式,使其更加强大。
匹配行首
1
/^pattern/
匹配行尾
1
/pattern$/
匹配任意字符
1
/p.ttern/ " 匹配 p后任意字符ttern
匹配多个选项
1
/foo\|bar/
匹配单词边界
1
/\<foo\>/ " 匹配整个单词 foo
8. 高级编辑操作
自动缩进
>>
:将当前行向右缩进一个级别<<
:将当前行向左缩进一个级别={motion}
:重新缩进选定区域- 例如,
=G
:从当前行到文件末尾重新缩进
- 例如,
代码折叠
VIM 支持代码折叠,便于管理大文件。
zc
:关闭当前折叠zo
:打开当前折叠zM
:关闭所有折叠zR
:打开所有折叠za
:切换当前折叠状态
移动与交换
{number}j
或{number}k
:上下移动指定行数- 例如,
3j
向下移动 3 行
- 例如,
:m {destination}
:移动当前行到指定位置- 例如,
:m 10
将当前行移动到第 10 行
- 例如,
:move {source} {destination}
:移动指定范围的行- 例如,
:3,5m 10
将第 3 到第 5 行移动到第 10 行后
- 例如,
复制与粘贴高级用法
y{motion}
:复制指定范围- 例如,
y$
复制从光标到行尾
- 例如,
p
和P
:粘贴位置可以根据需求灵活选择
9. 寄存器(Registers)
VIM 的寄存器用于存储复制、删除或其他操作的内容。默认寄存器和命名寄存器可用于分类管理文本。
常用寄存器
默认寄存器 (
"
)- 自动存储最近的复制或删除内容
命名寄存器 (
"a
到"z
)- 可以手动指定复制或删除内容存储到特定寄存器
系统剪贴板寄存器 (
"+
和"*
)"+
:通常对应系统剪贴板"*
:通常对应系统选择缓冲区
使用寄存器
复制到命名寄存器
1
2"ayy "a 寄存器复制当前行
"byw "b 寄存器复制一个单词从命名寄存器粘贴
1
2"ap 从 "a 寄存器粘贴
"bp 从 "b 寄存器粘贴复制到系统剪贴板
1
2"+y 复制到系统剪贴板
"*y 复制到系统选择缓冲区从系统剪贴板粘贴
1
2"+p 从系统剪贴板粘贴
"*p 从系统选择缓冲区粘贴
查看寄存器内容
使用命令 :reg
或 :registers
查看当前所有寄存器的内容。
1 | :reg |
10. 宏(Macros)
宏允许记录一系列操作并重复执行,大大提高编辑效率。
录制宏
开始录制
按
q
加上一个寄存器名(如a
到z
)开始录制。1
qa
执行操作
进行需要录制的操作。
结束录制
按
q
结束录制。1
q
播放宏
@a
:执行寄存器a
中的宏@@
:重复执行上一个宏
重复执行宏
{number}@a
:执行寄存器a
中的宏{number}
次- 例如,
5@a
执行宏a
5 次
- 例如,
删除宏
宏存储在寄存器中,可以通过复制空内容覆盖:
1 | :let @a='' |
11. 分屏与窗口管理
VIM 支持在同一个编辑器窗口中打开多个分屏,便于同时编辑多个文件或同一文件的不同部分。
基本分屏操作
水平分屏
1
:split 或 :sp
垂直分屏
1
:vsplit 或 :vsp
打开文件在分屏中
1
2:split 文件名
:vsplit 文件名
窗口导航
Ctrl+w h
:跳转到左边的窗口Ctrl+w j
:跳转到下边的窗口Ctrl+w k
:跳转到上边的窗口Ctrl+w l
:跳转到右边的窗口Ctrl+w w
:在所有窗口间循环切换Ctrl+w t
:跳转到最上面的窗口Ctrl+w b
:跳转到最下面的窗口
调整窗口大小
Ctrl+w >
:增大垂直分屏的宽度Ctrl+w <
:减小垂直分屏的宽度Ctrl+w +
:增大水平分屏的高度Ctrl+w -
:减小水平分屏的高度Ctrl+w =
:使所有窗口大小相等
关闭窗口
:q
:关闭当前窗口:close
:关闭当前窗口:only
:关闭所有其他窗口,只保留当前窗口
12. 缓冲区与标签页
缓冲区(Buffers)
VIM 中的每个打开的文件都对应一个缓冲区。可以在多个缓冲区间切换。
列出所有缓冲区
1
:ls 或 :buffers
切换缓冲区
1
:buffer {编号或名称}
例如,
:buffer 2
切换到缓冲区 2删除缓冲区
1
:bd 或 :bdelete
关闭当前缓冲区
标签页(Tabs)
标签页允许在一个 VIM 实例中打开多个标签,每个标签可以包含多个窗口。
打开新标签页
1
:tabnew 或 :tabnew 文件名
切换标签页
gt
:跳转到下一个标签页gT
:跳转到上一个标签页{数字}gt
:跳转到指定编号的标签页
关闭标签页
1
:tabclose 或 :tabc
列出所有标签页
1
:tabs
13. 自定义配置(.vimrc)
VIM 的行为可以通过配置文件 .vimrc
进行定制。配置文件通常位于用户主目录下。
创建或编辑 .vimrc
1 | vim ~/.vimrc |
常用配置项
1 | " 启用行号 |
配置说明
行号与相对行号
set number
:显示绝对行号set relativenumber
:显示相对行号,便于跳转
缩进设置
set tabstop=4
:设置 Tab 键为 4 个空格set shiftwidth=4
:设置自动缩进为 4 个空格set expandtab
:将 Tab 键转换为空格
搜索配置
set ignorecase
:搜索时忽略大小写set smartcase
:如果搜索模式中包含大写字母,则区分大小写
界面配置
syntax on
:启用语法高亮colorscheme {theme}
:设置颜色主题
自动加载插件管理器
使用插件管理器可以方便地安装和管理 VIM 插件,如 Vundle、Pathogen、vim-plug 等。
示例:使用 vim-plug
安装 vim-plug
1
2curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim在
.vimrc
中添加插件配置1
2
3
4
5
6
7
8call plug#begin('~/.vim/plugged')
" 插件列表
Plug 'tpope/vim-sensible'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'preservim/nerdtree'
call plug#end()安装插件
在 VIM 中执行以下命令:
1
:PlugInstall
14. 插件管理
插件扩展了 VIM 的功能,提升编辑效率和用户体验。常见的插件管理器包括 vim-plug、Vundle 和 Pathogen。
常用插件推荐
文件浏览器
模糊查找
自动补全
状态栏
语法高亮与代码折叠
Git 集成
主题与配色
安装插件示例(使用 vim-plug)
安装 vim-plug
参考前一章节的步骤。
在
.vimrc
中添加插件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22call plug#begin('~/.vim/plugged')
" 文件浏览器
Plug 'preservim/nerdtree'
" 模糊查找
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" 自动补全
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" 状态栏
Plug 'vim-airline/vim-airline'
" Git 集成
Plug 'tpope/vim-fugitive'
" 主题
Plug 'morhetz/gruvbox'
call plug#end()安装插件
在 VIM 中执行
:PlugInstall
管理插件
更新插件
1
:PlugUpdate
移除插件
- 从
.vimrc
中删除对应的Plug
行 - 执行
:PlugClean
删除未使用的插件
- 从
15. VIM 高级技巧
快捷键映射
通过 .vimrc
自定义快捷键,提高操作效率。
示例:
1 | " 将 jk 映射为 Esc |
说明:
inoremap
:在插入模式下映射nnoremap
:在普通模式下映射<leader>
:领导键,默认是\
,可以在.vimrc
中自定义,如let mapleader=","
快速移动与跳转
gg
:跳转到文件开头G
:跳转到文件末尾{number}G
:跳转到指定行号Ctrl+o
:返回前一个跳转位置Ctrl+i
:前进到下一个跳转位置m{char}
:设置标记{char}
'{char}
:跳转到标记{char}
的行
自动命令(Autocommands)
自动执行特定事件的命令,提高工作流效率。
示例:
1 | " 在保存 Python 文件时自动格式化 |
补全与代码片段
利用插件如 coc.nvim
或 YouCompleteMe
提供智能补全功能,提升编程效率。
代码片段(Snippets)
使用插件如 UltiSnips 创建和管理代码片段。
示例:
1 | " 在 .vimrc 中配置 UltiSnips |
使用外部工具
VIM 可以与多种外部工具集成,如编译器、调试器等。
示例:
编译代码
1
:make
查看编译错误
1
:copen
快速跳转到错误位置
使用
:cnext
和:cprev
版本控制集成
使用插件如 vim-fugitive 集成 Git 功能。
常用命令:
:Gstatus
:查看 Git 状态:Gdiff
:查看差异:Gcommit
:提交更改:Gpush
:推送更改
代码调试
使用插件如 Vimspector 进行代码调试。
配置示例:
参考插件文档进行详细配置,根据编程语言选择合适的调试器。
使用终端
VIM 8 及以上版本支持内置终端,允许在编辑器内执行命令行操作。
打开终端:
1 | :terminal |
分屏中打开终端:
1 | :split | terminal |
16. 结语
VIM 是一款极具深度和广度的文本编辑器,通过不断学习和实践,您可以掌握其强大的功能,提高工作效率。本指南涵盖了从基础到高级的各类操作,但 VIM 的世界远不止于此。建议您结合实际需求,探索更多功能,并根据个人习惯进行定制化配置。
进一步学习资源
- VIM 官方文档
- VIM Tutor(内置教程,输入
vimtutor
命令启动) - VIM Awesome(插件集合)
- VIM Adventures(通过游戏学习 VIM)