vim快捷键简单cheatsheet

每次在使用Linux终端中修改文件总会发现自己浪费很多精力在回忆VIM的快捷键上。简单写个CheatSheet,为了在想不起来的时候来这边看一下。

移动与编辑

Normal基本移动

  • <C-d>/<C-f> 往下半页/一页
  • <C-u>/<C-b> 往上半页/一页
  • {lineno}gg 跳到第几行
  • zz/zt/zb 将光标位置置于屏幕中间/最上/最下 (记忆:top bottom)

进入Insert模式

  • s 删除当前光标字符后开始输入
  • S 删除当前行后开始输入

基于单词的移动

  • w/b 下一个/上一个单词的开头
  • e/ge 下一个/上一个单词的结尾
  • WBE 以非空格连续作为单词

基于标记的移动

  • m{mark} 把当前位置标记为mark
  • `{mark} 跳转到mark标记位置
  • `` 上次跳转前的位置
  • `. 上次修改的位置
  • `^ 上次插入的位置
  • 其他:% 跳转到匹配的下一个标记(例如左右括号)

Operator+Motion=Action

  • dt; 向后删除直到分号

文本对象操作

先用v确认范围,再d/y/c等

操作符与命令补充

  • gu/gU/g~ 转小写/大写/反转大小写
  • J join 连接两行
  • <C-a>/<C-x> 增加数字/减少数字
  • g<C-A> 创建递增序列 需先用visual选中一部分
  • </> 左/右缩进

寄存器与宏

寄存器

寄存器可用字符:a-z0-9

特殊寄存器:

  • " 默认寄存器 (复制,删除都在里面)
  • % 当前文件名
  • . 上一次插入的内容
  • : 上一次执行的命令

通过:reg {register}查看对应寄存器中的内容

指定寄存器

复制/删除/粘贴加上"{register}指定本次使用的寄存器

例子:

  • "ayy
  • "bdiw
  • "cp

寄存器字符大写:添加(append)而非覆盖

录制 + 重放:

  • q{register} 开始录制并存放在寄存器register中
  • 过程中q退出录制
  • @{register} 重放寄存器register中的操作
  • @@ 重放上一次宏的操作

.命令对宏不生效

命令模式

主要针对行操作

Ex命令格式

:[range] {excommand} [args]

  • range 范围 不给默认本行
  • excommand 特殊命令
  • args 后续参数 视命令而定

e.g.

  • :[range] delete [x] 删除range中的行到寄存器x delete 可简写d
  • :[range] yank [x]
  • :[range] print
  • :[range] copy {address} 把range中的行复制到address后面
  • :[range] move {address}
  • :[address] put [x] 把寄存器x中的内容粘贴到address后面

range由1/2个address构成,即{address}{address},{address}

address可以是

  • {lineno} 行号 (3代表第三行)(0代表第一行上面的虚拟行)
  • $ 最后一行
  • . 光标所在行
  • /{pattern}/ 下一个pattern所在的行

address 可做加减法 .+3代表光标往下第三行 $-3代表倒数第四行

address组合出range(可混用)

  • 1,3 文件的1-3行
  • .,.+4 当前-当前往下4行(共5行)
  • $-3,$ 文件最后的4行
  • % 代表当前文件所有行
  • '</'> 开头结尾 (v模式后按:自动选择)

批量操作 Normal 命令

:[range] normal {commands} 对range中的所有行执行Normal模式下的命令commands

  • 将range设置为% 可以对整个文件所有行执行
  • :[range] normal . 效果拔群
  • :[range] normal @{register} 同样

批量操作 Global 命令

:[range] global/{pattern}/[cmd] 对range中包含pattern的所有行执行command模式下的Ex命令

  • [cmd] Ex命令 不给默认是打印print
  • normal命令也是Ex命令
  • :[range] global/{pattern}/normal {commands} 执行Normal模式下的命令
    • 例子::% global /TODO/delete 删除所有带TODO的行

替换命令

:[range]s/{pattern}/{string}/[flags] 将pattern替换为string

1
2
3
4
5
flags:
g: 替换每一行的所有匹配
i: 忽视大小写
c: 替换前进行确认
n: 计数而不是替换

例子::%s/Vim//gn 统计文件中所有Vim出现的次数

作者

Jhuoer Yen

发布于

2024-03-03

更新于

2024-03-03

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×