技术学习linuxvimVIM使用指南MaoDeYu2024-10-162025-07-23VIM 完整使用指南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
12sudo apt updatesudo apt install vim
Fedora
1sudo dnf install vim
Arch Linux
1sudo pacman -S vim
在 macOS 上
使用 Homebrew 安装:
1brew install vim
在 Windows 上
可以下载预编译的安装包:
Vim 官网下载页面
安装完成后,可以通过命令行或图形界面启动 VIM。
启动 VIM
打开一个文件
1vim 文件名
新建并编辑文件
如果文件不存在,VIM 会创建一个新文件:
1vim 新文件.txt
不带文件启动
直接输入 vim 打开空白编辑器:
1vim
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/\
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)
可以手动指定复制或删除内容存储到特定寄存器
系统剪贴板寄存器 ("+ 和 "*)
"+:通常对应系统剪贴板
"*:通常对应系统选择缓冲区
使用寄存器
复制到命名寄存器
12"ayy "a 寄存器复制当前行"byw "b 寄存器复制一个单词
从命名寄存器粘贴
12"ap 从 "a 寄存器粘贴"bp 从 "b 寄存器粘贴
复制到系统剪贴板
12"+y 复制到系统剪贴板"*y 复制到系统选择缓冲区
从系统剪贴板粘贴
12"+p 从系统剪贴板粘贴"*p 从系统选择缓冲区粘贴
查看寄存器内容使用命令 :reg 或 :registers 查看当前所有寄存器的内容。
1:reg
10. 宏(Macros)宏允许记录一系列操作并重复执行,大大提高编辑效率。
录制宏
开始录制
按 q 加上一个寄存器名(如 a 到 z)开始录制。
1qa
执行操作
进行需要录制的操作。
结束录制
按 q 结束录制。
1q
播放宏
@a:执行寄存器 a 中的宏
@@:重复执行上一个宏
重复执行宏
{number}@a:执行寄存器 a 中的宏 {number} 次
例如,5@a 执行宏 a 5 次
删除宏宏存储在寄存器中,可以通过复制空内容覆盖:
1:let @a=''
11. 分屏与窗口管理VIM 支持在同一个编辑器窗口中打开多个分屏,便于同时编辑多个文件或同一文件的不同部分。
基本分屏操作
水平分屏
1:split 或 :sp
垂直分屏
1:vsplit 或 :vsp
打开文件在分屏中
12: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 进行定制。配置文件通常位于用户主目录下。
创建或编辑 .vimrc1vim ~/.vimrc
常用配置项12345678910111213141516171819202122232425262728" 启用行号set number" 启用语法高亮syntax on" 设置缩进set tabstop=4set shiftwidth=4set expandtab" 启用鼠标支持set mouse=a" 设置搜索选项set hlsearchset incsearchset ignorecaseset smartcase" 设置主题colorscheme desert" 启用行尾自动换行set wrap" 启用相对行号set relativenumber
配置说明
行号与相对行号
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
12curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
在 .vimrc 中添加插件配置
12345678call 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。
常用插件推荐
文件浏览器
NERDTree
模糊查找
fzf
自动补全
YouCompleteMe
coc.nvim
状态栏
vim-airline
lightline.vim
语法高亮与代码折叠
vim-polyglot
Git 集成
vim-fugitive
主题与配色
gruvbox
dracula
安装插件示例(使用 vim-plug)
安装 vim-plug
参考前一章节的步骤。
在 .vimrc 中添加插件
12345678910111213141516171819202122call 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 自定义快捷键,提高操作效率。
示例:
123456789" 将 jk 映射为 Escinoremap jk
说明:
inoremap:在插入模式下映射
nnoremap:在普通模式下映射
快速移动与跳转
gg:跳转到文件开头
G:跳转到文件末尾
{number}G:跳转到指定行号
Ctrl+o:返回前一个跳转位置
Ctrl+i:前进到下一个跳转位置
m{char}:设置标记 {char}
'{char}:跳转到标记 {char} 的行
自动命令(Autocommands)自动执行特定事件的命令,提高工作流效率。
示例:
12" 在保存 Python 文件时自动格式化autocmd BufWritePre *.py execute ':Black'
补全与代码片段利用插件如 coc.nvim 或 YouCompleteMe 提供智能补全功能,提升编程效率。
代码片段(Snippets)
使用插件如 UltiSnips 创建和管理代码片段。
示例:
1234" 在 .vimrc 中配置 UltiSnipslet g:UltiSnipsExpandTrigger="
使用外部工具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)