我今天下午在一本书中遇到了以下vimscript片段,看起来它真的很有用。不幸的是,我还没有完全开始工作,我希望有人可以告诉我我做错了什么。
vmap <silent> ;h :s?^\(\s*\)+'\([^']\+\)',*\s*$?\1\2?g<CR>
当我在视觉模式中突出显示某些标记并点击; h 时,我收到以下错误:
Pattern not found: ^\(\s*\)+'\([^']\+\)',*\s*$
vimscript regexp方言有点奇怪,vimscript本身看起来有点异形。据我所知,这是一个错字。第一个&#39; +&#39;之后的一切有点神秘。我的理解是,这应该将视觉模式中的选择转换为引用版本:
<div>
<div class="header">stuff</div>
</div>
到
+ '<div>'
+ ' <div class="header">stuff</div>'
+ '</div>'
在崇高中,我可以使用以下表达式进行查找/替换:
/^(.*)$/+'\1'/
这使得vimscript版本看起来有点冗长。即便如此,我也希望能够在vim中完成它。
[编辑:事实证明上面的代码片段工作正常,它只是没有做我认为的那样。我正在看的文字列出了一对这些,我看错了。见下文:]
vmap <silent> ;h :s?^\(\s*\)+'\([^']\+\)',*\s*$?\1\2?g<CR>
vmap <silent> ;q :s?^\(\s*\)\(.*\)\s*$?\1+'\2'?<CR>
答案 0 :(得分:1)
vim中的/^(.*)$/+'\1'/
相当于
:%s/.*/+'&'/
看起来像是
vmap <silent> ;h :s?^\(\s*\)+'\([^']\+\)',*\s*$?\1\2?g<CR>
正在尝试为当前行撤消它。
所以转换
+ '<div>'
+ ' <div class="header">stuff</div>'
+ '</div>'
进入
<div>
<div class="header">stuff</div>
</div>
不是相反