1

今天下午我在一本书中遇到了以下 vimscript 片段,它似乎真的很有用。不幸的是,我还没有完全让它工作,我希望有人能告诉我我做错了什么。

 vmap <silent> ;h :s?^\(\s*\)+'\([^']\+\)',*\s*$?\1\2?g<CR>

当我在可视模式下突出显示某些标记并点击;h 时,我收到以下错误:

Pattern not found: ^\(\s*\)+'\([^']\+\)',*\s*$

vimscript regexp 方言有点奇怪,vimscript 本身似乎有点陌生。据我所知,有一个错字。第一个“+”之后的所有内容都有点神秘。我的理解是,这应该将可视模式下的选择转换为引用版本:

 <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>
4

1 回答 1

1

/^(.*)$/+'\1'/在 vim 中的等价物 是

:%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>

不是反过来

于 2013-09-11T23:39:29.317 回答