vim操作手册

张彤 2022年04月01日 59次浏览

vim 操作手册

vim快捷操作.jpg

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对帮助文档进行浏览,具体内容如下目录

  • 目录中的文件均可以用help <filename>打开,

    比如 :help usr_01.txt ,就是打开手册介绍。

帮助文件名称文件内容概要附注
usr_toc.txtuser文档的详细目录user 目录
usr_01.txt关于本手册初步知识
usr_02.txtVim 初步初步知识
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.txtVim 的用户评价一般主题
todo.txt已知的问题以及扩展计划一般主题
develop.txtVim 的开发一般主题
debug.txt调试 Vim 自身一般主题
uganda.txtVim 发布条件和怎么花你的 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.txtVim 和 Vim 脚本的测试特殊问题
print.txt打印特殊问题
remote.txt将 Vim 用作服务器/客户端特殊问题
term.txt使用不同终端和鼠标特殊问题
terminal.txt终端窗口支持特殊问题
popup.txt弹出窗口支持特殊问题
帮助文件名称文件内容概要附注
indent.txtC 及其它语言的自动缩进编程语言支持
syntax.txt语法高亮编程语言支持
textprop.txt为文本附加属性,用于高亮和其它目的编程语言支持
filetype.txt对某一类型文件的专有设定编程语言支持
quickfix.txt支持快速 编辑-编译-修正 循环的命令编程语言支持
ft_ada.txtAda (编程语言) 支持编程语言支持
ft_rust.txtRust 文件类型支持编程语言支持
ft_sql.txtSQL 文件类型插件相关编程语言支持
帮助文件名称文件内容概要附注
digraph.txt可用的二合字母清单语言支持
mbyte.txt多字节文本支持语言支持
mlang.txt非英语语言支持语言支持
rileft.txt从右向左的编辑模式语言支持
arabic.txt阿拉伯语支持及编辑语言支持
farsi.txt波斯语编辑语言支持
hebrew.txt希伯来语支持及编辑语言支持
russian.txt俄罗斯语支持及编辑语言支持
hangulin.txt韩语输入模式语言支持
帮助文件名称文件内容概要附注
gui.txt图形用户界面(GUI)GUI
gui_w32.txtWin32GUIGUI
gui_x11.txtX11GUIGUI
帮助文件名称文件内容概要附注
if_cscop.txt联用cscope与Vim各种接口
if_lua.txtLua接口各种接口
if_mzsch.txtMzScheme接口各种接口
if_perl.txtPerl接口各种接口
if_pyth.txtPython接口各种接口
if_tcl.txtTcl接口各种接口
if_ole.txtWin32下的OLE接口各种接口
if_ruby.txtRuby接口各种接口
debugger.txt与调试程序的接口各种接口
netbeans.txtNetBeans外部编辑器接口各种接口
sign.txt调试标号各种接口
帮助文件名称文件内容概要附注
vi_diff.txtVim和Vi之间的主要区别版本
version4.txtVim3.0和4.x版本的区别版本
version5.txtVim4.6和5.x版本的区别版本
version6.txtVim5.7和6.x版本的区别版本
version7.txtVim6.4和7.x版本的区别版本
version8.txtVim7.4和8.x版本的区别版本
帮助文件名称文件内容概要附注
os_390.txtOS/390Unix特定系统相关
os_amiga.txtAmiga特定系统相关
os_beos.txtBeOS和BeBox特定系统相关
os_dos.txtMS-DOS和MS-Windows通用的条目特定系统相关
os_haiku.txtHaiku特定系统相关
os_mac.txtMacintosh特定系统相关
os_mint.txtAtariMiNT特定系统相关
os_msdos.txtMS-DOS(纯DOS及Windows内的DOS窗口)特定系统相关
os_os2.txtOS/2特定系统相关
os_qnx.txtQNX特定系统相关
os_risc.txtRISC-OS特定系统相关
os_unix.txtUnix特定系统相关
os_vms.txtVMS特定系统相关
os_win32.txtMS-Windows特定系统相关
帮助文件名称文件内容概要附注
pi_getscript.txt下载Vim脚本的最新版本标准插件
pi_gzip.txt读写压缩过的文件标准插件
pi_logipat.txt模式的逻辑操作符标准插件
pi_netrw.txt通过网络读写文件标准插件
pi_paren.txt高亮匹配括号标准插件
pi_spec.txt用于rpm规格文件的文件类型插件标准插件
pi_tar.txtTar文件探索器标准插件
pi_vimball.txt创建自安装的Vim脚本标准插件
pi_zip.txtZip归档探索器标准插件
  • 这么多的参考文件仅供备用查看吧。

vim 常规操作

普通模式

全局

操作效果
:h[elp] <keyword> <filename.txt>打开关键字帮助
:sav[eas] <filename>另存为
:clo[se]关闭当前窗口,用于分屏
:ter[minal]打开一个shell窗口
K打开光标所在单词的man页面

移动光标

操作效果
h左移光标
j下移光标
k上移光标
l右移光标
gjmove cursor down (multiline text)
gkmove 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 的位置
ya `复制当前位置到标记 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 + igo to newer position in jump list
Ctrl + ogo to older position in jump list
:changeslist 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在光标前粘贴
gpput (paste) the clipboard after cursor and leave cursor after the new text
gPput (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
\vpatternpattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)
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] filego 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 + wxexchange 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

操作效果
zfmanually define a fold up to motion
zddelete fold under the cursor
zatoggle fold under the cursor
zoopen fold under the cursor
zcclose fold under the cursor
zrreduce (open) all folds by one level
zmfold more (close) all folds by one level
zitoggle folding functionality
]cjump to start of next change
[cjump to start of previous change
do or :diffg[et]obtain (get) difference (from other buffer)
dp or :diffpu[t]put difference (to other buffer)
:diffthismake current window part of diff
:dif[fupdate]update differences
:diffo[ff]switch off diff mode for current window