設計上、先行タブ文字を含むファイルを再編集すると、GitHubは自動的にすべての手がかりをタブから空白に変換します。つまり、ファイルを編集してすべての手がかりをスペースからタブに変更すると、そのように保存されます。ただし、ファイルを再編集して保存すると(手がかりを変更せずに)、すべての手がかりは自動的に空白に戻ります。
1)変更する前にファイル編集モードを保存するには:
2)変更を保存した後にファイルを編集するには:
ファイルを再編集するときに、ファイルがタブ(4)から空白(2)にどのように戻るかを確認してください。
これはなぜ問題なのか?
実装する生のcurl
リモートスクリプトバージョンタブ関連データ(例:ここのドキュメント)、失敗します。空白ではなく先行タブを含める必要があるため、実行は一部のエラーによってのみ中断されます。
curl
これは、次のようにGitHubでリモートスクリプトを実行するために使用するデフォルトのパターンです(複数のカールの場合、これ。 ):
curl -s URL | tr -d '\r' | bash
私の質問
tr
GitHubで実行されているリモートスクリプトには常にスペースの代わりに先行タブがあり、GitHubの奇妙な動作に影響されないようにすべての先行スペースをタブに変更する方法(おそらく使用)がありますか?
答え1
私はWebインターフェースからGitHubファイルを直接編集しないので、GitHubとそのエディタについてはあまり話すことはできません。
標準ユーティリティexpand
そしてunexpand
先行タブを空白()に変換したりexpand
、先行スペースをタブ(unexpand
)に変換するために使用できます。
前の2つのスペースをタブに変更するには(または4つのスペースを2つのタブに変更するなど)、次を使用します。
unexpand -t 2 file
これは、次のフィルタとしても使用できます。
somecommand | unexpand -t 2
複数の先行スペースを単一のタブに置き換えるには、sed
次のようにGNUを使用することもできます。
sed 's/^ */\t/'
パターン^ *
銀二つ^
との間にスペースがあります*
。この正規表現は、1つ以上の先行スペースと一致します(^ +
GNUをorで使用する場合と同じ)。 GNU置換はそれをタブ文字に置き換えます(他の実装では代替部分にリテラルタブ文字が必要です)。^ {1,}
sed
-r
-E
sed
sed
\t
unexpand
OpenBSDでは、実装がタブごとに8つの空白を想定してフラグを認識しないため、これは機能しないことがわかりました-t
。しかし、上記のアドバイスはunexpand
GNU coreutilsのコンテンツに適用されます。