vim快捷键命令大全
文章目录
Vim是一个非常高效的文本编辑器。本文包含各种基本Vim命令,用于光标移动、编辑文本、运算符、文本标记、剪贴板、退出和搜索/替换。它还具有用于光标移动、字符搜索、视觉模式、文本编辑、文件选项卡、视觉模式、标记和文本对象的高级命令。
代码格式化
:set list
,\l
– 显示不可见字符:retab!
– 制表符和空格之间的自动转换:set expandtab
,retab!
– 转化成空格:set noexpandtab
,retab!
– 转化成制表符
.
– 重复
正常模式
h
,j
,k
,l
– 左、下、上、右gj
– 光标移动到下一行gk
– 光标移动到上一行0
– 跳转到当前行第一个字符g0
– 跳转到当前行第一个字符^
– 跳转当前行的首个字符g^
– 跳转当前行的首个字符$
– 跳转当前行的行尾g$
– 跳转当前行的行尾w
– 前进到下一个单词的开始W
– 到下一个单词b
– 回到当前/上一个单词的开头B
– 向后到当前/上一个 WORD 的开头e
– 前进到当前/下一个单词的结尾E
– 前进到当前/下一个 WORD 的结尾ge
– 向后到上一个单词的结尾gE
– 向后到上一个 WORD 的结尾<number>G
– 向下调整指定行gg
– 文件开头G
– 文件结尾^G
– 显示当前行%
– 移动到匹配的括号f<char>
– 找下一个F<char>
– 向后找t<char>
– 找到下一个字符并将光标放在之前T<char>
– 找到下一个字符并将光标放在向后之前;
– 转到f
/的下一个t
,
– 转到f
/ 的前一个t
g;
– 回到上次更改g,
– 转到下一个更改:changes
– 列表更改{number}+
-转到{number}
线下{number}-
– 去{number}
排队
标记
m{a-zA-Z}
– 设置一个标记- `
'{mark}
– 转到设置标记的第一个非空白字符
自动标记
- `
.
– 上次更改的位置^
– 最后插入的位置[
– 上次更改或插入的开始]
– 上次更改或插入结束<
– 上次光标选择的开始>
– 上次光标选择结束
搜索
/<text>
– 向前搜索d/ge
– 删除直到找到ge
v/ge
– 选择直到ge
/{text}\c
– 不区分大小写/{text}\C
– 区分大小写/\v{regex}
– 非常神奇的搜索(更接近正则表达式)/\V{text}
– 搜索/\v<{word}>
– 搜索这个词\zs
,\ze
– 有助于定义匹配的边界,例如/Practical \szVim<CR>
?<text>
– 向后搜索:hlsearch
– 突出显示搜索结果*
– 找到下一个当前单词n
– 同一方向的下一次出现N
– 下一次发生在相反方向
替换
:[range]s/{pattern}/{string}/{flags} [count]
– 替换
标识
g
– 全局(行内)c
– 确认更改y
执行这次匹配n
跳过这次匹配esc
跳过这次匹配a
替换这个和所有剩余的匹配{不在 Vi}q
停止替换 {Vi 无此功能}⌃E
向上滚动屏幕{Vi 无此功能}⌃Y
向下滚动屏幕{Vi 无此功能}
&
– 与之前调用替代品的标志相同e
– 压制错误i
– 忽略模式的大小写I
– 不要忽略模式的大小写p
– 打印包含最后一个替代品的行
范围
%
– 整个文件<n>,<m>
– 行间(包括)
替换字符串的特殊字符
\r
– 回车\t
– 制表符\\
– 单反斜杠\1
– 第一场比赛\0
,&
– 整个匹配模式~
– 使用先前调用替代的字符串\={Vim script}
– 评估脚本
编辑
O
– 在光标上方插入一行o
– 在光标下方插入一行A
– 在行尾开始输入I
– 在行首开始输入a
– 在光标后开始输入i
– 开始打字代替光标C
– 替换从光标到行尾S
– 替换整行s
– 替换当前选择x
– 替换光标下r<char>
– 将光标下的字符替换为gr
– 虚拟替换,如果制表符 = 空格R
– 就地更换(多于一封)gR
– 虚拟替换,如果制表符 = 空格{register}d{motion}
– 删除{动作}"_d{motion}
– 在黑洞中删除(不是剪切)c<motion>
– 改变{register}y<motion>
– 猛拉~<motion>
– 交换案例(选择时)u<motion>
– 小写(选中时)U<motion>
– 大写(选中时)><motion>
– 右移(>>
行)<<motion>
– 左移(<<
行)=<motion>
– 自动缩进u
,:u[ndo]
– 取消更改⌃R
,:red[o]
– 重做更改U
– 撤消所有最新的更改就行
插入模式
⌃w
– 删除单词⌃u
– 删除行⌃b
– 退格⌃[
– 作为逃避⌃o
– 插入普通模式(仅用于一个命令)⌃r{register}
– 在插入模式下粘贴⌃r={expression}
– 评估表达式和粘贴:let i = 1
^r=i<CR>
– 从 let 插入 i
⌃v[u]{digit}
– 按代码插入字母⌃k{char1}{char2}
– 插入字母:diagraphs (« » 12 14 34) 见:diagraph-table
可视模式
v
– 字符V
– 逐行⌃v
– 逐块gv
– 重新选择o
– 转到突出显示文本的另一端
移动
a)
,ab
– 一对(parentheses)
i)
,ib
– 里面(parentheses)
ci)
– 更换里面的所有东西(...)
a}
,aB
– 一对{braces}
i}
,iB
– 里面{braces}
a]
– 一对[brackets]
i]
– 代替[brackets]
a>
– 一对<angle brackets>
i>
– 代替<angle brackets>
a'
– 一对'single quotes'
i'
– 代替'single quotes'
a"
– 一对"double quotes"
i"
– 代替"double quotes"
a
- 一对
backtricks`- `
i
“ – 内幕 at
– 一对<xml>tags</xml>
it
– 代替<xml>tags</xml>
iw
– 当前词ciw
– 替换当前单词。
aw
– 当前单词加一个空格daw
– 删除单词和后面的一个空格。
iW
– 当前词aW
– 当前 WORD 加一个空格is
– 当前句子as
– 当前句子加一个空格ip
– 当前段落ap
– 当前段落加一个空行
复制粘贴
{register}p
– 粘贴文本:put {register}
– 从当前行下方的寄存器粘贴⌃r{register}
-贴在插入模式,其中寄存器可以是"
,0
,+
gp
– 将光标粘贴并放置在粘贴文本的末尾
{register}P
– 粘贴上一个{register}y{motion}
– 复制yy
– 复制- 默认情况下,yank 总是将所有内容放入未命名和 0 寄存器中
- 大写寄存器用于追加
"+
,"*
– 系统剪贴板
:reg
– 查看所有寄存器的内容"%
– 当前文件的名称"#
– 备用文件的名称".
– 最后插入的文本":
– 最后一个 Ex 命令"/
– 最后的搜索模式
视窗
⌃w w
– 下一个窗口⌃w h
– 左边的下一个窗口⌃w j
– 下面的下一个窗口⌃w k
– 上面的下一个窗口⌃w l
– 下一个窗口⌃w c
,:close
,:cl
– 关闭当前窗口⌃w o
,:only
,:on
– 只保持当前窗口打开⌃w =
– 均衡所有窗口的宽度和高度⌃w _
– 最大化活动窗口的高度⌃w |
– 最大化活动窗口的宽度{n} ⌃w _
– 将活动窗口高度设置为{n}
行{n} ⌃w |
– 将活动窗口宽度设置为 {n} 行⌃w s
,:split {filename}
– 水平分割⌃w v
,:vsplit {filename}
– 垂直分割⌃w H
,⌃w J
,⌃w K
,⌃w L
– 交换窗口 (:help window-moving
)⌃w x
– 旋转当前窗口 (:help window-moving
)⌃w r
– 旋转所有窗口 (:help window-moving
)^w z
– 关闭预览窗口
标签
:tabedit {filename}
,:tabe {filename}
– 在新选项卡中打开文件名^w T
– 将当前窗口移动到它自己的选项卡中:tabc[lose]
– 关闭当前选项卡:tabo[nly]
– 保持活动标签页{N}gt
,:tabn[ext] {N}
– 切换到标签页码{N}
gt
,:tabn[ext]
– 切换到下一个标签gT
,:tabp[revious]
– 切换到上一个选项卡:tabmove [N]
– 重新排列标签
缓冲器
:ls
– 缓冲区列表[b
,:bn[ext]
– 下一个缓冲区]b
,:bp[revious]
– 前一个缓冲区[B
,:bfirst
– 转到缓冲区中的第一个]B
,:blast
– 转到缓冲区的最后一个:buffer N
– 转到缓冲区 N⌃-^
– 备用文件:bd[elete]
– 删除当前缓冲区:bufdo {command}
– 为每个缓冲区执行命令
参数
:args
– 查看传递给 vim 的 args:args {list}
– 构建参数列表:args **/*.js **/*.css
– 在 args 中加载所有 js 和 css 文件
:argdo command
– 对每个参数执行命令:argdo normal @a
– 为 args 中的每个文件执行宏 a:argdo write
– 写入所有文件
]a
,:next
– 转到 args 中的下一个[a
,:prev
– 转到 args 中的上一个]A
,:first
– 转到 args 中的第一个[A
,:last
– 转到 args 中的最后一个
跳转
⌃o
– 跳转到上一个位置⌃i
– 跳转到前进位置:jumps
– 显示所有跳跃^]
– 跳转到光标下的关键字定义- 使用ctags生成ctags文件
⌃t
,:pop
– 返回标签历史记录g ⌃]>
– 如果有多个匹配项 – 显示选择:tselect
,:tnext
,:tprev
,:tfirst
,:tlast
– 在多个选项之间导航:tag {keyword}
– 跳转到定义:tjump {keyword}
– 跳跃并要求多个:tjump /{regex}
– 尝试去找
gf
– 跳转到光标下的文件名:set suffixesadd+=.rb
添加特定后缀:set path+=,%:h
以添加当前目录
(
,)
– 跳到上一句/下一句的开头{
,}
– 跳转到上一段/下一段的开头
命令行模式
ga
– 查找所选字符的代码:set nowrap
– 展开线:setlocal spell
– 打开拼写检查@:
– 重复最后一个 ex 命令⌃r
,⌃w
– 将当前单词复制并粘贴到命令行⌃p
,Up
– 历史记录中的前一项⌃n
,Down
– 历史记录中的下一项q:
– 查看命令行历史q/
– 查看搜索历史:sh
– 去壳:e <filename>
– 打开文件名进行编辑:e!
– 从磁盘重新读取文件(放弃所有更改):e %<Tab>
– 编辑当前打开的文件:e %:h<Tab>
– 获取当前打开文件的编辑目录
:w <filename>
– 将当前写入文件(整个文件或选择):wall
– 写入所有缓冲区:update <filename>
– 与 write 相同,但仅限于修改:r <command|filename>
– 从外部文件或命令读取并粘贴:!{command}
– 用shell执行命令:2,$!sort -t',' -k2
– 按第二列对除标题外的所有行进行排序read !{cmd}
–cmd
在 shell 中执行并在光标下方插入其标准输出:[range]write !{cmd}
–cmd
在 shell 中以[range]
行作为标准输入执行
:[range]t {address}
,:[range]co[py] {address}
– 从 [range] 复制行并粘贴到 {address}.
– 而不是地址意味着当前行:6copy.
– 从第 6 行复制并插入当前行:t6
– 将当前行复制到第 6 行下方:t.
– 复制当前行:t$
– 将当前行复制到文件末尾'<,'>t0
– 将视觉上选择的行复制到文件的开头
:[range]m[ove] {address}
– 从 [range] 移动行并粘贴到 {address}:[range]normal {command}
– 在选定范围内执行命令:%normal i//
– 而不是//
整个文件(命令所有行)'<,'>normal .
– 对所选行重复上一个命令
:[range] gloabl[!] /{pattern}/ [cmd]
– 在具有匹配模式的范围内执行命令:v
,:vglobal
– 在不匹配模式的每一行上执行 cmd
:sort
– 对选定的行进行排序:grep
– 文件中的 grep:grep -R Quickfix *
– 在所有目录中搜索
:vim[grep][!] /{pattern}/[g][j] {file} ...
– 使用内部 vim grep 搜索g
– 同一行上的多个匹配项j
– 不要跳到第一场比赛
:make
– 执行make命令:setlocal makepkg=NODE_DISABLE_COLORS=1\ nodelint\ %
– 更改制作程序:setglobal errorformat?
– 看看错误是如何被格式化的:compiler
– 设置编译器
宏
q{register}{macro}q
– 开始录制宏- 大写寄存器附加到宏
@{register}
– 重放宏10@a
– 从寄存器执行 10 次宏a
快速跳转
:cnext
– 跳转到下一个项目:cprev
– 跳转到上一项:cfirst
– 跳转到第一项:clast
– 跳到最后一项:cnfile
– 跳转到下一个文件中的第一项:cpfile
– 跳转到前一个文件中的最后一项:cc N
– 跳转到第 N 个项目:copen
– 打开快速修复窗口:cclose
– 关闭快速修复窗口:colder
– 旧版本的快速修复列表:cnewer
– 较新版本的快速修复列表
自动匹配
⌃n
– 通用关键字⌃p
– 通用关键字(以前)⌃y
– 接受当前选择的匹配(是)⌃e
– 恢复到最初输入的文本⌃h
– 从当前匹配中删除一个字符⌃l
– 从当前匹配中添加一个字符⌃x ⌃n
– 当前缓冲区关键字⌃x ⌃i
– 包含文件关键字⌃x ⌃]
– 标签文件关键字⌃x ⌃k
– 字典查找:set spell
应该启用
⌃x ⌃l
– 全线完成⌃x ⌃f
-文件名补全:pwd
– 从哪里自动完成工作:cd public
– 更改为文件夹:cd -
– 到上一个工作目录
⌃x ⌃o
– 全方位完成
Vim 拼写检查器
:set spell
– 开启拼写检查spellfile
使用自定义词共享文件
:set spelllang=en_us
– 更改说话区域[s
– 之前的错误]s
– 下一个错误z=
– 解决错误zg
– 将当前单词添加到拼写文件中zw
– 从拼写文件中删除当前单词zug
– 恢复zg
或zw
命令当前单词⌃x s
– 在插入模式下修复拼写错误的单词
折叠
zi
– 打开或关闭折叠za
– 切换当前折叠打开/关闭zc
– 关闭当前折叠zR
– 打开所有折叠zM
– 关闭所有折叠zv
– 展开折叠以显示光标zj
– 向下移动到下一个折叠的顶部zk
– 向上移动到上一个折叠的底部zo
– 打开当前折叠zO
– 递归打开当前折叠zc
– 关闭当前折叠zC
– 递归关闭当前折叠za
– 切换当前折叠zA
– 递归打开/关闭当前折叠zm
– 将折叠级别减一zM
– 关闭所有折叠zr
– 将折叠级别增加一zR
– 打开所有折叠
退出/保存
:q[uit]
– 退出vim:q[uit]!
– 不保存直接退出:cq[uit]
– 永远退出,不写ZZ
,:wq
– 写入并退出ZQ
,:wq!
– 写入当前文件并始终退出:wq {file}
– 写入{file}
并退出
Vim 从命令行
vim -u NONE -N
– 在没有设置的情况下启动 vim
插件
环绕.vim
S"
– 环绕选择"
cs}]
– 改变周围从}
到]
模式
K
– 显示当前符号的帮助[ [
– 跳转到上一个类或功能(正常、视觉、操作员模式)] ]
– 跳转到下一个类或功能(正常、视觉、操作员模式)[M
– 跳转到上一个类或方法(正常、可视、操作员模式)]M
– 跳转到下一个类或方法(正常、可视、操作员模式)aC
– 选择一个班级。例如:vaC、daC、yaC、caC(正常、操作员模式)iC
– 选择内部类。例如:viC、diC、yiC、ciC(正常、操作员模式)aM
– 选择一个功能或方法。例如:vaM、daM、yaM、cam(正常、操作员模式)iM
– 选择内部函数或方法。例如:viM、diM、yiM、ciM(正常、操作员模式)^r
– 运行脚本^b
– 设置断点
Rope
^c-d
– 显示文档^c-rr
– 改名^c-r1r
– 重命名模块^c-ro
– 组织进口^c-r1p
– 将模块转换为包^c-rm
– 提取方法^c-rl
– 提取变量^Space
– Rope完成