为了增加我的评论和/或文字笔记的视觉兴趣,我通常在每个字符部分之间放置1个空格,如下所示:
//////////////////////////////////////////
// VERY IMPORTANT NOTE
//////////////////////////////////////////
//////////////////////////////////////////
// V E R Y I M P O R T A N T N O T E
//////////////////////////////////////////
对于&#34;正常&#34;这很简单。编辑器(你只需按<right arrow> <space>
直到单词/行的结尾),但现在我已经习惯了Vim,感觉很奇怪:必须有更好的方法。
同样在Vim中也不容易:我显然可以使用&#34; a <space> <esc> l
&#34;创建一个宏,但它有点笨拙,特别是因为你必须计算你要重复多少次宏。
有没有办法直观地选择一行/单词/什么,并自动完成我需要做的事情?
我阅读了this answer here on S.O.,它基本上达到了我想要的正则表达式[%s/pattern/\=join(split(submatch(0),'\zs'), ' ')/g]
,但我无法想出一种使用我的视觉选择而不是特定模式的方法。
在开始考虑如何创建插件之前有任何想法? 谢谢!
答案 0 :(得分:2)
怎么样:
:xnoremap µ s<c-r>=substitute(@", '.\ze.', '& ', 'g')<cr>
v_s
剪切选区并将其放入默认注册@"
,然后您可以重新注入它,感谢i_CTRL-R=
和substitute()
。如果您愿意,也可以使用split()
+ join()
,但\ze.
已经考虑在最后一个字符后添加额外的空格。
答案 1 :(得分:0)
作为参考,这是我采用的完整解决方案。
根据Luc Hermitte的回答,我最终以两种不同的模式进行映射。
视觉模式中的第一个:
vnoremap ç s<c-r>=substitute(@", '.\ze.', '& ', 'g')<cr><esc>
这仅仅适用于Luc的精彩解决方案,在所有选定的角色之间添加空格。
正常模式下的第二个:
nnoremap ç 0v$hs<c-r>=substitute(@", '.\ze.', '& ', 'g')<cr><esc>
这个,非常类似,在应用Luc的命令之前,在视觉模式中预先选择(使用0v$h
)除最终换行符之外的当前行。
非常有用的东西,我在这个过程中学到了很多东西!
希望它有用,享受Vim:)