1

今日の午後、本で次の vimscript スニペットに出くわしました。残念ながら、私はそれをうまく機能させていません.誰かが私が間違っていることを教えてくれることを願っています.

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

ビジュアル モードでマークアップを強調表示して;hを押すと、次のエラーが表示されます。

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

vimscript の正規表現方言は少し奇妙で、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 に答える