プログラミングでのタブとスペースの使用に関する議論は終わりがありません。
常にタブを使用することをお勧めしますが、コーディングガイドラインでスペースの使用が提案されている可能性があります。
ただし、プログラムのあらゆる場所ですでにタブを使用していて、レビュー担当者がコードを許可するようにそれらのタブをスペースに変換する必要がある場合は、適切な場所にいます。
このチュートリアルでは、Linuxコマンドラインでタブをテキストファイルのスペースに変換する方法を説明します。
expandコマンドを使用してLinuxコマンドラインでタブをスペースに変換する
奇数と偶数をチェックするための単純なC++プログラムであるこのサンプルテキストファイルを使用しています。これはファイルの内容です:
このチュートリアルに従ってコマンドを練習したい場合は、ここからこのファイルをダウンロードできます。
それを行うにはいくつかの方法があります。私が見つけた最も簡単な方法は、catコマンドを使用することです。
オプション-Tを指定してcatコマンドを使用すると、すべてのタブが画面に^ Iとして表示されます(stdout)。
cat -T tab_file
ファイル内のタブの場所を確認できます。
#include
using namespace std;
int main()
{
^Iint n;
^Icout << “Enter a number:^I“;
^Icin >> n;
^I
^Iif (n%2 == 0) {
^I^Icout<<n<< “is an even Number”;
^I}
^Ielse
^I^Icout<<n<< “is an odd Number”;
^Ireturn 0;
}
ファイルに対してexpandコマンドを使用すると、すべてのタブが8つのスペースのブロックに変換され、出力が画面に表示されます。
expand tab_file
でもそれはあまり便利ではありませんねここでの変更はほとんどわかりません。出力を別のファイルに保存することをお勧めします。
expand tab_file > space_file
これで、catコマンドを使用してファイルを表示すると、タブは表示されなくなります。
前のセクションで述べたように、デフォルトでは、タブは8スペースに相当します。コードにこのような大きなインデントがあると、非常に奇妙に見えます。
良い点は、-tオプションを使用してデフォルトのスペースサイズを変更できることです。
expand -t N tab_file
たとえば、各タブを2つのスペースに変更する必要がある場合は、次のように展開コマンドを使用できます。
expand -t2 tab_file > space_file
多くの場合、プログラムでは、先頭のタブ、つまり行の先頭にあるタブのみを変換する必要があります。実際にコードの一部である行の間のタブには触れないでください。
Expandは、このオプションも提供します。先頭のタブのみをスペースに変換する場合は、 –iオプションを使用します 。
前の例を続けると、コマンドは次のようになります。
expand -t2 -i tab_file > space_file
タブをスペースに変換し、元のファイルに保存します
上記のすべての例では、変換されたファイルを新しいファイルに保存しました。ただし、タブを既存のプログラムファイルのスペースに変換してコードをクリーンアップすることが目的の場合は、出力を元のファイル自体に保存する必要があります。
これを行うには、スポンジコマンドを使用できます。スポンジは、出力に書き込む前に、標準入力全体を「吸収」します。これは、同じファイルを変更して保存する場合に非常に便利です。
現在、スポンジコマンドはシステムで使用できない場合があります。 moreutilsパッケージをインストールする必要があります。利用可能である必要があります
Ubuntu / Debianベースのディストリビューションでは、次のコマンドを使用してmoreutilsをインストールできます:
sudo apt install moreutils
インストールすると、次の機能で使用できます。
expand -t2 -i tab_file | sponge tab_file
これまで、学んだことはすべて1つのファイルに適用できました。ただし、複数のプログラムファイルを含むプロジェクトがあり、それらすべてのタブをスペースに変換する場合は、ここでもう少し賢くする必要があります。
これまでに学んだことは、すばらしいfindコマンドとexecコマンドと組み合わせることができます。
find . -name '*.cpp' -type f -exec bash -c 'expand -t 4 "$0" | sponge "$0"' {} \;
上記のコマンドは、拡張子cppで終わるすべてのファイルを検索し、これらのファイルをexpandコマンドに渡し、expandコマンドはspongeコマンドを使用して出力を元のファイルに書き込みます。
この時点では、sedコマンドを使用する方が簡単だと思うかもしれませんが、それは完全にあなたの選択です。