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}“ – 去准确的标记位置
  • '{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– 恢复zgzw命令当前单词
  • ⌃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}]– 改变周围从}]

模式

https://github.com/klen/python-mode

  • 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完成
ajax-loader