[VimGolf] 引号中的引号
题目链接
题目说明
把单引号替换成双引号。
开始文件
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 分。
实用性并不是体现在替换单引号的功能上,因为这依赖特定的数据格式,并不通用。实用性体现在对宏的灵活使用上,可以举一反三,解决类似问题。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。