ファイルシステムブランチの各ファイルのすべてのタブを2つのスペースに置き換える方法は?


10

私はScalaをコーディングしていますが、慣例として、識別のためにレベルごとに2つのスペースを使用しています。しかし、さまざまなエディターを使用すると、ソースがスペースとタブの混合でいっぱいになります。

すべてのファイル(実際には* .scalaファイルですが、これを指定する必要はありません)を自動的にリファクタリングしたい(特定のディレクトリおよびすべての基になるFSブランチで(再帰的に))、すべてのタブを二重スペースに置き換えます。古典的なUnix / GNUツールでこれを行うには簡単で美しい方法があると思いますが、この分野での経験はありません。手伝ってくれませんか?

回答:


9

再帰的に使用するexpand(これはこの目的のために作成された):find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

インライン編集をサポートしているため、sedまたはperl(サルダトリオンの回答を参照)を使用してそれを行いますが、expandとにかく良いol 'について言及したいと思います。

編集:それは find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +


最初のバリアントは期待どおりに機能します。2番目の(perl)バリアントは、タブを2つではなく1つのスペースに置き換えます。
Ivan、

ええ、申し訳ありません:それはフォーマットの間違いでした。ソースコードは2つのスペースを示していますが、レンダリングされたHTMLは1つしか表示しません。
janmoesen

10

これはそれを行うはずです:

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +

注:これはテストされていません。


1
これはまだ再帰的ではありません。findまたは**/*.scala再帰をサポートするシェルを使用できます。
janmoesen、2011年

再帰的な動作を追加するために編集されました...
サルダトリオン-SEの悪用に対して

宣伝しないでくださいfind | xargsfind -exec代わりに、私の回答で述べたように使用します。より簡単で安全です。
janmoesen、2011年

これを試しましたが、結果はありません。コマンドはすぐに戻り、ファイル内で何も変更されません。
イワン

これはテストされてませんが、要点は機能します。
サルダトリオン-
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.