*10.1* Record and playback commands
"." command 重复执行上一个操作
- The "q{register}" command starts recording keystrokes into the register
named {register}. 录制击键宏. The register name must be between a and z.
-
Type your commands.
-
To finish recording, press q (without any extra character). 退出录制
用 @{register} 执行宏marcro
多次执行 3@a
USING REGISTERS
The registers used for recording are the same ones you used for yank and
delete commands.
用于录制宏的寄存器 register 和复制粘贴的寄存器是同样的,互通的。
故,可以将宏粘贴出来,编辑后,再复制到寄存器。得到改进过的系列操作,再执行。
APPENDING TO A REGISTER
用小写字母表示的register
用大戏而字母可以追加append
暂时没看懂
*10.2* Substitution 替换 *find-replace*
如果文本中包含/ slash,需要在前面加backslash,最好用其他字符替代
USING A PATTERN IN A RANGE
从查找pattern到的行,得到查找区域,再查找指定的patter1
:?^Chapter?,/^Chapter/s=grey=gray=g
? 往回查找 ?^Chapter?,某一行开头为Chapter
/往前查找 /^Chapter/,往前查找某一行开头为Chapter
在两次Chapter之间,查找grey,并替换为gray,全局
ADD AND SUBTRACT
上述可能有点小问题,如果范围终止到第n-1行。
USING MARKS
可以用marks 书签,指定搜索范围
:'t,'b
VISUAL MODE AND RANGES
可视模式下visual mode下,按下: 冒号,屏幕左下方自动填入
:'<,'>
实际上 '< 和 '> 是marks ,实测是最近一次使用 v 模式选择的起始位置和终止位置
也可以混合在一起,例如: '>,$
A NUMBER OF LINES
修改当前的5行
5: 将会自动返显 : .,.+4
*10.4* The global command 全局命令
The ":global" command ,可以找到每一个{pattern},然后执行命令{command}
注意必须以冒号开头
:[range]global/{pattern}/{command}
:global 缩写为 :s
:substitute 缩写为 :s
例如:
:g+//+s/foobar/barfoo/g 替换C++文件包含注释符号的行,中的foobar改为 barfoo
*10.5* Visual block mode 可视模式
INSERTING TEXT 插入文字
在选中多行的某一列插入字符:
前面插入的I操作
CTRL-V 进入可视模式,j移动选中若干行,用<n>j上下移动;大写I<插入内容><Esc>,然后选中的所有行则插入内容。
如果选中的中间,某行不够长(短行),则该行不插入,其他行执行插入。
后面插入的A操作
类似上面。
但是在短行,后部也继续插入。
CHANGING TEXT 修改文字
c小写,类似上面的按列插入操作
C大写,类似上面的按列插入操作直到行末尾, 不够长的行可能不改动。
FILLING WITH A CHARACTER 以某字符填充一个区域
r改写一个,R原地不动直接覆盖改写
CTRL-V进入可视模式按块选择, j下移,l右移,选择按rx,则选中区域都填写为x,如果行短则短行不填写。
SHIFTING 左右移动
部分右移:CTRL-V进入可视模式按块选择......使用 ">" 把选中部分以右边的右移
部分左移:同上,使用 <
*10.6* Reading and writing part of a file
读取文件,放到当前文件的局部
:[range]read <文件名> 读取文件并放到[range]的最后一行后面。缩写为r
支持,0 $
WRITING A RANGE OF LINES
:[range]write <文件名>
注意:如果使用感叹号!强制写,感叹号必须紧跟write或者w,否则可能有歧义。
APPENDING TO A FILE
w后面跟>>
*10.7* Formatting text
:set textwidth=72 文本宽度
直接按命令 gqap 格式化当前段落 ------gq为操作, ap 表示当前段落
全文格式化 gggqG ------ gg跳转到首行,gq为操作, G跳转到末行
所谓格式化即划分换行
如果当前文件格式化不清楚:到第一行,gqj ------ 当前行和下一行格式化可能合并。然后按 . 重复执行
*10.8* Changing case
转大写 gUw , 整行转大写 gUgU , 缩写为gUU
转小写 guw , 整行整行转小写gugu,缩写为guu
转换大小写 g~, 转换整行 g~g~ 或者缩写为 g~~
*10.9* Using an external program 使用外部程序
:"!{motion}{program}"
! 告诉vim 执行 filter operation
!5G 敲回车 ------ 去第5行
!5Gsort 敲回车 ------ 从当前行到第5行 执行sort,这个时候左下角会自动转换为 : 命令展示
!! 通过filter传递命令 第一个!是filter,第二个是执行外部命令
The "!!" command filters the current line through a filter. In Unix the "date"
command prints the current time and date. "!!date<Enter>" replaces the current
line with the output of "date". This is useful to add a timestamp to a file.
例如上述在文件中加入日期的命令
似乎在可视模式下,选中状态时 用 !调用命令比较方便,不需要退到 : 命令模式
READING COMMAND OUTPUT 读取命令的结果
:read !<外部命令>
WRITING TEXT TO A COMMAND 将文本写入命令
:write !<外部命令> 注意感叹号前面有空格后面没有
WRITING TEXT TO A COMMAND
CTRL-L