行:
int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
外观选择:
{ 00 01 02 03 04 05 05 /*... lots more like this*/}
命令:
:'<,'>s/\ /\,0x/g
预期:
int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};
但是,执行这些操作后,实际结果是:
int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};
是否可以修改上面的命令以产生预期的结果?
'<
和'>
不能定义搜索(和替换)命令的作用范围吗?#1 楼
:'<,'>s/\%V\ /\,0x/g
%V
在可视区域内匹配。请参阅:help %V
。评论
应该提到的是,该解决方案仅验证比赛的开始在视觉选择之内。
–克里斯蒂安·布拉班特(Christian Brabandt)
19年2月22日在12:28
#2 楼
有相应的\%V
,请参见:h %V
:\%V
在可视区域内进行匹配。当视觉模式已经停止时,在gv将重新选择的区域中停止匹配。这是
/零宽度匹配。为确保整个模式都在
可视区域内,请将其放在模式的开头和结尾,例如:>
/\%Vfoo.*bar\%V
仅在选择项中用
foo
替换bar
,请使用::'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg
在这种特殊情况下:
:'<,'>s/\%V\ \%V/\,0x/g
#3 楼
如果要在可视块内替换,可以使用vis.vim
插件。http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block
要安装:
从http://www.drchip.org/astronaut/vim/index.html#VIS
# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz
# Source the open file.
:so %
# Quit Vim
:q
下载vis.vba.gz安装后:
ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/
当您键入
:B
时,您会看到此:'<,'>B
只是vim说该命令将应用于当前选定的可视块。
更好的是,您可以在可视块上执行任何Ex命令,而不仅仅是替换。例如
:B !sort
。#4 楼
在@dessert之后,我发现描述和示例有些混乱,直到我认识到%V
包装模式。 :'<,'>s/pattern/newtext/
成为,
:'<,'> s/ \%V foo \%V / bar /
删除空格,
:'<,'>s/\%Vfoo\%V/bar/gc
(因为我总是后悔不使用g-lobal,c-onfirmation)
评论
我不知道答案,但是我知道::逐行替换运算符,这解释了您在示例中看到的内容。