vim 操作手册

vim 内部的参考文件
在命令行内输入 vim <filename>
,可以进入vim的编辑,比如
[root@VM-0-11-centos ~]# cp /mnt/pgdata/postgresql.conf /tmp/test.txt
[root@VM-0-11-centos ~]# vim /tmp/test.txt
当然,你还可以使用vim -on <filename_1> <filename_2> <filename_3>
进行多文件分屏,在相关的部分将详细讲解分屏
[root@VM-0-11-centos ~]# vim -on /tmp/test.txt /mnt/pgdata/pg_hba.conf /mnt/pgdata/postgresql.conf
进入vim后,可以输入:help user-manual
,或者 :help help.txt
对帮助文档进行浏览,具体内容如下目录
帮助文件名称 | 文件内容概要 | 附注 |
usr_toc.txt | user文档的详细目录 | user 目录 |
usr_01.txt | 关于本手册 | 初步知识 |
usr_02.txt | Vim 初步 | 初步知识 |
usr_03.txt | 光标移动 | 初步知识 |
usr_04.txt | 做小改动 | 初步知识 |
usr_05.txt | 选项设置 | 初步知识 |
usr_06.txt | 使用语法高亮 | 初步知识 |
usr_07.txt | 编辑多个文件 | 初步知识 |
usr_08.txt | 分割窗口 | 初步知识 |
usr_09.txt | 使用 GUI 版本 | 初步知识 |
usr_10.txt | 做大修改 | 初步知识 |
usr_11.txt | 从崩溃中恢复 | 初步知识 |
usr_12.txt | 小窍门 | 初步知识 |
| | |
usr_20.txt | 快速键入命令行 | 高效地编辑 |
usr_21.txt | 离开和回来 | 高效地编辑 |
usr_22.txt | 寻找要编辑的文件 | 高效地编辑 |
usr_23.txt | 编辑特殊文件 | 高效地编辑 |
usr_24.txt | 快速插入 | 高效地编辑 |
usr_25.txt | 编辑带格式的文本 | 高效地编辑 |
usr_26.txt | 重复 | 高效地编辑 |
usr_27.txt | 查找命令及模式 | 高效地编辑 |
usr_28.txt | 折叠 | 高效地编辑 |
usr_29.txt | 在代码间移动 | 高效地编辑 |
usr_30.txt | 编辑程序 | 高效地编辑 |
usr_31.txt | 利用 GUI | 高效地编辑 |
usr_32.txt | 撤销树 | 高效地编辑 |
| | |
usr_40.txt | 创建新的命令 | 调节 Vim |
usr_41.txt | 编写 Vim 脚本 | 调节 Vim |
usr_42.txt | 添加新的菜单 | 调节 Vim |
usr_43.txt | 使用文件类型 | 调节 Vim |
usr_44.txt | 自定义语法高亮 | 调节 Vim |
usr_45.txt | 选择你的语言 | 调节 Vim |
| | |
usr_90.txt | 安装 Vim | 让 Vim 工作 |
除了上述基础文档还有以下文档目录
帮助文件名称 | 文件内容概要 | 附注 |
quickref | 总览最常用的命令 | 基础 |
tutor | 面向初学者的 30 分钟交互式教程 | 基础 |
copying | 版权信息 | 基础 |
iccf | 资助乌干达贫困儿童 | 基础 |
sponsor | 赞助 Vim 的开发,成为一名注册用户 | 基础 |
www | 互联网上的 Vim | 基础 |
bugs | 如何提交漏洞报告 | 基础 |
| | |
帮助文件名称 | 文件内容概要 | 附注 |
intro.txt | 对 Vim 的一般介绍;帮助文件中所使用的符号 | 一般主题 |
help.txt | 总览及快速参考 (本文件) | 一般主题 |
helphelp.txt | 关于如何使用帮助文件 | 一般主题 |
index.txt | 以字母顺序排列的命令索引 | 一般主题 |
help-tags | 可跳转的所有标签 (标签索引) | 一般主题 |
howto.txt | 如何完成最常见的编辑任务 | 一般主题 |
tips.txt Vim | 的各种窍门 | 一般主题 |
message.txt | (错误) 信息及解释 | 一般主题 |
quotes.txt | Vim 的用户评价 | 一般主题 |
todo.txt | 已知的问题以及扩展计划 | 一般主题 |
develop.txt | Vim 的开发 | 一般主题 |
debug.txt | 调试 Vim 自身 | 一般主题 |
uganda.txt | Vim 发布条件和怎么花你的 money | 一般主题 |
帮助文件名称 | 文件内容概要 | 附注 |
starting.txt | 启动 Vim,Vim 命令参数,初始化 | 基本编辑 |
editing.txt | 编辑和写入文件 | 基本编辑 |
motion.txt | 有关移动的命令 | 基本编辑 |
scroll.txt | 在窗口中滚动文本 | 基本编辑 |
insert.txt | 插入模式和替换模式 | 基本编辑 |
change.txt | 删除和替换文本 | 基本编辑 |
undo.txt | 撤销和重做 | 基本编辑 |
repeat.txt | 重复命令,Vim 脚本及调试 | 基本编辑 |
visual.txt | 使用可视模式 (选择一个文本区域) | 基本编辑 |
various.txt | 各种其它命令 | 基本编辑 |
recover.txt | 从崩溃中恢复 | 基本编辑 |
| | |
| | |
帮助文件名称 | 文件内容概要 | 附注 |
cmdline.txt | 命令行编辑 | 高级编辑 |
options.txt | 所有选项的描述 | 高级编辑 |
pattern.txt | 正则表达式及查找命令 | 高级编辑 |
map.txt | 键盘映射及缩写 | 高级编辑 |
tagsrch.txt | 标签及特殊查找 | 高级编辑 |
windows.txt | 使用多窗口多缓冲区的命令 | 高级编辑 |
tabpage.txt | 使用多个标签页的命令 | 高级编辑 |
spell.txt | 拼写检查 | 高级编辑 |
diff.txt | 编辑同一文本的两到四个版本 | 高级编辑 |
autocmd.txt | 当事件发生时自动执行命令 | 高级编辑 |
eval.txt | 表达式求值,条件执行命令 | 高级编辑 |
channel.txt | 作业、通道、进程间通信 | 高级编辑 |
fold.txt | 隐藏 (折叠) 一定范围内的文本 | 高级编辑 |
帮助文件名称 | 文件内容概要 | 附注 |
testing.txt | Vim 和 Vim 脚本的测试 | 特殊问题 |
print.txt | 打印 | 特殊问题 |
remote.txt | 将 Vim 用作服务器/客户端 | 特殊问题 |
term.txt | 使用不同终端和鼠标 | 特殊问题 |
terminal.txt | 终端窗口支持 | 特殊问题 |
popup.txt | 弹出窗口支持 | 特殊问题 |
帮助文件名称 | 文件内容概要 | 附注 |
indent.txt | C 及其它语言的自动缩进 | 编程语言支持 |
syntax.txt | 语法高亮 | 编程语言支持 |
textprop.txt | 为文本附加属性,用于高亮和其它目的 | 编程语言支持 |
filetype.txt | 对某一类型文件的专有设定 | 编程语言支持 |
quickfix.txt | 支持快速 编辑-编译-修正 循环的命令 | 编程语言支持 |
ft_ada.txt | Ada (编程语言) 支持 | 编程语言支持 |
ft_rust.txt | Rust 文件类型支持 | 编程语言支持 |
ft_sql.txt | SQL 文件类型插件相关 | 编程语言支持 |
帮助文件名称 | 文件内容概要 | 附注 |
digraph.txt | 可用的二合字母清单 | 语言支持 |
mbyte.txt | 多字节文本支持 | 语言支持 |
mlang.txt | 非英语语言支持 | 语言支持 |
rileft.txt | 从右向左的编辑模式 | 语言支持 |
arabic.txt | 阿拉伯语支持及编辑 | 语言支持 |
farsi.txt | 波斯语编辑 | 语言支持 |
hebrew.txt | 希伯来语支持及编辑 | 语言支持 |
russian.txt | 俄罗斯语支持及编辑 | 语言支持 |
hangulin.txt | 韩语输入模式 | 语言支持 |
帮助文件名称 | 文件内容概要 | 附注 |
gui.txt | 图形用户界面(GUI) | GUI |
gui_w32.txt | Win32GUI | GUI |
gui_x11.txt | X11GUI | GUI |
| | |
帮助文件名称 | 文件内容概要 | 附注 |
if_cscop.txt | 联用cscope与Vim | 各种接口 |
if_lua.txt | Lua接口 | 各种接口 |
if_mzsch.txt | MzScheme接口 | 各种接口 |
if_perl.txt | Perl接口 | 各种接口 |
if_pyth.txt | Python接口 | 各种接口 |
if_tcl.txt | Tcl接口 | 各种接口 |
if_ole.txt | Win32下的OLE接口 | 各种接口 |
if_ruby.txt | Ruby接口 | 各种接口 |
debugger.txt | 与调试程序的接口 | 各种接口 |
netbeans.txt | NetBeans外部编辑器接口 | 各种接口 |
sign.txt | 调试标号 | 各种接口 |
帮助文件名称 | 文件内容概要 | 附注 |
vi_diff.txt | Vim和Vi之间的主要区别 | 版本 |
version4.txt | Vim3.0和4.x版本的区别 | 版本 |
version5.txt | Vim4.6和5.x版本的区别 | 版本 |
version6.txt | Vim5.7和6.x版本的区别 | 版本 |
version7.txt | Vim6.4和7.x版本的区别 | 版本 |
version8.txt | Vim7.4和8.x版本的区别 | 版本 |
帮助文件名称 | 文件内容概要 | 附注 |
os_390.txt | OS/390Unix | 特定系统相关 |
os_amiga.txt | Amiga | 特定系统相关 |
os_beos.txt | BeOS和BeBox | 特定系统相关 |
os_dos.txt | MS-DOS和MS-Windows通用的条目 | 特定系统相关 |
os_haiku.txt | Haiku | 特定系统相关 |
os_mac.txt | Macintosh | 特定系统相关 |
os_mint.txt | AtariMiNT | 特定系统相关 |
os_msdos.txt | MS-DOS(纯DOS及Windows内的DOS窗口) | 特定系统相关 |
os_os2.txt | OS/2 | 特定系统相关 |
os_qnx.txt | QNX | 特定系统相关 |
os_risc.txt | RISC-OS | 特定系统相关 |
os_unix.txt | Unix | 特定系统相关 |
os_vms.txt | VMS | 特定系统相关 |
os_win32.txt | MS-Windows | 特定系统相关 |
帮助文件名称 | 文件内容概要 | 附注 |
pi_getscript.txt | 下载Vim脚本的最新版本 | 标准插件 |
pi_gzip.txt | 读写压缩过的文件 | 标准插件 |
pi_logipat.txt | 模式的逻辑操作符 | 标准插件 |
pi_netrw.txt | 通过网络读写文件 | 标准插件 |
pi_paren.txt | 高亮匹配括号 | 标准插件 |
pi_spec.txt | 用于rpm规格文件的文件类型插件 | 标准插件 |
pi_tar.txt | Tar文件探索器 | 标准插件 |
pi_vimball.txt | 创建自安装的Vim脚本 | 标准插件 |
pi_zip.txt | Zip归档探索器 | 标准插件 |
vim 常规操作
普通模式
全局
操作 | 效果 |
:h[elp] <keyword> <filename.txt> | 打开关键字帮助 |
:sav[eas] <filename> | 另存为 |
:clo[se] | 关闭当前窗口,用于分屏 |
:ter[minal] | 打开一个shell窗口 |
K | 打开光标所在单词的man页面 |
移动光标
操作 | 效果 |
h | 左移光标 |
j | 下移光标 |
k | 上移光标 |
l | 右移光标 |
gj | move cursor down (multiline text) |
gk | move cursor up (multiline text) |
gg | 回文档顶部 |
H | 移动到当前页面顶部 |
M | 移动到当前页面中间 |
L | 移动到当前页面底部 |
w | 移动到下个单词开头 |
W | 移动到下个单词开头(单词含标点) |
e | 移动到下个单词结尾 |
E | 移动到下个单词结尾(单词含标点) |
b | 移动到上个单词开头 |
B | 移动到上个单词开头(单词含标点) |
ge | 移动到上个单词结尾 |
gE | 移动到上个单词结尾(单词含标点) |
% | 跳转到配对的符号(默认支持的配对符号组:: '()', '{}', '[]' 在vim中使用 :h matchpairs 获得更多信息) |
0 | 移动到行首 |
^ | 移动到行首的非空白符 |
$ | 移动到行尾 |
g_ | 移动到行内最后一个非空白符 |
gg | 移动到文件第一行 |
G | 移动到文件最后一行 |
5gg or 5G | 移动到第五行 |
gd | 跳转到局部定义 |
gD | 跳转到全局定义 |
fx | 移动到字符 x 下次出现的位置 |
tx | 移动到字符 x 下次出现的位置的前一个字符 |
插入模式 - 插入/追加文本
操作 | 效果 |
i | 从光标前开始插入字符 |
I | 从行首开始插入字符 |
a | 从光标后开始插入字符 |
A | 从行尾开始插入字符 |
o | 在当前行之下另起一行, 开始插入字符 |
O | 在当前行之上另起一行, 开始插入字符 |
ea | 从当前单词末尾开始插入 |
Ctrl + h | 在插入模式下,删除光标前的字符 |
Ctrl + w | 在插入模式下,删除光标前的单词 |
Ctrl + j | 在插入模式下,另起一行 |
Ctrl + t | 在插入模式下,向右缩进,宽度由 shiftwidth 控制 |
Ctrl + d | 在插入模式下,向左缩进,宽度由 shiftwidth 控制 |
Ctrl + n | 在插入模式下,在光标之前插入自动补全的下一个匹配项 |
Ctrl + p | 在插入模式下,在光标之前插入自动补全的上一个匹配项 |
Ctrl + rx | 插入寄存器 x 的内容 |
Ctrl + ox | 暂时进入正常模式以发出一个正常模式命令 x。 |
Esc | 退出插入模式 |
编辑文本
操作 | 效果 |
r | 替换当前字符 |
R | 在 ESC 按下之前,替换多个字符 |
J | 将下一行合并到当前行, 并在两部分文本之间插入一个空格 |
gJ | 将下一行合并到当前行, 两部分文本之间不含空格 |
gwip | 重新调整段落 |
g~ | switch case up to motion |
gu | 小写操作修饰符 |
gU | 大写操作修饰符 |
cc | 将光标所在的行删除, 然后进入插入模式 |
C | 将光标处到行尾删除, 然后进入插入模式 |
c$ | 将光标处到行尾删除, 然后进入插入模式 |
ciw | 将光标所在的单词删除, 然后进入插入模式 |
cw or ce | 从光标位置开始, 修改单词 |
s | 删除当前字符, 然后进入插入模式 |
S | 清空当前行, 然后进入插入模式 (同cc) |
xp | 当前字符后移 |
u | 撤销 |
U | 撤销上一次的改动行的操作 |
Ctrl + r | 重做(取消撤销) |
. | 再次执行上个命令 |
| |
可视化模式
选择文本
操作 | 效果 |
v | 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(比如y复制) |
V | 进入可视化模式(行粒度选择) |
o | 切换光标到选择区开头/结尾 |
Ctrl + v | 进入可视化模式(矩阵选择) |
O | 切换光标到选择区的角 |
aw | 选择当前单词 |
ab | 选择被 () 包裹的区域(含括号) |
aB | 选择被 {} 包裹的区域(含花括号) |
at | 选择被 <> 标签包裹的区域(含<>标签) |
ib | 选择被 () 包裹的区域(不含括号) |
iB | 选择被 {} 包裹的区域(不含花括号) |
it | 选择被 <> 标签包裹的区域(不含<>标签) |
Esc | 退出可视化模式 |
可视化模式命令
操作 | 效果 |
> | 向右缩进 |
< | 向左缩进 |
y | 复制 |
d | 剪切 |
~ | 大小写切换 |
u | 将选中文本转换为小写 |
U | 将选中文本转换为大写 |
寄存器
操作 | 效果 |
:reg[isters] | 显示寄存器内容 |
"xy | 复制内容到寄存器 x |
"xp | 粘贴寄存器 x 中的内容 |
"+y | 复制内容到系统剪贴板寄存器 |
"+p | 粘贴系统剪贴板寄存器的内容 |
| |
| |
- 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
- 特殊寄存器
操作 | 效果 |
0 | 上次复制 |
" | 未命名寄存器,上次复制或删除 |
% | 当前文件名 |
# | 轮换文件名 |
* | 剪贴板内容 (X11 primary) |
+ | 剪贴板内容 (X11 clipboard) |
/ | 上次搜索的pattern |
: | 上次执行的命令 |
. | 上次插入的文本 |
| 上次剪切的短于一行的文本 |
= | 表达式寄存器 |
_ | 黑洞寄存器 |
标记
操作 | 效果 |
:marks | 标记列表 |
ma | 设置当前位置为标记 a |
``a ` | 跳转到标记 a 的位置 |
y a ` | 复制当前位置到标记 a 的内容 |
``0 ` | go to the position where Vim was previously exited |
``" ` | go to the position when last editing this file |
``. ` | go to the position of the last change in this file |
``` ` | go to the position before the last jump |
:ju[mps] | list of jumps |
Ctrl + i | go to newer position in jump list |
Ctrl + o | go to older position in jump list |
:changes | list of changes |
g, | go to newer position in change list |
g; | go to older position in change list |
Ctrl + ] | jump to the tag under cursor |
| |
| |
| |
| |
宏
操作 | 效果 |
qa | 录制宏 a |
q | 停止录制宏 |
@a | 执行宏 a |
@@ | 重新执行上次执行的宏 |
| |
剪切, 复制, 粘贴
操作 | 效果 |
yy | 复制当前行 |
2yy | 复制 2 行 |
yw | 复制当前单词 |
yiw | 复制光标处的单词 |
yaw | 复制光标处的单词及其前后的空格 |
y$ | 复制, 从光标位置到行末 |
p | 在光标后粘贴 |
P | 在光标前粘贴 |
gp | put (paste) the clipboard after cursor and leave cursor after the new text |
gP | put (paste) before cursor and leave cursor after the new text |
dd | 剪切当前行 |
2dd | 剪切 2 行 |
dw | 剪切当前单词 |
diw | 删除光标处的单词 |
daw | 删除光标处的单词及其前后的空格 |
D | 剪切, 从光标位置到行末 |
d$ | 剪切, 从光标位置到行末 (同D) |
x | 剪切当前字符 |
文字缩进
操作 | 效果 |
>> | 将当前行向右缩进,宽度由 shiftwidth 控制 |
<< | 将当前行向左缩进,宽度由 shiftwidth 控制 |
>% | 向右缩进 () 或 {} 内的区域 (光标需置于括号上) |
>ib | 向右缩进 () 内的区域 |
>at | 向右缩进 <> 标签内的区域 |
3== | 自动缩进 3 行 |
=% | 自动缩进 () 或 {} 内的区域 (光标需置于括号上) |
=iB | 自动缩进 {} 内的区域 (光标需置于括号上) |
gg=G | 自动缩进整个缓冲区 |
]p | 粘贴并调整缩进至当前行 |
退出
操作 | 效果 |
:w | 保存 |
:w !sudo tee % | 使用 sudo 保存当前文件 |
:wq or :x or ZZ | 保存并退出 |
:q | 退出(修改未保存时警告) |
:q! or ZQ | 不保存强制退出 |
:wqa | 保存所有标签页并全部退出 |
查找/替换
操作 | 效果 |
/pattern | 查找pattern |
?pattern | 向上查找pattern |
\vpattern | pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符) |
n | 查找下一个 |
N | 查找上一个 |
:%s/old/new/g | 替换全部 |
:%s/old/new/gc | (逐个)替换 |
:noh[lsearch] | 移除搜索结果的高亮显示 |
多文件搜索
操作 | 效果 |
:vim[grep] /pattern/ { } | 在多个文件中搜索 pattern |
:cn[ext] | 移动至下一个 |
:cp[revious] | 移动至上一个 |
:cope[n] | 打开搜索结果列表 |
:ccl[ose] | close the quickfix |
| |
标签
操作 | 效果 |
:tabnew or :tabnew {page.words.file} | 在新标签中打开文件 |
Ctrl + wT | 将窗口变成标签 |
gt or :tabn[ext] | 切换到下一个标签 |
gT or :tabp[revious] | 切换到上一个标签 |
#gt | 切换到第 # 个标签 |
:tabm[ove] # | 移动标签到第 # 位(下标从 0 开始) |
:tabc[lose] | 关闭当前标签 |
:tabo[nly] | 关闭其他标签 |
:tabdo command | 在所有标签中执行命令 (例如 :tabdo q 关闭所有标签) |
多文件编辑
操作 | 效果 |
:e[dit] 文件名 | 新建缓冲区打开 filename |
:bn[ext] | 切换到下个缓冲区 |
:bp[revious] | 切换到上个缓冲区 |
:bd[elete] | 关闭缓冲区 |
:b[uffer]# | go to a buffer by # |
:b[uffer] file | go to a buffer by file |
:ls or :buffers | 列出所有打开的缓冲区 |
:sp[lit] 文件名 | 新建缓冲区打开 filename 并水平分割窗口 |
:vs[plit] 文件名 | 新缓冲区打开 filename 并垂直分割窗口 |
:vert[ical] ba[ll] | edit all buffers as vertical windows |
:tab ba[ll] | edit all buffers as tabs |
Ctrl + ws | 水平分割窗口 |
Ctrl + wv | 垂直分割窗口 |
Ctrl + ww | 在窗口间切换 |
Ctrl + wq | 关闭窗口 |
Ctrl + wx | exchange current window with next one |
Ctrl + w= | make all windows equal height & width |
Ctrl + wh | 切换到左侧窗口 |
Ctrl + wl | 切换到右侧窗口 |
Ctrl + wj | 切换到下侧窗口 |
Ctrl + wk | 切换到上侧窗口 |
Ctrl + wH | 使游标所在视窗全高并移至最左 (最左垂直视窗) |
Ctrl + wL | 使游标所在视窗全高并移至最右 (最右垂直视窗) |
Ctrl + wJ | 使游标所在视窗全宽并移至最下 (最下水平视窗) |
Ctrl + wK | 使游标所在视窗全宽并移至最上 (最上水平视窗) |
diff
操作 | 效果 |
zf | manually define a fold up to motion |
zd | delete fold under the cursor |
za | toggle fold under the cursor |
zo | open fold under the cursor |
zc | close fold under the cursor |
zr | reduce (open) all folds by one level |
zm | fold more (close) all folds by one level |
zi | toggle folding functionality |
]c | jump to start of next change |
[c | jump to start of previous change |
do or :diffg[et] | obtain (get) difference (from other buffer) |
dp or :diffpu[t] | put difference (to other buffer) |
:diffthis | make current window part of diff |
:dif[fupdate] | update differences |
:diffo[ff] | switch off diff mode for current window |