- 作成者投稿
- 2009年12月4日 4:51 am #8481takuya参加者
Rubyのインデントがおかしい。
メソッドチェインで書いたときに、Tabがはいってしまう。
バグというか、正規表現設定が変なのでしょうか。標準のまま変えておりません。EmEditor9.05 winVISTAです。Rubyで次のようなコードを書いていました。
#!/usr/bin/env ruby
$KCODE = “u”
p [0,1,2,3,4,5,6,7,8,9].select do |i| i%2 == 0 end.collect do |i| i*i end.each do |i| p i end#上記のコードをインデントを使うように書いていった場合。
p [0,1,2,3,4,5,6,7,8,9].select do |i|
i%2 == 0
end.c o l l e c t #タブが入ってしまう。様々な入力を試みるがうまくいかない
また、バックスペースで消去するなどして、書き進めても、1文字書くごとにタブがはいってしまいます。インデントのタブ(空白)補完がないと書きづらいのですが、動作が変だともっと辛いです。
Rubyは文法の柔軟さが魅力なので、修正していただけると助かります。
また、
自力で、正規表現を修正しようとしましたが、あまりの長さに挫折しました。
インデントの終了・開始の正規表現のルールもよく解りませんでした。
また、インデントの終了・開始の記述方法のヘルプのURLを教えていただければと思います。江村様よろしくお願いします。
2009年12月4日 9:21 am #8486chobieメンバーインデント開始
^(
.*([|({|do)s*(|.*|)?)s*
|
(s*(module|class|def|unless|if|else|elsif|case|when|begin|rescue|ensure|for|while|until).*)
)$インデント終了
^s*(
[}]]s*
|
(end|rescue|ensure|else|elsif|when)b
)こんな形にすれば読みやすいのではないでしょうか?
ステートメント開始のほうはエスケープシーケンスが多いので多少読みにくいかもしれませんが単純なので説明は割愛させていただきます。
構文については下記を参照していただければすぐ読めるかと思いますので参考にしてみてください。
http://jp.emeditor.com/help/howto/search/search_regexp_syntax.htmversion9.06で同じようなタイプをすると
#!/usr/bin/env ruby
$KCODE = “u”
p [0,1,2,3,4,5,6,7,8,9].select do |i|
i%2 == 0
end.collect d odoのoをタイプした際にインデントされてしまうようです。
EmEditorの自前の自動インデントの構文解析と
正規表現での自動インデントが衝突しているのですかね?ちなみにruby詳しくないんでよくわからないんですが
p [0,1,2,3,4,5,6,7,8,9].select do |i|
i%2 == 0
end.collect do |i|
i*i
end.each do |i|
p i
end今回の想定したインデントってこんな感じなのでしょうか?
2009年12月4日 9:22 am #8487匿名ゲストこの問題は他の言語の設定でも再現しており、EmEditor本体に問題がありそうです。
ステートメント終了にあたる記述がない、またはステートメント終了の設定項目が空の場合(今回はこちらに該当)に再現します。例えばC#で
if (cond) {
foo();
} elseと記述した状態で{を打てば正しく動作しますが、以下のようにセミコロンを外すと、
if (cond) {
foo()
} else{を打ったときに不自然なタブが入力されます。
ご確認をよろしくお願いします。
2009年12月10日 8:44 am #8501takuya参加者想定してたのは、もう少し深いインデントです。
p [0,1,2,3,4,5,6,7,8,9].select do |i|
i%2 == 0
end.collect do |i|
i*i
end.each do |i|
p i
end他の言語でも再発するようですね。
Snippetsなど関連ありそうなものを全てオフにしても発生しました。
chobieさんは書きました:
ちなみにruby詳しくないんでよくわからないんですが
p [0,1,2,3,4,5,6,7,8,9].select do |i|
i%2 == 0
end.collect do |i|
i*i
end.each do |i|
p i
end今回の想定したインデントってこんな感じなのでしょうか?
- 作成者投稿
- このトピックに返信するにはログインしてください。