while ("im the true Vim master");

2009-08-05

鎌倉某所でVim勉強会があったらしい

10:49

なんで呼んでくれないの!

ただ、変数を書き換えるには再定義しないとダメなようでした。

Sugamo.css Vim分科会まとめ - Archiva

同一変数には異なる型の値を再代入できないが正解(:help E706)。スクリプトいじくってるときにそこではまったんじゃないでしょうか。提示されてるコードなら:%s/out2/out1/gしても動作するはずです。

どうしても再代入したければ:unletしてから:letすること。もっとも、そんなことをする機会は滅多にありませんし、実際にそういうことをしたいときは何かしらコードの方が不味いのでそもそもしませんけどね。

sigwygsigwyg2009/08/05 17:36なるほど! ご教授ありがとうございます。
:letについて、ちょっと勘違いしてまして、Perlで言う「my $hoge」みたいなもんだと思ってたんですよね。なので「let l:out」のあとに「l:out = hoge + l:out」ができなくてうがーっ、みたいにハマってました。「let l:out = hoge + l:out」ならできました^^;
さらに「:%s/out2/out1/g」を入れる場所が良く判らなかったのですが、substitute()のパターンを弄ってsubstitute(l:str, '^\s\+\(.\+\)', '<li>\1<\/li>', '')のような感じで1行にまとめ、再代入なしになりました。
しかし、substitute()で複雑なマッチパターン多用すると、やっぱり重いですかね?

ka-nachtka-nacht2009/08/05 18:02> さらに「:%s/out2/out1/g」を入れる場所が良く判らなかったのですが
「提示されてるコードなら:%s/out2/out1/gしても動作するはずです。」 = 「例示されてるコードのout2をout1に置き換えても動作するはずです。」です。コードに直接挿入するということではないです。

> しかし、substitute()で複雑なマッチパターン多用すると、やっぱり重いですかね?
基本的に気にする必要はないです。変態的なパターンを書いて大量にマッチングを行うならば別ですが、そんなことは滅多にありません。

sigwygsigwyg2009/08/05 18:27理解&安心しました。ありがとうございます!

ちなみに再代入を繰り返して段階的に文字列を整形していくやり方だと、見た目はすごく判りやすいのですが、VimScriptではバッドノウハウだったりしますか? つまり一度に複雑なパターンを避けて、substitute()を何度かに分けて整形していく、とかです。
いまのところ途中で型変換しなければ大丈夫! みたいに解釈してます。

ka-nachtka-nacht2009/08/05 20:25それはどうコードを書くかのスタイルの問題です。分かり易い方で書けば良いです。そもそもVim scriptとは関係ありませんしバッドノウハウとも関係ありませんよ。
Vimでバッドノウハウというのは:mapと:noremapの違いとそのネーミングセンスなどで、Vim scriptでバッドノウハウというのはVim scriptそのものです。

sigwygsigwyg2009/08/05 21:07了解です。勉強になりました!
いろいろ書いてみようと思います。

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20090805
最近のコメント
あわせて読みたいブログパーツ
AX