9.1 命令的记录与回放
1. 操作步骤
a. q{register}命令: 将后续的动作记录到名为{register}的寄存器中,其中给出的寄存器名字>必须是a到z之间的一个字母.
b. 执行你要执行的操作,按下q以结束对命令的记录.
c. @{register}命令:执行刚刚记录下来的宏.
2. 举个例子
#include "stdio.h"
#include "fcntl.h"
#include "unist.h"
#include "stdli.h"
详细的操作步骤:
qa :开始将后续的命令记入到寄存器a中.
^ :将光标移到行首.
i#include "<Esc> :在该行之前插入#include.
$ :将光标移动到行尾.
a.h"<Esc> :在行尾加上.h"字符.
j :移动到下一行.
q :停止记录.
@a :执行记录的宏,可以加计数命令,3@a.
@@ :重复上一次宏的命令.
3. 编辑宏的内容
a. "ap命令 :显示宏的内容
b. "ad$命令 :将编辑好的宏的内容再一次的放入寄存器中.
c. qA命令 :向寄存器a中追加内容.
9.2 替换
1. 通用形式
:[range]subtitute/from/to/[flags] :对一个指定的范围执行替换操作,range指范围,from被替
换的内容,与搜索命令所用的正则表达式类似,to替换为的内容,flags指一些常用的标记.
如:s/the /these /g
the these the these the these the these
如:s/one\/two/one or two/g
s=one/two=one or two=g 功能一样.
one/two one/two one/two one/two one/two one/two
2. 常用选项
range :作用范围,range=% 范围为所有行,而缺省只作用于当前行.
flags :标记,flags=g (global) 将改变一行所有符合目标字符串的全部字符进行替换.
flags=c (confirm):在执行每个替换前请求用户确认
y 好吧,yes 直接进行替换
n 不,no 先留下
a 全部,all
q 退出,quit
l 把现在这个修改结束后进行退出,last
CTRL-E 向上滚屏一行
CTRL-Y 向下滚屏一行
9.3 命令的作用范围 range的范围
:45,49s/this/that/g :对第45行到第49行的文本执行替换操作.
:33s/this/that/g :对指定行进行替换操作.
:.,$s/this/that/g :当前行到最后一行范围,如%=1,$.
:?^Chapter?,/^Chapter/s=this=that=g :使用搜索模式来指定作用范围.
:?^Chapter?+1,/^Chapter/-1s=this=that=g :增与减行的范围操作.
:.+3,$-5s/this/that/g :将当前行的下三行到倒数第六行的作用操作.
:'t,'bs/this/that/g :使用标记确定操作范围.
:'<,'>s/this/that/g :Visual模式确定的范围.
:'>,$s/this/that/g :从上一次Visual模式时选定的文本区域的结束处到文本尾的这样区域
:.,.+4s/this/that/g :.代表当前行到.+4从当前行到向下的4行,一共5行.
9.4 全局命令
:[range]global/{pattern}/{command} :找到符合某个匹配模式的行,然后将命令作用于这些行上,全局命令的默认作用范围是整个文件.
:g=//=s/foobar/barfoo/g :整个文件中包含//的行,进行替换操作.
:g=//=d :整个文件中包含//的行,进行删除操作.
9.5 Visual Block模式
1. 插入文本
Istring<Esc> :在文本块的每行的行首,进行插入文本.
Astring<Esc> :在文本块的每行的行尾,进行插入文本.
2. 改变文本
cstring<Esc> :修改文本块的文本,仅会修改文本块的内容.
Cstring<Esc> :修改文本块的文本,会修改文本块尾部的内容.
3. 改变文本在大小写
~ :交换大小写 (aBc->AbC)
U :将小写变大写 (abc->ABC)
u :将大写变小写 (ABC->abc)
4. 填充命令
rx命令: 以字符x进行文本块的填充操作.
5. 左右移动
<命令 :会使你的文本向左移动一个shift单位.
>命令 :会使你的文本向右移动一个shift单位.
:set shiftwidth=4
6. 将多行内容粘接起来
J命令 :使文本块纵跨的所有文本被连接为一行.
gJ命令 :如果你想保留那些前导空白和后缀的空白时,可以使用.
9.6 读写文件
1. 读取文件
:read filename :读入文件的内容放在当前行.
:$read filename :追加到文件的最后.
:0read filename :把文件放在第一行的上面.
:80read filename :把文件放在指定行的上面.
2. 写入文件
:write filename :没有指定一个范围时该命令将写入整个文件的内容.
:.,$write filename :当前行到文件尾的内容写入文件,如果文件存在则失败.
:.,$write! filename :强制当前行到文件尾的内容写入文件,会进入覆盖操作.
:.write filename :将当前行写入文件中.
:.write >> filename :将当前行的内容追加到文件中.
9.7 格式化文本
:set textwidth=72 :键入文字的时候每行的内容能自动调节到适应当前设置的宽度,每一行都>会自动调整到只包含最多72个字符,Vim进行格式化时不会打断你的单词.
:gqap :gq为Vim的一个格式化操作符,ap是一个本文对象,a paragraph.
:gg gqG :格式化整个文件的内容.
:gqgq :格式化当前行,可以与.重复命令一起使用.
:gqj :格式化当前行和它下面的一行.
9.8 改变大小写
guw命令 :gu是变小写的操作符,w是位移.
gUw命令 :gU是变大写的操作符,w是位移.
g~w命令 :将字母的大小写进行反转,大写变小写,小写变大写.
gugu命令 :使一整行变为小写,简写为guu,同理gUgU gUU g~g~ g~~.
9.9 使用外部程序
sort < input.txt > output.txt
!5Gsort :!过滤操作符,5G为移动命令,决定了将哪个区域送到过滤程序中.
!!date :!!命令过滤当前行,date命令显示当前时间.
:read !ls :读取当前目录下的内容.
:write !wc :将文本写入一个命令wc中,wc命令是统计行数,单词数,字符数.