在特定数量的分隔符后插入Vim
我希望通过以下方式使一些代码更易于阅读:在特定数量的分隔符后插入Vim,vim,Vim,我希望通过以下方式使一些代码更易于阅读: 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 .... 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, ... 并添加新行以创建8的增量: 0x44, 0x44, 0x44, 0x44, 0
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 ....
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, ...
并添加新行以创建8的增量:
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44 ....
有谁知道vim魔术可以让我用特别选择的线路来实现这一点吗?这不是最漂亮的解决方案,我相信它可以被清理/简化一些。首先选择文本,然后输入以下命令:
:'<,'>s/\(\S\+,\s*\)\{8}/&\r/g
作弊的一种方法是:
set textwidth=48
gq
qw
开始在寄存器w中录制宏(您可以使用任何寄存器)8f,a
按回车键,退出插入模式,然后再次按q
@w
可根据需要多次重播宏。我相信有一种聪明的方法可以自动重放宏多少次,但我不确定如何重放。您也可以按@
运行最近运行的宏正如@zanegray所发布的那样,正则表达式也可以工作。您可以使用一个多部分的命令来实现这一点,这可能更容易让您绞尽脑汁 制作一个宏,在第8个逗号后添加分号
qq8f,lr;qu
选择文本,然后执行该宏1000次(如果每行超过8000次,则执行次数更多)
这将在第8个逗号后添加一个分号,然后用换行符替换该分号。这不会赢得任何vim高尔夫比赛,但我喜欢用简单的步骤来思考类似的问题
:s/, /,\r/g
:'[,']g/./j 8
说明:
将逗号后的所有空格替换为返回(:s/,/,\r/g
)\r
是最近修改的文本的范围“[,”]
将在与g/{cmd}
匹配的所有行(任何非空行)上执行命令{cmd}
是j8
的缩写,意思是连接8行join8
']
。这可以通过一个更复杂的命令来克服,比如::'[,']g/,+6/,$/j8
,但这对我来说还不够简单。如果这个问题是一个真正的问题,我会将原始文本移动到一个新的缓冲区(通过:new
),或者至少移动到当前缓冲区的底部。完成转换后,将其移回原位
更多信息
:h range
:h :j
:h :s
:h :g
:h '[
因此,此解决方案基于Zanegray的解决方案和我的一些小调整:
:s/\(\w\+,\s\)\{8}/&\r/g
Zanegray的解决方案也可以像这样工作:
:s/\(\S\+\s\)/&\r/g
由于空格
\S
的否定将包括,
键宏的官方Vim名称是“录制”<代码>帮助q也可以使用行范围而不是视觉选择::,+5s…
。另外,不需要转义量词中的}
:\{8}
。我不能保证vim是我在工作,但在vi中,{8}必须转义括号。vi需要转义两个大括号吗?我没有真正的vi
可供测试。上面的模式,使用\{8}
在设置compatible
之后在vim中工作,但这不是证据。另外,:help/\{
断言{Vi没有这些},re:量词。这似乎不正确,但我已经有一段时间没有在meIn vim面前有一个真正的Vi了,结尾的}
不一定要逃过,但逃过它一点伤害也没有。我站出来纠正。vi不需要脱离闭合支架。很抱歉给你带来了困惑。
:s/\(\w\+,\s\)\{8}/&\r/g
:s/\(\S\+\s\)/&\r/g