Ctrl+MはCR(復帰)でCtrl+JはLF(改行)で、それぞれ ^M ^J と表記されるという事
主にUNIXとかLinuxとかでの事だけど、よく ^M とか ^H という表記を見ます。
なんとなく分かってはいたけど、MacOSがUNIXということもあって、改めてちゃんと把握したいところです。
とりあえず改行コード
Ctrl+M*1はCRでCtrl+J*2はLF。
lessとかviでテキストを開いたとき、行末に ^M とか表示されている場合は、lessやviが解釈できない改行コードで保存されたテキストデータかもしれません。
:set fileformat=改行コードのタイプ
vi ならこんなコマンドで改行コードを変更できます。*3
でも less は、調べた限りでは改行コードを指定したり出来ないようで、ちゃんと開くには一工夫要ります。
tr -d '\r' < file_you_want_to_change_line_format.txt | less //CRを消す。CRLFをLFに変えたい場合。 tr -d '\n' < file_you_want_to_change_line_format.txt | less //LFを消す。CRLFをCRに変えたい場合。 tr '\n' '\r' < file_you_want_to_change_line_format.txt | less //LFをCRに変えたい場合。 tr '\r' '\r\n' < file_you_want_to_change_line_format.txt | less //CRをCRLFに変えたい場合。
trコマンドを使ってパイプで less などに渡す事で、元のファイルの改行コードを変えたりせずに、ちゃんと改行された文章を見る事が出来ます。
Mac の less はCRじゃなくてLF?
Macってのは改行コードがCRなものだと思っていましたが、Mac OS の less でCRを受け付けてない事がありました。
ファイルを開くと、行末に ^M が出ていたので、どう見てもCRです。
tr '\r' '\n' < file_you_want_to_change_line_format.txt | less
これでCRをLFに変えたら、ちゃんと読む事が出来たので、間違いなくlessコマンドはLFを受け付けてます。
MaxOS XでUNIXベースになったから LF が標準になったのか?
それとも、lessコマンドが改行コードの自動判別が出来るとして、たまたまそのファイルでは、判別出来ていなかったとか?
今度時間を見つけてちゃんと調べたい所です。
なんでCtrl+MやJやHなのか
昔からPCに触れていたり、UNIXの文化に親しい人なんかは、自然に理解してそうなイメージがあります。
自分は良く知らないので調べてみました。
Ctrlキーは Control。つまり制御キーの事を指します。
つまり、ASCIIの制御文字を入力するためのキーだったようです。
Ctrlを押す事で、ASCIIの10進数で -64 となります。
^A(\65) | SOH(\1) |
^B(\66) | STX(\2) |
^H(\72) | BS*4(\8) |
^J(\74) | NL*5(\10) |
^M(\77) | CR(\13) |
例えば、このような対応表になります。
この5文字だけというわけではなく、DELを除く全ての制御文字に対応しています。
詳しくはASCII - Wikipedia に一覧表があります。
^ はアクサンシルコンフレックス
^ の様な記号は、検索する事が出来ず、こういう事を調べる時には不便です。
読み以外も含んでますが、羅列しておきます。
- アクサンシルコンフレックス
- カレット(caret)
- ハット記号
- ˆ*6
- サーカムフレックス - Wikipedia