原生Vim操作大全
Vim模式
- 普通模式(Normal mode) - 默认模式,用于导航和操作文本
- 插入模式(Insert mode) - 用于输入文本
- 可视模式(Visual mode) - 用于选择文本
- 命令行模式(Command-line mode) - 用于执行命令
模式切换
-
普通模式 -> 插入模式
i
- 在光标前进入插入模式I
- 在行首进入插入模式a
- 在光标后进入插入模式A
- 在行尾进入插入模式o
- 在当前行下方新建一行并进入插入模式O
- 在当前行上方新建一行并进入插入模式c
- 删除选中字符并插入cc
- 删除当前行并插入C
- 删除到行尾并插入s
- 删除当前/选中字符并插入,删除当前字符并进入插入模式时等价于cl
S
- 等价于cc
-
普通模式 -> 可视模式
v
- 进入字符可视模式V
- 进入行可视模式Ctrl+v
- 进入块可视模式
-
普通模式 -> 命令行模式
:
- 进入命令行模式- 执行外部命令(原生)
:!<cmd>
- 执行shell命令:r !<cmd>
- 插入命令输出:r <file>
- 插入文件内容
- 选项设置(原生)
:set all
- 查看所有选项:set <option>
- 开启选项:set no<option>
- 关闭选项:set <option>?
- 查看选项值:set <option>=<value>
- 设置选项值
-
其余模式 -> 普通模式
ESC
- 返回普通模式
移动操作
基本移动
j
- 下移J
- 将两行文本连接成一行k
- 上移l
- 右移h
- 左移w
- 移动到下一个词开头W
- 移动到下一词开头(以空格划分词)e
- 移动到下一个词末尾E
- 移动到下一个词末尾(以空格划分词)b
- 移动到上一个词开头B
- 移动到上一个词开头(以空格划分词)
行内移动
0
- 移动到行首$
- 移动到行尾^
- 移动到行首第一个非空白字符%
- 移动到配对的字符处f<char>
- 移动到当前行下一个<char>
字符F<char>
- 移动到当前行上一个<char>
字符t<char>
- 移动到当前行下一个<char>
字符前T<char>
- 移动到当前行上一个<char>
字符后;
- 重复上次f
/F
/t
/T
命令,
- 反向重复上次f
/F
/t
/T
命令- 折行内移动
gj
- 移动折行视觉上的下一行gk
- 移动到折行视觉上的上一行g0
- 移动到折行视觉上的开头g$
- 移动到折行视觉上的末尾g^
- 移动到折行视觉上的第一个非空字符
跨行移动
gg
- 移动到文件开头g,
- 移动到最近一次编辑位置(原生)G
- 移动到文件末尾<num>G
- 移动到指定行号,是:<num>
的快捷键H
- 移动到屏幕顶部M
- 移动到屏幕中间L
- 移动到屏幕底部}
- 移动到下一个段落{
- 移动到上一个段落]]
- 移动到下一个函数/代码块[[
- 移动到上一个函数/代码块
视图调整
Ctrl+y
- 向上一行Ctrl+e
- 向下一行Ctrl+f
- 向下翻页Ctrl+b
- 向上翻页Ctrl+u
- 向上半页Ctrl+d
- 向下半页zz
- 聚焦光标
标记定位
m<letter>
- 设置标记'<letter>
- 跳转到标记行首:marks
- 查看当前文件所有标记:delmarks <letter>
- 删除对应标记
编辑操作
文本缩进
>>
- 普通模式下向右缩进当前行>
- 可视模式下向右缩进当前行<<
- 普通模式下向左缩进当前行<
- 可视模式下向左缩进当前行
文本折叠(原生)
zf
- 对选中行创建折叠zd
- 删除选中行的折叠zo
- 打开折叠zc
- 关闭折叠zj
- 移动到下一个折叠zk
- 移动到上一个折叠:mkview
- 保存折叠:loadview
- 加载折叠
文本剪切
x
- 剪切当前字符,等价于dl
X
- 剪切前一个字符d
- 剪切选定内容dd
- 普通模式下剪切当前行D
- 剪切到当前行结尾
复制粘贴
y
- 复制选中内容yy
- 普通模式下复制整行Y
- 等价于yy
(历史原因不是复制到行尾)p
- 在光标后粘贴P
- 在光标前粘贴"<reg>y
- 复制到指定寄存器"<reg>p
- 从指定寄存器粘贴
重复、撤销&重做
.
- 重复上次编辑操作u
- 撤销Ctrl+r
- 重做
查找替换
/<pattern>
- 向下查找<pattern>
?<pattern>
- 向上查找<pattern>
n
- 重复上次查找N
- 反向重复上次查找u/U
- 切换选中的文本为小写/大写~
- 切换当前字符大小写- 替换命令,其中分隔符可以是
/
、.
或|
:s|old|new
- 替换当前行第一个匹配:s|old|new|g
- 替换当前行所有匹配:'<,'>s|old|new|g
- 替换当前选中行所有匹配:'<,'>s|old|new|gc
- 交互式替换当前选中行匹配:%s|old|new|g
- 替换整个文件所有匹配:%s|old|new|gc
- 交互式替换整个文件匹配
批量操作
组合命令
- 重复操作:
<num>
+<operation>
3j
- 向下移动3行5dd
- 删除5行10x
- 删除10个字符2p
- 粘贴2次
- 文本对象操作:
<operator>
+<number>
+<i/a>
+<文本对象>
,其中常见的文本对象有单词w
,句子s
,段落p
,引号"/'
,括号()/[]/{}/<>
,标签t
daw
- 删除一个单词(包括周围空格)d2w
- 删除两个单词di(
- 删除括号内内容ci"
- 修改引号内内容yit
- 复制HTML标签内容
宏&寄存器
q<reg>
- 开始录制到寄存器q
- 停止录制@<reg>
- 执行寄存器中的宏@@
- 重复上次执行的宏"<reg>
- 指定寄存器:reg
- 查看寄存器内容:reg <reg>
- 查看特定寄存器内容
文件操作
信息统计
Ctrl+g
- 显示光标位置状态(原生)
保存退出
:w
- 保存文件:w <file>
- 另存为:x
- 保存并退出,是:wq
的快捷键:q
- 退出:q!
- 强制退出不保存
文件跳转
:e
- 创建缓存文件(原生)tab
- 提示与补全当前目录下的文件(夹),左右选择当前目录下的文件,上下选择上/下一级目录:ls
- 查看缓存文件:b+<编号>
- 切换缓存文件:bp/bn
- 上下切换缓存文件:bd
- 删除当前缓存文件:<编号>+bd
- 删除对应编号缓存文件
Ctrl+o
- 跳转到上一个文件中Ctrl+i
- 跳转到下一个文件中gd
- 跳转到局部定义gD
- 跳转到全局定义Ctrl+z
- 挂起vim,返回终端中(通过在终端中用fg
命令返回)- 当有多个任务被挂起,通过
jobs
在终端查看任务编号n
- 通过
fg %n
返回
- 当有多个任务被挂起,通过
窗口分割(原生)
:vs
- 垂直分割窗口:sp
- 水平分割窗口Ctrl+w h/j/k/l
- 在窗口间移动Ctrl+w w
- 切换到下一个窗口Ctrl+w c
- 关闭当前窗口Ctrl+w o
- 关闭其他窗口Ctrl+w r
- 交换窗口位置- 窗口宽度/高度调整
Ctrl+w >
- 增加窗口宽度Ctrl+w <
- 减少窗口宽度Ctrl+w +
- 增加窗口高度Ctrl+w -
- 减少窗口高度
- 窗口宽度/高度最大化/回归默认
Ctrl+w |
- 最大化当前窗口宽度Ctrl+w _
- 最大化当前窗口高度Ctrl+w =
- 均衡窗口大小
标签页管理(原生)
:tabe <file>
- 新建标签页:tabc
- 关闭当前标签页:tabo
- 关闭其他标签页gt
- 下一个标签页gT
- 上一个标签页ngt
- 切换到第n个标签页:a
- 全选所有标签页
Vim配置
打开文件时,所有配置都会在默认配置的基础上执行。而在配置文件中用:so
的时候,则是在当前配置的基础上执行。
基本配置
" 设置行号
set number" 设置<leader>
nnoremap <Space> <Nop>
let mapleader = " "" 在视觉行移动
nnoremap j gj
nnoremap k gk
nnoremap 0 g0
nnoremap $ g$
nnoremap ^ g^" 让复制粘贴使用系统剪切板
vnoremap y "+y
vnoremap x "+x
nnoremap p "+p
nnoremap <leader>p ""p" 全选
nnoremap <C-a> ggVG" 保存
nnoremap <C-s> :w<CR>" 窗口间移动
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l " 取消高亮
nnoremap <silent><Esc> :nohl<CR>" 消除^M
nnoremap <C-m> :%s.\r..g<CR>