# Vim使用记录

推荐直接看书《Vim实用技巧》。Vim里面的高级用法真的是太多了,根本学不完。 只能在慢慢的实践中记忆了。用好了确实能达到事半功倍的效果。然而人的记忆力是有限的。 我只能说,Vim很强大,是我不配。

# 文件编码相关

  • :set ff? 查看当前编码。
  • :set ff=unix:set fileformat=dos 在LF和CRLF之间切换。
  • :set fileencoding? 查看当前文件的编码。
  • :set fileencoding=utf-8 设置文件的编码。

# 复制粘贴

  • "+y"*y 使用系统剪切板(可能要依据情况),使用p时同理。 一般来说mac和windows只有一个剪切板,理论上+*是相同的。 而在一般的X11中,"+代表了CLIPBOARD,即Ctrl+C时使用的剪切板。 "*代表了Star is Select,即选择时复制所使用的剪切板。但我测下来也不绝对。 还是要根据自己的具体情况来使用。一般来说用+应该没问题。

# 重复性工作相关技巧

  • vim中的.命令是一个微型的宏,可以记录上一个esc到目前为止所做的工作流程。
  • 使用:normal命令可以在一系列连续行上执行一条普通模式命令,此命令在与.命令 或者宏使用时只需花费很少的努力就能完成大量重复性任务。

例如,用ggVG选中全文所有内容,然后:%normal i#给全文加上注释。

:%normal A;给全文的行尾加上分号。另一种方法是使用<Ctrl+v>进入块可视化模式。 然后用jj$跳到所有的行尾,然后使用A;插入分号。

  • 使用*命令可以快速搜索当前单词,跳转操作与用/搜索一样。

  • 实用><可以控制缩进,但是要进入可视化模式。比如vG

  • 通过寄存器录制命令也是一个好方法,比如临时录制一些操作,可以用在normal模式下,用q加上寄存器名,如qa然后录制你的命令,再次按下q结束录制。调用该命令时使用@加上寄存器名,如@a,也可以重复多次,如6@a

# 寄存器

Vim 提供了 10 类寄存器,可在 Vim 中通过 :help registers 查看帮助。

  1. 匿名寄存器 ""
  2. 编号寄存器 "0 到 "9
  3. 小删除寄存器 "-
  4. 26 个命名寄存器 "a 到 "z
  5. 3 个只读寄存器 ":"."%
  6. Buffer 交替文件寄存器 "#
  7. 表达式寄存器 "=
  8. 选区和拖放寄存器 "*"+"~
  9. 黑洞寄存器 "_
  10. 搜索模式寄存器 "/

编号寄存器从 "0 到 "9 共 10 个,其中 "0 保存着拷贝来的字符串,"1 到 "9 保存着删除掉的字符串。 删除操作符包括 scdx。 删除掉的字符串会被存到 "1 中,上次删除的则会被存到 "2 中。以此类推,Vim 会保存你最近的 9 次删除。

命名寄存器有 "a 到 "z 共 26 个,这些寄存器只有当我们指定时才会被使用。 其实我们在录制宏时,所有键盘操作会以字符串的形式存到寄存器中。 例如录制一个宏存到 "a 寄存器中,内容为更改当前行 cc,改为 foo 字符串:

qaccfoo

然后执行 :reg 来查看寄存器,可以发现 a 寄存器的值是 ccfoo

小技巧:当使用小写字母进行操作时会覆盖当前寄存器内容,当使用大写字母进行操作时,会追加当前寄存器内容。

# 快速移动技巧

  • vim中区分屏幕行和实际行,如果要在屏幕行上移动的话在命令前加个g就可以了。比如说gjgk
  • 使用^可以移动到行前第一个非空白字符。
  • 多使用f{char}命令。这应该是Vim中最快的移动方式之一。要跳多次只需要结合;一起使用就可以了。 如果不小心跳过头了可以用,再跳回来。F{char}则是反向查找。

# 一些冷知识

  • <Ctrl+[>的功能和<ESC>是相同的。都是切换到普通模式。
  • 在插入模式下,使用<Ctrl+w>可以删除前一个单词,使用<Ctrl+u>可以删除至行首。(然而对中文来说并没有那么好用)
  • 在插入模式下粘贴寄存器中的内容<Ctrl+r>{register},其中,{register}是寄存器的名字。
最后更新: 2022-01-11