# 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
查看帮助。
- 匿名寄存器
""
- 编号寄存器
"0
到"9
- 小删除寄存器
"-
- 26 个命名寄存器
"a
到"z
- 3 个只读寄存器
":
,".
,"%
- Buffer 交替文件寄存器
"#
- 表达式寄存器
"=
- 选区和拖放寄存器
"*
,"+
,"~
- 黑洞寄存器
"_
- 搜索模式寄存器
"/
编号寄存器从 "0
到 "9
共 10 个,其中 "0
保存着拷贝来的字符串,"1
到 "9
保存着删除掉的字符串。 删除操作符包括 s
, c
, d
, x
。 删除掉的字符串会被存到 "1
中,上次删除的则会被存到 "2
中。以此类推,Vim 会保存你最近的 9 次删除。
命名寄存器有 "a
到 "z
共 26 个,这些寄存器只有当我们指定时才会被使用。 其实我们在录制宏时,所有键盘操作会以字符串的形式存到寄存器中。 例如录制一个宏存到 "a
寄存器中,内容为更改当前行 cc
,改为 foo
字符串:
qaccfoo
然后执行 :reg
来查看寄存器,可以发现 a
寄存器的值是 ccfoo
。
小技巧:当使用小写字母进行操作时会覆盖当前寄存器内容,当使用大写字母进行操作时,会追加当前寄存器内容。
# 快速移动技巧
- vim中区分屏幕行和实际行,如果要在屏幕行上移动的话在命令前加个
g
就可以了。比如说gj
,gk
。 - 使用
^
可以移动到行前第一个非空白字符。 - 多使用
f{char}
命令。这应该是Vim中最快的移动方式之一。要跳多次只需要结合;
一起使用就可以了。 如果不小心跳过头了可以用,
再跳回来。F{char}
则是反向查找。
# 一些冷知识
<Ctrl+[>
的功能和<ESC>
是相同的。都是切换到普通模式。- 在插入模式下,使用
<Ctrl+w>
可以删除前一个单词,使用<Ctrl+u>
可以删除至行首。(然而对中文来说并没有那么好用) - 在插入模式下粘贴寄存器中的内容
<Ctrl+r>{register}
,其中,{register}是寄存器的名字。