您的位置:首页 > 其它

vim 基础学习之global

2015-12-20 17:29 330 查看
global命令可以在指定模式下,匹配行上进行Ex命令 使用格式:

:[range]g[lobal]/{pattern}/[cmd]

range-是执行范围(如果缺省,是%)

global-命令关键字

pattern-匹配内容

cmd-Ex命令操作(缺省是print)


这个命令还有两个反向命令

global!

vglobal(v)


他们的意思是,在没有匹配pattern的行上,执行cmd操作

global这个命令使用的时候,包括两步,

第一步是获得已经拥有标记的pattern匹配内容,如果这个值是缺省值,那么会使用当前拥有标记的行

产生标记的行方式有搜索结果、×选中等

第二步才是执行cmd命令

下面我们进入简单演示 看下面这段内容

my name is xiaoming

my name is xianghua

my year is 34

my class is 123


现在我们使用global删除所有包含name的行

方法1.:global/name/d

方法2.

1)执行pattern标记行-/name

2)执行global命令-global//d


现在我们把这篇文章中的所有包含name字符串的行,放到寄存器a中

:global/name/y a


原以为上面的操作可以完成我们的需求,不过,你使用

reg a


会发现,输出的结果是

:global/name/y a。


原来,使用global执行cmd是一条条执行的,当我们使用 小写的a调用寄存器的时候,是覆盖寄存器的内容,这时候我们使用A(追加)就可以了。

如下

:global/name/y A


如果我们想对下面的几行进行排序,我们怎么做?

aeeufs

rofwjejf

roqfjljfa

wpirgusjf

qw[pegj


vim中排序命令是sort 所以,我们可以使用如下的方法

方法一:命令行选中上面的五行内容,然后用命令行:sort就行了

方法二:直接命令行:32,36 sort就行了

上面只对一处排序,很简单。假如现在有如下内容

a<

rofwjejf

aeeufs

roqfjljfa
qw[pegj

wpirgusjf

/>

a<

aeeufs
roqfjljfa

rofwjejf

wpirgusjf

/>


a<

rofwjejf

aeeufs

roqfjljfa
qw[pegj

wpirgusjf

/>

a<

aeeufs
roqfjljfa

rofwjejf

wpirgusjf

/>


我们可以使用如下命令

:g/</+1,/\/>/-1 sort


它的意思就是,从 /</+1开始到/\/>/-1为止的匹配项中执行sort操作
它其实是

:[range]g[lobal]/{pattern}/[cmd]的扩展形式

:g/{star}/,/{end}/ cmd


这个感觉跟前种形式都是一致的,都是给cmd明确一个执行的范围。
:g 定位范围 命令
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: