Vim相关指令汇总

查找指令

  • f{char}/F{char} 在行内查找下/上一指定字符,光标停留在查找到的指定字符上,重复;,回退,
  • t{char}/T{char} 在行内查找下/上一指定字符,光标停留在查找到的指定字符之前,重复;,回退,
  • /pattern<CR>/?pattern<CR> 在文档中查找下/上一处匹配项,重复n,回退N
  • * 查找当前光标下的单词,重复n,回退N

替换指令

  • :s/target/replacement 执行一处替换
  • :s/target/replacement/g 执行一行替换
  • :%s/target/replacement/g 执行全文替换

移动指令

  • j,k/gj,gk 移动实际行/屏幕行
  • 0/g0 移动到实际行/屏幕行行首
  • ^/g^ 移动到实际行/屏幕行的第一个非空白字符
  • 移动到实际行/屏幕行的行尾

基于单词移动

  • w 正向移动到下一单词开头
  • b 反向移动到当前单词/上一单词的开头
  • e 正向移动到当前单词/下一单词的结尾
  • ge 反向移动到上一单词的结尾
  • W 正向移动到下一字串开头
  • B 反向移动到当前字串/上一字串的开头
  • E 正向移动到当前字串/下一字串的结尾
  • gE 反向移动到上一字串的结尾

简单理解:字串比单词更长,e.g.为4个单词或1个字串,如果要删除的词里有特殊符号,则用字串删除更方便

删除指令

  • x/dl 删除当前字符
  • dd 删除当前行
  • dw 删除当前单词
  • daw 删除当前文本对象
  • dap 删除当前段落
  • <C-h> 插入模式下删除前一个字符(同退格键)(bash也可用)
  • <C-w> 插入模式下删除前一个单词(bash也可用)
  • <C-u> 插入模式下删除至行首(bash也可用)

复制和粘贴指令

  • y 复制yank
    • yw 复制当前单词
    • yap 复制当前段落
    • "ayw 复制当前单词到a寄存器
  • p 粘贴put(光标之后)
    • "ap 将寄存器a中的内容复制到当前位置
  • P 粘贴(光标之前)
  • <C-o>{register} 在插入模式下,粘贴寄存器{register}中的内容到当前光标下

运算指令

  • [count]<C-a> 对当前光标上或之后的数值加[count]
  • [count]<C-x> 对当前光标上或之后的数值减[count]

注:<C-a><C-x>可以对光标之后的第一个数值进行操作,不必将光标移动到数值的位置也可。

其他指令

  • g~ 反转大小写
    • g~~ 反转当前行大小写
    • g~w 反转当前单词大小写
    • g~W 反转当前字串大小写
    • g~ap 反转当前段落大小写
  • gU 转换为大写
    • gUU 转换当前行为大写
    • gUw 转换当前单词为大写
    • gUap 转换当前段落为大写
  • gu 转换为小写
    • guu 转换当前行为小写
    • guw 转换当前单词为小写
    • guap 转换当前段落为小写
  • >/< 增加/减小缩进
    • >> 缩进当前行
    • >w/>l 增加当前行缩进(毕竟单词和字符都在一行)
    • >ap 增加当前段落缩进
  • = 自动缩进
  • gc 注释/反注释(需安装tpope/vim-commentary插件)
    • gcc 注释/反注释当前行
    • gcap 注释当前段落
  • zz 重绘屏幕,当前行显示在窗口正中
    • <C-o>zz 在插入模式下切换普通模式并重绘屏幕,之后重新返回插入模式
  • xp 调换光标之后的两个字符
  • ddp 调换当前行和它的下一行
  • yyp 创建当前行副本

跳转指令

  • m{char} 负责设置标记
  • \{char}` 负责跳转到标记

经典组合

  • ea 在单词结尾添加
  • f,dt. 删除后半句(逗号到句号之间内容)

寄存器说明

有名寄存器(普通寄存器)

  • "a~"z

特殊寄存器

  • ""无名寄存器,缺省使用,xsd{motion}y{motion} 都会覆盖其内容;
  • "0 复制专用寄存器,当使用y{motion}时,会覆盖其内容;
  • "_ 黑洞寄存器,有去无回。
  • "+/"* 系统剪贴板,有一定区别,但是不加以区分了
    • "+p 将系统剪贴板的内容粘贴
  • "= 表达式寄存器
  • "% 当前文件名(read only)
  • "# 轮换文件名(read only)
  • ". 上次插入的文本(read only)
  • ": 上次执行的Ex命令(read only)
  • "/ 上次查找的模式(可使用:let进行赋值)

技巧总结

  • 能够重复,就别用次数。 dw.要优于2dwd2w
  • 尽量不用光标键,使手指始终位于本位行上