《Vim实用技巧》命令简单记录

时间:2021-07-18 17:13:38

本文将《Vim实用技巧》中提到的部分命令记录下来(也有一些自己的补充),以备后用


  • 技巧1
    • . :重复上次的修改。在插入模式则是指从插入命令开始到Esc退出为止
  • 技巧3、4
    • f{char}:查找光标右边的指定字符
    • :重复上次的查找
    • ,:回退上次的查找
    • F{char}:查找光标左边的指定字符
  • 技巧5
    • cw:删除光标开始到下一个单词前的位置,并进入插入模式
    • *:查找光标所在单词下一次出现的位置,并使所有匹配项高亮
    • #:查找光标所在单词上一次出现的位置,并使所有匹配项高亮
  • 技巧9
    • aw:文本对象,代表一个单词
    • ap:文本对象,代表一段文字
    • daw:删除光标所在单词
  • 技巧10
    • num<C-a>:找到光标右边第一个数字,并加上num(Windows下可能会存在快捷键冲突,导致其他结果)
    • num<C-x>:找到光标右边第一个数字,并减去num
  • 技巧12
    • dl:删除光标所在字符
    • g~{motion}:反转大小写
    • gu{motion}:转换成小写
    • gU{motion}:转换成大写
    • ={motion}:自动缩进
    • c{motion}:修改(删除并进入插入模式)
    • gc{motion}:注释(需安装commentary.vim插件)
    • ae:文件对象,代表全文(需安装textobj-entire插件)
  • 技巧13(插入模式下使用)
    • <C-h>:删除前一个字符(等同退格键)
    • <C-w>:删除前一个单词
    • <C-u>:删除至行首
  • 技巧14(模式切换)
    • <Esc>:切换到普通模式
    • <C-[>:切换到普通模式
    • <C-o>:切换到插入-普通模式(在插入模式按下,切换到普通模式,执行一条命令后回到插入模式)
    • zz:让光标所在行居中(小写z)
    • ZZ:保存并退出vim(大写Z)
  • 技巧15、16(在插入模式下使用)
    • <C-r>{register}:插入指定寄存器(面向字符的寄存器)中的内容,例如<C-r>0
    • <C-r><C-p>{register}:按原义插入寄存器内的文本,并修正不必要的缩进
    • <C-r>=表达式<CR>:使用表达式寄存器计算表达式,并将结果插入文本中
  • 技巧17、18(在插入模式下使用)
    • <C-v>{123}:插入以十进制编码(3位数)的字符
    • <C-v>u{1234}:插入以十六进制编码(4位数)的字符
    • <C-v>{nondigit}:以原义插入非数字字符(u除外)
    • <C-k>{char1}{char2}:插入以二合字母{char1}{char2}表示的字符
  • 技巧19
    • R :由普通模式进入替换模式(用其他字符替换tab字符时,tab字符的长度会被一个字符长度代替,导致该行字符长度变短,其他类似tab的字符同理)
    • gR :由普通模式进入虚拟替换模式(替换时遇到tab字符,保持该行原有长度,其他类似tab的字符同理)
    • r{char} :由普通模式进入替换模式,替换一个字符后回到普通模式
    • gr{char}:由普通模式进入虚拟替换模式,替换一个字符后回到普通模式
  • 技巧20
    • <C-g> :在可视模式和选择模式之间切换。如果处于选择模式,输入的字符会替换所选内容并切换到插入模式
  • 技巧21(普通模式或可视模式下)
    • v :激活面向字符的可视模式
    • V :激活面向行的可视模式
    • <C-v> :激活面向列块的可视模式
    • gv :重选上次的高亮选区
    • o :切换高亮选区的活动端(只在可视模式下)
  • 技巧28
    • 命令行模式下的位置标记
      • 1 :文件的第一行
      • $ :文件的最后一行
      • 0 :虚拟行,位于第一行上方
      • . :光标所在行
      • '< :高亮选区的起始行
      • >' :高亮选区的结束行
      • % :整个文件
      • /str/:匹配字符串str的行
    • :{start},{end} :指定范围
    • :/<html>/+1,/<\/html>/-1p :调整指定的范围大小(其中p(print)代表打印操作)
  • 技巧29
    • :[range]copy{address} :把range范围的内容复制到address指定的行的下方,copy可简写成cot(copy to的含义)
    • :[range]move{address} :把range范围的内容移动到address指定的行的下方,move可简写成m
  • 技巧30
    • :%normal 普通模式下的命令序列:在指定范围内执行普通模式命令序列。例如::%normal A; 在所有行后面插入分号,:'<,>'normal .对高亮选区的所有行,执行普通模式下的.命令
  • 技巧31
    • @: :重复上次的Ex命令(Ex命令是指在命令行模式下执行的命令)
  • 技巧32、33(命令行模式下)
    • <Tab> :补全Ex命令,如果有多个候选项,可以连续按<Tab>进行遍历或<S-Tab>反向遍历,再或者<C-d>查看候选补全列表
    • <C-r><C-w> :把光标下的单词插入命令行
  • 技巧34
    • q/ :打开查找命令历史的命令行窗口
    • q: :打开Ex命令历史的命令行窗口
    • <C-f> :从命令行模式切换到命令行窗口
  • 技巧35(命令行模式下)
    • :!{cmd} :在shell中运行cmd命令
    • :shell :切换到一个交互的shell中,在shell中输入exit命令可以返回vim
    • :read !{cmd} :在shell中执行cmd命令,并把其标准输出的内容插入到光标的下方
    • :[range]write !{cmd} :在shell中执行cmd命令,将缓冲区中指定范围的内容作为其标准输入。(如果没有给出范围,则就是指所有行)
    • :[range]!{filter} :使用shell命令filter,过滤指定的范围的内容,即将指定范围的内容作为filter命令的输入,并用输出替换原来的内容。
    • !{motion} :会将指定范围预置在命令行中,后面还紧跟一个!(普通模式下执行)
  • 技巧36(命令行模式下)
    • :source vim脚本:执行vim脚本,该脚本是一系列的Ex命令构成,每条命令一行,不需要前缀:,脚本文件的扩展名为.vim。
    • :args:列出vim参数列表的内容
    • :argdo {Ex命令}:对参数列表的每个文件执行该Ex命令