Vim設定ファイルで正規表現が動作しない

私は私のftpluginファイルの中に以下の正規表現を持っています。その目的は、Enterキーを押した後に代入演算子をスペースで区切ることです:

inoremap  :s/\s*\([=+!-]\?=\)\s*/ \1 /ge:noho

=、==、!=、+ =、 - =で動作します。これまでのところ、その部分は完璧に動作しているようです。この問題は、この正規表現を次のように変更して比較演算子を区切ったときに発生します。

inoremap  :s/\s*\([=+!-]\?=\|[><]=\?\)\s*/ \1 /ge:noho

After this change, neither assignment, nor comparison operators are matched anymore (no errors, just nothing happens). However, searching for this new pattern in vim directly highlights all of them. I'm not sure if the issue is due to < and > being special characters in .vim files (used for , etc.), I tried escaping them with \, but that didn't seem to help. Also, when I put them inside the same block as the rest of the operators, they work fine:

inoremap  :s/\s*\([=+!-><]\?=\)\s*/ \1 /ge:noho

The only problem in this case, however, is that if I type something like xx = (a+b+c+d+e+f) - (g+h+i) rather than x = (a + b + c + d + e + f) - (g + h + i)). Likewise, I don't want my negations to look like if( ! (statement) .... What am I doing wrong? Also, I'm using vim 7.2.245. Thanks

3

1 答え

正規表現で magic の量を具体的に指定してみてください:

inoremap  amz:-1s/\v\s*([=+!-<>]?\=\|[<>])\s*/ \1 /ge:nohls`zcl

Note also, I employed C-o to issue the substitute from insert mode

壊す

  • a execute the Enter as normal, insert a dummy character ('a')
  • leave insert mode
  • mz save cursor position in register z
  • :-1s/\v.../.../g on the previous line (-1) perform a global substitution with very-magic on
  • :nohls hide search highlighting
  • `z restore saved cursor position
  • cl enter insert mode, overwriting the earlier dummy character
1
追加された
ニース、私は改行で既存の行を分割するとき私のバージョンが壊れていることに気付かなかった。私がまだあなたのバージョンで見ている1つの問題は、改行ではなく、行を分割するときに登録簿が機能しているように見えますが、理由を理解できないようです。私が考えることができるのは、インデントスクリプト( vim .org/scripts/script.php?script_id = 974 )ではなく、通常のsmartindent
追加された 著者 Alexander Tsepkov,
私のカーソル復元バージョンを投稿しました。途中で行を分割すると(途中でを押して)、インデントを保持すると、私のバージョンがうまく動作することがわかります
追加された 著者 sehe,
追加された 著者 sehe,