题目链接

quotes inside quotes

题目说明

把单引号替换成双引号。

开始文件

This string contains a 'quoted' word.
This string contains 'two' quoted 'words.'
This 'string doesn't make things easy.'

结束文件

This string contains a "quoted" word.
This string contains "two" quoted "words."
This "string doesn't make things easy."

最佳分数

14

我的分数

16

:%s/'/"/g<CR>4wr'ZZ

第一次尝试

先用笨方法,全部替换,然后再修正。

:%s/'/"/g<CR>f";r'ZZ

17 分,差 3 分。

第二次尝试

匹配时排除试试。

:%s/[^n]\zs'/"/g<CR>ZZ

19 分,更差了。

第三次尝试

稍微优化下,用 4w 替换 f";

:%s/'/"/g<CR>4wr'ZZ

16 分。还差 2 分,看起来优化不了了,应该用了别的方法。

第四次尝试

用宏的话应该也快不了,没想到啥思路,直接看吧。

@mnxx

qq/'<CR>r"q6@q}.ZZ

15 分。没想到确实用了宏,只是这用法有些出乎意料,看来我低估宏的快捷程度了。qq/'<CR>r"q 这个宏就是找到一个单引号,把它替换成双引号。重点在于他只替换了 6 次,然后手动修改最后一个单引号,这样就节省了大量操作。

@fzeisler

?'<CR>qqr"nqn7@qZZ

也是 15 分。这是很不同的思路,先定位到最后一个单引号,然后开始录制宏,跳过倒数第二个单引号,再使用宏。

第四次尝试

但感觉这两个操作都不能再优化了,继续看吧。

@udioica

qq?'<CR>r"qn7@qZZ

又猜错了,上边的第二个操作可以优化,在录制宏时就可以跳到文件末尾,然后跳过倒数第二个单引号,再使用宏。我对宏太生疏了,对这种自动化操作一直不习惯。

最佳操作

@udioica

qq?'<CR>r"qn7@qZZ

实用操作

@udioica

qq?'<CR>r"qn7@qZZ

14 分。

实用性并不是体现在替换单引号的功能上,因为这依赖特定的数据格式,并不通用。实用性体现在对宏的灵活使用上,可以举一反三,解决类似问题。

文章目录