Vim Ex 命令博大精深,需要好好的体会一下,在遇到问题的时候想一想是否会有更加简单的方法来进行操作。
技巧28 在一行或者多个连续的行上执行命令
---------------------------------------------------------------------------------------------------------
很多Ex命令可以用[range]指定操作的范围: 我们可以用
行号,
位置标记,或是
查找模式 来指定范围的开始位置和结束位置。
Ex 命令的优点之一就是可以在某一个范围内的所有行上执行。
首先可以用行号作为地址:
:1 光标跳转到第一行
:print 回显光标所在的行
:$ 跳转到最后一行
:% 标识文本中的所有的行
:. 当前行
:3p 把光标移动到第三行,并且显示第三行
:3d 把光标移动到第三行,并且删除第三行
然后可以用地址指定一个范围:
:2,5p 显示第2到5行
一个范围的形式为::{start},{end}
:%p 等价于 :1,$p
用高亮区域指定范围:
:'<,'>p (在普通模式下输入 :'<,'>p 会始终回显上一次高亮区域所选中的内容)
用模式指定范围:
:/<html>/,/<\/html>/p
用偏移对地址进行修正:
:/<html>/+1,/<\/html>/-1p
偏移的一般形式为 :{address}+n
当n省略的时候默认为1,
:.,.+2p 显示从当前行开始的3行。
第0行在文件中并不真实的存在,但是它作为一个地址,在某些特定的场景下会很有用处。
特别是:把指定范围内的行复制或者移动到文件开头的时候,可以用它作为 :move{address}
或者 :copy{address} 命令的最后一个参数
技巧29 使用 :t 和 :m 命令复制和移动行
-----------------------------------------------------------------------------------------------------------------------------------
:6copy. 复制第六行,并且放到当前行下方(. 表示当前行)。
copy 命令的一般格式为:
:[range]copy{address}
:copy命令可以简写为两个字母:co ,也可以使用更加简练的 :t 命令。
为了更好的记忆,可以把该命令想想成为: