Featured image of post vim命令笔记

vim命令笔记

记录学习《Vim实用技巧》时的笔记

基础命令

  • <C-a> 代表Ctrl + a,其他同理

  • A 在光标所在行末尾添加内容

  • a 在光标之后添加内容

  • aw是指一个文本如一个词

  • ^ 快速移动到行首

  • $快速移动到行尾

  • db删除从光标其实位置到单词开头的内容

  • <C-a><C-x>分别对数字执行加和减操作,如光标在字符5上面执行10<C-a>就会把它变成15, 如果5的前方或者当前位置处运行10<C-a>就会把它变成6

  • 在Vim中如果遇到0开头的数字比如007就会被认为是八进制的数字,如果想要修改这个可以在vimrc中添加

    set nrformats=
    
  • <C-o> 进入插入-普通模式, 可以执行一遍普通模式后进入插入模式

  • zz重绘屏幕,便且吧当前行显示在窗口正中

  • <Esc>, <C-[>切换到普通模式

  • 在插入模式下<C-h>为删除前一个字符(同退格键)

  • 在插入模式下<C-w>为删除前一个单词

  • 在插入模式下<C-u>为删除到行首

  • c修改

  • d删除

  • y复制到寄存器

  • g~反转大小写

  • gu反转为小写

  • gU反转为大写

  • >增加缩进

  • <减小缩进

  • = 自动缩进

  • !使用外部程序过滤{motion}所跨越的行

  • Vim的语法大部分当一个操作符连续调用两次时,它会作用于当前行

  • dap删除一个段落

  • daB删除一个{}块

  • :%s/content/copy/g 替换所有 5

第一章: Vim解决问题的方式

技巧1: 结识 . 命令

  1. x 命令会删除光标下的字符
  2. >G 会增加缩进等级

技巧2: 不要自我重复

  1. C 删除从光标所在处往后的行并且进入插入模式 = c$.
  2. s 删除光标后面的字符并且进入插入模式 = cl.
  3. S 删除光标所在行并且在删除行进入插入模式.
  4. I 跳转到行首然后进行插入.
  5. A 跳转到行尾然后进行插入.

技巧3: 以退为进

技巧4: 执行, 重复, 回退

  1. ; 重复查找上次f命令所查找的字符.

  2. @ 用来重复任意的Ex命令.%%%%%%%%%%%%

    目的操作重复回退
    做出一个修改{edit}.u
    在行内查找下一指定字符f{char}/t{char};,
    在行内查找上一指定字符F{char}/T{char};,
    在文档中查找下一处匹配项/pattern<CR>nN
    在文档中查找上一处匹配项?pattern<CR>nN
    执行替换:s/target/replacement&u
    执行一系列修改%%%%%%%qx{change}q@xu

技巧5: 查找并手动替换

  1. * 查找当前光标下的单词.
  2. w 当前光标位置到单词末尾.
  3. cw 删除从光标位置到单词结尾的字符并且进入插入模式.

技巧6: 结识 . 范式

第一部分 模式

第二章: 普通模式

技巧7: 停顿时请移开画笔

技巧8: 把撤销单元切成块

技巧9: 构造可重复的修改

  1. b 跳转到单词的开头.
  2. db 删除从光标起始位置到单词开头的内容.
  3. dw 删除从光标起始位置到单词结尾的内容.
  4. aw 文本对象(text object).
  5. daw 删除所在光标位置的单词.

技巧10: 用次数做简单的算术运算

  1. <C-a> 对光标所在位置的数字进行加.
  2. <C-x> 对光标所在位置的数字进行减.
  3. 注意如果前面是以0开头的, 会被认为成八进制.

技巧11: 能够重复, 就别用次数

技巧12: 双剑合璧, 天下无敌

  1. g 在这里可以当中前缀字符,足以该表其后面的按键行为.
  2. g~ 反转大小写.
  3. gu 转换为小写.
  4. gU 转换为大写.
  5. y 复制到寄存器.
  6. Vim中一条额外规则, 当一个操作符命令被连续调用两次时, 它可以作用于当前行,dd删除当前行,>>缩进当前行,而gU是一种特殊情况, 我们既可以用gUgU,也可gUU.
  7. > 增加缩进.
  8. < 减少缩进.
  9. = 自动缩进.%%%%%%%%%%%%%
  10. ! 使用外部程序过滤{motion}所跨越的行.
  11. 自定义操作符.

第三章: 插入模式

技巧13: 在插入模式中即可即时更正错误

以下是在插入模式下, 且不是Vim首创,在bash shell也可以使用它们.

  1. <C-h> 删除前一个字符.
  2. <C-w> 删除前一个单词.%%%%%%%%%%%有问题不能复现
  3. <C-u> 删除到行首.

技巧14: 返回普通模式

  1. <Esc>, <C-[> 从插入模式切换回普通模式
  2. <C-o> 从插入模式切换到插入普通模式, 是普通模式的一个特例, 它能执行一个普通模式命令, 执行完后就返回到插入模式.

技巧15: 不离开插入模式, 粘贴寄存器中的文本

  1. yt 是复制到专用寄存器中.%%%%%%%%%%%
  2. <C-r>0 把复制到的文本粘贴到光标所在位置. 它的一般格式是<C-r>{register},其中{register}是我们想要插入的寄存器的名字.%%%%%%%%

技巧16: 随时随地做运算

  1. ???????????

技巧17: 用字符编码插入非常用字符

  1. <C-v>{code} 用字符编码插入非常用字符,如<C-v>u00bf输入¿,u的意思是用十六进制.
  2. ga 限速当前光标下的编码,分别以十进制和十六进制的形式限速.

技巧18: 用二合字母插入非常用字符

  1. <C-k>{char1}{char2} 用二合字母插入非常用字符,如<C-k>?I输入¿,详细用法:h digraphs-default,查看可以用的二合字母列表:digraphs或者是:h digraphs-table.

技巧19: 用替换模式替换已有文本

  1. <Insert> 按键,可以在插入和替换模式下进行切换, 同R.
  2. R 命令进入的是替换模式, 这个模式下某些字符回变得复杂化, 如制表符,它在文件中以单个字符表示, 但是在屏幕中却会占用若干列的宽度, 此宽度由tabstop设置. 如果把光标移动倒制表符上,然后进入替换模式, 那么我们所输入的下一个字符将会替换制表符, 假设tabstop设为8(缺省值), 那么该操作就是把8个字符替换成了一个字符. 而Vim还有另一种虚拟替换模式,由gR触发, 它会把制表符当成一组空格进行处理. 假设把光标移动倒制表符上,然后进入虚拟替换模式, 在输入前7个字符时, 每个字符都会被插入到制表符之前, 最后, 当输入了第8个字符时, 该字符将会替换制表符.

第四章

技巧20: 深入理解可视模式

技巧21: 选择高亮选区

  1. 激活可视模式
命令用途
v激活面向字符的可视模式
V激活面向行的可视模式
激活面向列块的可视模式
gv重选上次的高亮选区
  1. 在可视模式之间进行切换
按键操作用途
| <C-[>回到可视模式
v | V |切换到普通模式, 分别对应面向字符可视模式, 面向行的可视模式, 面向列块的可视模式
v切换到面向字符的可视模式
V切换到面向行的可视模式
切换到面向列块的可视模式
o重选高亮选区的活动端
  1. e 向后到单词的末尾.

技巧22: 重复执行面向行的可视命令

技巧23: 只要可能, 最好用操作符命令

  1. it 是一种文本对象(text object).
  2. vit 选择标签内的内容. 如<a href="#">one</a>,使用vit就会高亮one.

技巧24: 用面向列块的可视模式编辑表格数据

技巧25: 修改列文本

  1. 在插入时只影响顶行, 但是按下Esc后将会正常插入所选的区域 ????自己的总结

技巧26: 在长短不一的高亮块后添加文本

第五章 命令行模式

技巧27: 结识命令行模式

  1. 读写文件 :edit.

  2. 创建及销毁新标签页 :tabnew,:tabclose.

  3. 分割窗口 :split :sp.

    1. `<C-w> k|j|h|l` 移动光标到上下左右.
    2. `<C-w> K|J|H|L` 移动窗口到上下左右.
    
  4. 操作参数列表 :prev/:next及缓冲区列表:bprev/:bnext.

  5. 更多Ex命令 :h ex-cmd-index.

  6. 操作缓冲区文本的Ex命令

    命令用途
    :[range]delete [x]删除指定范围内的行(到寄存器x中)
    :[range]y[ank] [x]复制指定范围内的行(到寄存器x中)
    :[range]put [x]在指定行后粘贴寄存器x中的内容
    :[range]co[py] {address}把指定范围内的行拷贝到{address}所指定的行之下
    :[range]m[ove] {address}把指定范围内的行拷贝到{address}所指定的行之下
    :[range]j[oin]把指定范围的行连接到一起变成一行:
    :[range]norm[al] {commands}对指定范围内的每一行执行普通模式命令{commands}
    :[range]s[ubstitute]/{pattern}/{string}/[flags]对指定范围内出现{pattern}的地方替换成{string}
    :[range]g[lobal]/{pattern}/[cmd]对指定范围内匹配{pattern}的所有行,在其上执行Ex命令{cmd}

#### 技巧28:

Licensed under CC BY-NC-SA 4.0