高效的模式编辑和快捷键
语法高亮和代码补全
丰富的插件和个性化配置
vim [选项] [文件...]
vim [选项] - [命令]
vim [选项] -t [标签]
vim [选项] -q [错误文件]
| 模式 | 进入方式 | 说明 |
|---|---|---|
| 普通模式 | Esc |
默认模式,用于导航和命令执行 |
| 插入模式 | i/I/a/A/o/O |
输入文本模式 |
| 命令模式 | : |
执行vim命令 |
| 可视模式 | v/V/Ctrl+v |
选择文本 |
| 替换模式 | R |
替换文本 |
| 选项 | 说明 |
|---|---|
-c 命令 |
启动后执行vim命令 |
-o[N] |
水平分割窗口打开文件 |
-O[N] |
垂直分割窗口打开文件 |
-p[N] |
标签页打开文件 |
-R 或 -M |
只读模式 |
+[行号] |
启动后光标定位到指定行 |
+/搜索词 |
启动后搜索指定内容 |
-u vimrc |
使用指定的vimrc配置文件 |
-n |
不使用交换文件(恢复模式) |
# 启动vim
vim 文件名
# 启动并跳转到第10行
vim +10 文件名
# 启动并搜索"hello"
vim +/hello 文件名
# 以只读模式打开
vim -R 文件名
vim -M 文件名 # 更强制的只读
| 操作 | 命令 | 说明 |
|---|---|---|
| 保存文件 | :w |
写入(保存)文件 |
| 保存并退出 | :wq 或 ZZ |
保存后退出 |
| 退出 | :q |
退出(无修改时) |
| 强制退出 | :q! |
不保存强制退出 |
| 保存为其他文件名 | :w 新文件名 |
另存为新文件 |
| 命令 | 说明 |
|---|---|
i |
在光标前插入 |
I |
在行首插入 |
a |
在光标后插入 |
A |
在行尾插入 |
o |
在下一行插入新行 |
O |
在上一行插入新行 |
s |
删除当前字符并插入 |
S |
删除当前行并插入 |
h | 左移 |
j | 下移 |
k | 上移 |
l | 右移 |
0 | 行首 |
^ | 行首第一个非空白字符 |
$ | 行尾 |
w | 下一个单词开头 |
b | 上一个单词开头 |
gg | 文件开头 |
G | 文件末尾 |
5G | 跳转到第5行 |
Ctrl+f | 向下翻页 |
Ctrl+b | 向上翻页 |
% | 匹配括号 |
} | 下一段落 |
{ | 上一段落 |
Ctrl+o | 跳转到上一个位置 |
| 操作 | 命令 | 说明 |
|---|---|---|
| 删除字符 | x |
删除光标处字符 |
| 删除单词 | dw |
从光标处删除到单词末尾 |
| 删除行 | dd |
删除当前行 |
| 删除到行尾 | D 或 d$ |
删除从光标到行尾 |
| 复制(yank) | yy |
复制当前行 |
| 粘贴 | p |
在光标后粘贴 |
| 粘贴 | P |
在光标前粘贴 |
| 撤销 | u |
撤销上一次操作 |
| 重做 | Ctrl+r |
重做被撤销的操作 |
| 重复 | . |
重复上一次编辑操作 |
# 在普通模式下
/搜索词 # 向下搜索
?搜索词 # 向上搜索
n # 下一个匹配项
N # 上一个匹配项
# 在命令模式下
:%s/旧文本/新文本/g # 全局替换
:%s/旧文本/新文本/gc # 全局替换,每次询问确认
:5,10s/旧文本/新文本/g # 在5-10行替换
:s/旧文本/新文本/g # 在当前行替换
| 命令 | 说明 |
|---|---|
v |
进入字符可视模式 |
V |
进入行可视模式 |
Ctrl+v |
进入块可视模式 |
d |
删除选中文本 |
y |
复制选中文本 |
c |
修改选中文本 |
> |
向右缩进选中文本 |
< |
向左缩进选中文本 |
# 启动时打开多个文件
vim file1.txt file2.txt file3.txt
# 在vim中操作多个文件
:args # 显示文件列表
:next (:n) # 下一个文件
:prev (:N) # 上一个文件
:first # 第一个文件
:last # 最后一个文件
:argdelete 文件名 # 从参数列表中删除文件
:argadd 文件名 # 添加文件到参数列表
# 文件间复制粘贴
# 在文件1中复制,然后 :next 到文件2粘贴
# 水平分割
:split (:sp) # 水平分割当前窗口
:split 文件名 # 水平分割打开新文件
# 垂直分割
:vsplit (:vs) # 垂直分割当前窗口
:vsplit 文件名 # 垂直分割打开新文件
# 窗口导航
Ctrl+w h # 切换到左窗口
Ctrl+w j # 切换到下窗口
Ctrl+w k # 切换到上窗口
Ctrl+w l # 切换到右窗口
Ctrl+w w # 循环切换窗口
# 窗口调整
Ctrl+w + # 增加窗口高度
Ctrl+w - # 减少窗口高度
Ctrl+w > # 增加窗口宽度
Ctrl+w < # 减少窗口宽度
Ctrl+w = # 等分窗口大小
# 关闭窗口
:q # 关闭当前窗口
:only (:on) # 只保留当前窗口
# 启动时使用标签页
vim -p file1 file2 file3
# 标签页命令
:tabnew # 新建标签页
:tabedit 文件名 # 在新标签页打开文件
:tabclose # 关闭当前标签页
:tabonly # 只保留当前标签页
:tabnext (:tabn) # 下一个标签页
:tabprev (:tabp) # 上一个标签页
:tabfirst # 第一个标签页
:tablast # 最后一个标签页
# 快捷键
gt # 下一个标签页
gT # 上一个标签页
5gt # 切换到第5个标签页
# 录制宏
q[a-z] # 开始录制到指定寄存器,如qa
...执行操作... # 执行要录制的操作
q # 停止录制
# 播放宏
@[a-z] # 播放指定寄存器的宏,如@a
@@ # 播放最后一次使用的宏
5@a # 播放宏a 5次
# 示例:添加行号
# 1. 按qa开始录制到寄存器a
# 2. 按I输入"1. "然后按Esc
# 3. 按j到下一行
# 4. 按q停止录制
# 5. 按99@a播放99次
:e 文件名 # 打开文件
:e! # 重新加载当前文件(放弃修改)
:e# # 切换前一个文件
:r 文件名 # 插入文件内容到当前位置
:r !命令 # 插入命令输出到当前位置
:w !sudo tee % # 用sudo权限保存文件(忘记sudo时)
:saveas 文件名 # 另存为新文件
:file 文件名 # 重命名当前文件
gg=G # 自动缩进整个文件
== # 自动缩进当前行
:ce # 居中当前行
:ri # 右对齐当前行
:le # 左对齐当前行
:set textwidth=80 # 设置行宽
gqip # 格式化当前段落
:join # 连接当前行和下一行
J # 同上(普通模式)
:set fileencoding=utf-8 # 设置文件编码
:set fileformat=unix # 设置换行符为UNIX格式(\n)
:set fileformat=dos # 设置换行符为DOS格式(\r\n)
:set bomb # 添加UTF-8 BOM
:set nobomb # 移除UTF-8 BOM
:set ff? # 查看当前文件格式
:set fenc? # 查看当前文件编码
" ~/.vimrc
" 基本设置
set nocompatible " 不与vi兼容
syntax on " 语法高亮
filetype plugin indent on " 文件类型检测
" 外观设置
set number " 显示行号
set relativenumber " 显示相对行号
set cursorline " 高亮当前行
set showmatch " 显示匹配的括号
set ruler " 显示光标位置
" 编辑设置
set tabstop=4 " Tab宽度为4空格
set shiftwidth=4 " 自动缩进宽度
set expandtab " Tab转换为空格
set autoindent " 自动缩进
set smartindent " 智能缩进
set backspace=indent,eol,start " 退格键行为
" 搜索设置
set ignorecase " 搜索忽略大小写
set smartcase " 智能大小写匹配
set incsearch " 实时搜索
set hlsearch " 高亮搜索结果
" 其他设置
set mouse=a " 启用鼠标
set clipboard=unnamed " 共享系统剪贴板
set laststatus=2 " 总是显示状态栏
set wildmenu " 命令行自动补全
" 快捷键映射
nnoremap <space> :nohlsearch<CR> " 空格键取消搜索高亮
inoremap jj <Esc> " jj快速退出插入模式
| 命令 | 说明 |
|---|---|
:set all |
显示所有设置 |
:set 选项? |
查看选项值 |
:set 选项 |
启用选项 |
:set no选项 |
禁用选项 |
:set 选项=值 |
设置选项值 |
:source ~/.vimrc |
重新加载配置文件 |
# 快速注释多行
1. Ctrl+v 进入块可视模式
2. 选择要注释的行
3. 按I输入注释符号(如#)
4. 按Esc,所有选中行都会添加注释
# 删除重复行
:sort u # 排序并去重
:g/^\(.*\)$\n\1$/d # 删除连续重复行
# 递增数字
1. 在第一行输入起始数字
2. 光标放在数字上
3. Ctrl+a 递增,Ctrl+x 递减
4. 选择多行后按g Ctrl+a 自动递增
# 列编辑(块可视模式)
1. Ctrl+v 进入块可视模式
2. 选择多列
3. 按I插入文本(每行相同位置插入)
4. 或按c修改选中文本
5. 或按d删除选中文本
# 安装vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# 在.vimrc中添加插件
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree' " 文件浏览器
Plug 'tpope/vim-surround' " 环绕符号编辑
Plug 'vim-airline/vim-airline' " 状态栏美化
Plug 'ycm-core/YouCompleteMe' " 代码补全
Plug 'preservim/nerdcommenter' " 快速注释
call plug#end()
# 安装插件
:PlugInstall
# 更新插件
:PlugUpdate
# 删除插件
:PlugClean
快速搜索、过滤和标记日志文件。
# 查看最后100行
vim +100 /var/log/syslog
# 搜索错误
/error
# 标记重要行
ma # 标记为a
'a # 跳转到标记a
高效编写和调试代码。
# 语法检查
:make
# 跳转到定义
gd # 局部定义
gD # 全局定义
# 代码折叠
zc # 折叠
zo # 展开
编辑配置文件。
# 批量注释配置
Ctrl+v # 选择多行
I# # 插入#
Esc # 应用
# 快速跳转
/Listen # 搜索配置项
:noh # 取消高亮
vimtutor命令学习教程(约30分钟)| 特性 | vim | emacs |
|---|---|---|
| 模式 | 模式化编辑(普通/插入/可视) | 无模式(组合键) |
| 学习曲线 | 较陡峭,但效率高 | 较平缓,功能全面 |
| 启动速度 | 非常快 | 较慢(尤其有配置时) |
| 扩展性 | VimScript、插件丰富 | Elisp、功能更强大 |
| 资源占用 | 较少 | 较多 |
" 临时显示
:set number
" 永久显示(添加到~/.vimrc)
set number
在粘贴前进入粘贴模式:
:set paste " 进入粘贴模式
i " 进入插入模式
Ctrl+Shift+v " 粘贴
Esc " 退出插入模式
:set nopaste " 退出粘贴模式
或使用快捷键:set pastetoggle=<F2>
# 命令行查看
vim --version
# vim内查看
:version
# 查看特定特性是否支持
:echo has('python3') " 返回1表示支持
:echo has('clipboard') " 检查剪贴板支持
view只读模式的vim
vimtutorvim交互式教程
vimdiff文件比较工具
nvimneovim(vim现代分支)