[] VIM

2016-04-22 7 views
1

でのアクセスは、私はvimのを入力するための正しいコマンドは何[] VIM

var[i*w+j] = something; 

var.at(i*w+j) = something; 

を変換するとしますか?私は

var[(i*w+j) = something;] 

作品になり

:%s/\.at\(.*\)/[\1]/g 

を試みたが、括弧を除去することができる場合であっても良くなります。

EDIT:示す正しい結果の試み

+0

あなたに 'var [(i + w + j)= something]'を与えてもらえませんか? '。*'は欲張りです... – Barry

答えて

2

を(あなたはまだグループ化を必要とすることに注意してください):

qqqqq/\.at(<CR>%"adi)F.c%[<Esc>"apa]<Esc>@[email protected] 

は説明:

qq             record macro `q` 
    q             end empty macro 
    qq            record macro `q` 
     /\.at(<CR>          search for `.at(` 
       %         go to the matching closing `)` 
       "adi)        delete inside the parenthesis into register `a` 
         F.        go back to the previous `.` 
         c%       change what’s in the matching parenthesis 
          [<Esc>      with `[` and leave insert mode 
           "ap     paste what’s in register `a` 
            a]<Esc>   append `]` and leave insert mode 
              @q   call the (currently empty) `q` macro recursively 
              q  end macro 
              @q  call the (now non-empty) macro `q` 

また、これは正しくvar.at(foo(bar, baz)) = something;のようなものを扱います。

+0

うわー、これをタイプしようとしましたが、 'E486:Pattern not found:\ .at(% 'adi)Fc%[" apa] @ qq @ q' 。私は間違って何かしていますか? – user3667089

+0

」はEnterを意味し、「」はエスケープを意味します – mcarton

+0

ワウは魔法のように機能します。 – user3667089

2

VIMを入力するための正しいコマンドは何ですか?私はこの問題は、あなたが括弧をエスケープしていることである

:%s/\.at\(.*\)/[\1]/g 

を試みました。原因あなたは私のためにリテラル()

:%s/\.at(\(.*\))/[\1]/g 

作品を一致させたい一方で、あなたの"magic"設定、グループ化のための\(\)仕事へ。再帰的なマクロで

+0

これは 'something = var1.at(i * w + j)+ var2.at(i * w + j)'の場合には機能しません。コマンドは 'something = var1 [i * w + j] + var2.at(i * w + j)'になるでしょう。 – user3667089

+1

問題は基本的には* – jkerian

+1

を回避するために '。*'を '[^]] *'(括弧を除くすべてにマッチさせる)に置き換えるか、醜いungreedy '' \ { - } ' – sidyll