vim

My note

基本上是对 vim 使用技巧 的总结。

模式

普通模式(normal)

普通模式一般是我们用的最多的模式,我们用到的点范式,操作符等等都是在普通模式中进行了。操作时,要有意识的记着 “执行,回退,重复”, 有助于我们提高效率,比如说在选择命令或范围时,我们选择具有可重复性的。这里回退可以按 u 撤销,<C-r> 撤销刚撤销的。

文本对象(可以在上面第三条命令中用到)

对于分隔符,i 选择的不包括分隔符,a 包括分隔符; 对于文本块(单词,句子和段落),i 表示仅仅该文本块,a 表示文本块加空格或空行

插入模式(insert)

插入模式的主要用途就是我们写东西嘛,

可视模式(visual)

可以让我们选中某一块区域进行某项操作。

命令行模式

Ex 命令可在任意位置上执行命令,且可以在多行上执行某一命令。

Ex 命令的一般的样子 范围 具体操作命令 [结果到那里去]

范围就是一般的范围,和 substitute 中一样,模板是这样{start}, {end}, 可以是具体数字指定行, 也可以是特殊含义的(. 0 G %),还可以使用高亮选择和用模式查找指定。

命令操作有很多,比如 delete yank put copy move join global substitute

最后一个看具体命令,比如delete yank 什么的,我们可以指定到某一行或寄存器

vim 允许我们在不退出 vim 的情况下运行 shell 命令

我们还可以使用 :read !{cmd}{cmd} 输出重定向到当前缓冲区,使用 :write !{cmd} 把缓冲区的内容作为 {cmd} 的标准输入。注意,当我们对 :!{cmd} 指定了范围时(:[range]!{cmd}),情况有所不同,将会把范围的内容作为标准输入传给{cmd}, 然后把其标准输出覆盖原来的范围内的内容。

移动

行内移动

行间移动

通过查找来移动

查找

模式

替换

:[range]s[ubstitute]/{pattern}/{string}/[flags]

我们可以指定一个范围,重新执行替换操作,使用 :[range]&& 就可以了, 注意 g&:%&& 的快捷方式。

在多个文件中执行查找与替换时,首先当然是把文件加入参数列表啦 (比如 :args **/*.txt), 我们可以设置 :set hidden 使得我们在不保存当前文件的情况下跳至下一文件,还可以使用 e 标志位屏蔽错误消息。

定义

q{register}{your defination}q 按 q 开始,指定一个寄存器,开始录制一个宏, 再一次按 q 结束

运行宏

运改宏

首先说说如何查看自己定义的宏,:reg {register} 就可以啦

如果想要对现有宏进行修改,使用 qA 即可在末尾追加命令。

或者直接拷贝到当前文档再慢慢修改嘛,那么使用 :put {register} 会把指定宏的内容粘贴到当前行的下方, 修改好了之后呢,再扔回去嘛,比如说 "{register}y$"