2016-05-17 11 views
1

は例えば、私は次のスニペットがありますemacsでは、regexpの代わりにalign-regexpを使用できますか?

'abc' => 1, 
'abcabc' =>2, 
'abcabcabc' => 3, 

をそして私はそれをフォーマットします:

'abc'  => 1, 
'abcabc' => 2, 
'abcabcabc' => 3, 

私はそれを行うための簡単な方法があります知っているが、ここで私はちょうどしたいですよ私の理解をalign-regexpに練習してください。私はこのコマンドを試しましたが、うまくいきません:

C-u M-x align-regexp \(\s-+\)=\|\(>\s-*\)\d 1 1 y 

どこが間違っていますか?おかげさまで

+0

@philsはい私はそれを知っています。それはまさに私が欲しいものです。私の質問は、それが想定どおりに動作しないということです。 –

+0

@phils、 '\ d'問題を指摘してくれてありがとう。私はemacsがそれをサポートしていないことを忘れていました。私は正規表現を改善できるかどうかを調べるつもりです。再度、感謝します! –

+0

n.b.すべてのものを答えに変換しました。 – phils

答えて

4

そこで質問です:\(\s-+\)=\|\(>\s-*\)\d\(\s-+\)=または\(>\s-*\)\dに一致して、我々はライン全体にこれらの選択肢のそれぞれに整列するalign-regexpを使用することができます。

答えはありません。align-regexpは、正規表現の特定の一致する1つのグループを変更します。この場合、それはグループ1であり、グループ1は最初は\(\s-+\)です。正規表現のグループ1は実際に一致したものに応じて変化しないので、\(>\s-*\) を決して参照しません。

の代わりに置き換えられるべき正規表現の単一のグループであるように正規表現を表現することができれば、がすべて一致しますが、あなたが望む効果を得ることができます。

>?\(\s-*\)[0-9=] - 少なくとも表示されているデータの場合は、希望の結果を出します。 Emacsの\d試合d

。それは[0-9]でなければなりません。
一般的には、アライメントグループに空白以外の空白を入れたくない場合、Emacsはそのグループの内容を置き換えます。

関連する問題