「キャリッジリターン」などの特殊文字が「^ M」として表されるのはなぜですか?


93

^MVIMおよびその他のコンテキストでキャリッジリターンを表すために使用されるのはなぜですか?

私の推測では、それMはラテンアルファベットの13文字目であり、キャリッジリターンは\x0D10進数13です。これが理由ですか?この表現はどこにでも文書化されていますか?

Tabは^I、ラテンアルファベットの9番目の文字であるによって表されています。逆に、Tab is \x09またはdecimalは9、上記の私の理論をサポートしています。しかし、これはどこで事実として文書化されますか?


1
また、DOS / Windowsでは「CR LF」とも呼ばれる「0x0d 0x0a」を使用することに注意してください。しかし、unix / linuxは「0x0a」または「LF」のみを使用します。したがって、LinuxでWindowsドキュメントを開くと、余分な「CR」が検出され、WindowsでLinuxドキュメントを開くと、新しい行は検出されません。
LatinSuD 14年

3
@LatinSuDキャレット表記(および対応するCtrlキーの使用)は、C0コントロールセット(歴史的にはASCIIの一部)に直接関連し、特定のオペレーティングシステムまたはプログラムが新しい行などを表す際にそのセットの一部を使用するかどうか、およびその方法ではありませんそれ以外。同様に、^H文字を削除するか、オーバープリントを許可するか(n^H~ñを生成する時代遅れの方法など)、または制御文字の他の実際の使用は、キャレット表記とは別です。
ジョンハンナ14年

11
古いもの...元のコードを思い出せませんが、ctrl-Gが鳴ります!
ブライアンドラモンド14年

3
@OlivierDulacいいえ、^ M がちょうど改行であるように、^ M まさにキャリッジリターンです。異なるOSには、改行やキャリッジリターンまたは他の何か(一部のIBM文字で使用されているがASCIIの一部ではないため、他のOSの歴史的遺産の一部ではない改行文字など)テキストファイルの新しい行を表します。一部のプログラムはさまざまな方法でオーバーライドしますが、U + 000D自体はキャリッジリターンであり、UnixやDOSのような後のオペレーティングシステムで処理することに決めました。(もちろん、それを呼び出す...
ジョンハンナ

1
@OlivierDulac ... U + 000Dは、その名前が1990年代にUnicodeに付属していたため、前向きですが、1963年にASCIIに存在していたコードを完全に参照しています。 。マレーは、何十年も後に「テキストファイル」の概念で使用されたのと同じツールを使用して、紙の移動に関する問題を解決していました。釘を釘のようなものに打ち込みますが、それでもねじです。LFおよび/またはCRを使用して、テキストファイル内の行の終わりを表しますが、これらは依然として改行およびキャリッジリターンです。
ジョンハンナ14年

回答:


115

私はOPが実際に尋ねていたものがキャレット表記法と呼ばれると信じています。

キャレット表記は、ASCIIエンコーディングの印刷できない制御文字の表記です。表記は、キャレット(^)とそれに続く大文字で構成されます。このダイグラフは、文字の数値に相当する数値を持つASCIIコードを表します。たとえば、Dがアルファベットの4番目の文字であるため、値が4のEOT文字は^ Dとして表されます。値が0のNUL文字は^ @として表されます(@はAの前のASCII文字です)。値127のDEL文字は通常、ASCIIの「?」であるため、^?として表されます。7ビットにマスクされている場合、「@」の前にあり、-1は127と同じです。変換の別の定式化は、ASCIIコードの7番目のビットを反転することにより、印刷された文字が見つかることです。

ASCII制御文字の完全なリストとキャレット表記はここにあります

vimやその他のテキストエディターについて:通常、Linuxの行末(LF)が必要なエディターでWindows形式(CRLF)のテキストファイルを開いた場合にのみ^ Mが表示されます。0x0Aは改行としてレンダリングされ、0x0Dは^ Mとして印刷される直前にレンダリングされます。ほとんどの場合、エディターのデフォルト設定には「行末を自動的に認識する」が含まれます。


1
私はいつも...その事が呼び出されたかと思った
SMCI

5
この規則は、少なくとも1970年代に遡ります。私は最初にTOPS-10オペレーティングシステムでそれを見ましたが、それは以前に存在していたかもしれません。価値のあることに、古いASCII端末では、キャレットとして表示される文字は実際には上向きの矢印であったため、これは「上向き記法」として始まりました。
ケシュラム14年

15
Ctrlキーが少しだけ7.トグルするようにするために明示的にASCIIの設計に組み込まれています
OrangeDog

2
文字だけで使用されるわけではありません。「文字の数値」を持つ制御文字としてではなく、「xor 64」として定義します。つまり、^Ais 0x41 xor 0x40、または0x01andおよび^?is 0x3F xor 0x40、または0x7Fです。
R ..

1
Ascii DEL(^?)は、削除キーとは関係ありません。これは、実際には、<---VT100に似た端末でキー(また、紛らわしいことに、バックスペースとも呼ばれます)によって生成された標準コードです。
R .. 14年

22

それがまさにその理由です。

ASCIIは、文字0〜31を非印刷制御コードとして定義します。以下ascii(7)は、ランダムなLinuxシステム(man ascii)からCR(13)までのマニュアルページからの抜粋です。

   Oct   Dec   Hex   Char                       
   ─────────────────────────────────────────────
   000   0     00    NUL '\0'                    
   001   1     01    SOH (start of heading)     
   002   2     02    STX (start of text)         
   003   3     03    ETX (end of text)           
   004   4     04    EOT (end of transmission)   
   005   5     05    ENQ (enquiry)               
   006   6     06    ACK (acknowledge)           
   007   7     07    BEL '\a' (bell)             
   010   8     08    BS  '\b' (backspace)       
   011   9     09    HT  '\t' (horizontal tab)  
   012   10    0A    LF  '\n' (new line)        
   013   11    0B    VT  '\v' (vertical tab)    
   014   12    0C    FF  '\f' (form feed)       
   015   13    0D    CR  '\r' (carriage ret)    

従来、これらの文字はControl、必要な文字に関連して生成されます。Gこのため、テレタイプと初期の端末キーボードにはキーの上に「BELL」と書かれていました。

ASCIIを定義した規格文書があるASA X3.4-1963私は彼らのウェブサイト上で原稿を見つけることができない1963年にアメリカ規格協会が発行した、が、元の文書から、この抽出物は、文字テーブルを示し、含みます上記の制御コード。


4
ありがとうございました。有益ではありますが、この回答には質問に対する回答が含まれていません。
dotancohen

1
答えは2番目の段落に隠されています:^MControl-Mの略です。端末では、CtrlキーとMキーを同時に押して、キャリッジリターンとも呼ばれるASCIIコード0x0Dを送信します。
マーティンリヴァージュ14

14

表記は、最も初期のASCIIテレタイプ(約1963年)に遡ります。CTRL-M(キャリッジリターン)が4Dではなく0D、CTRL-G(ベル)が47ではなく07、CTRL-L(フォームフィード)が0Cになるように0x40ビットを切り替えるCTRLキーがありました4Cの。

特定の文字を特定の機能に割り当てる「デザイン」はありませんでした。ASCIIコードの割り当てからゴミが落ち着いたとき、Mキーがキャリッジリターンと1ビット異なっていたため、キャリッジリターンがCTRL-Mになりました。

ASR33キーボードのベストショットを以下に示します。ご覧のとおり、制御文字の名前は対応するアルファキーに小さな文字で印刷されています。

紙テープパンチ/リーダー付きテレタイプモデル33 ASR

画像:Marcin Wichary、ユーザー:AlanM1(ファイル:ASR-33 2.jpgから派生(トリミング))[ CC BY 2.0 ]、ウィキメディアコモンズ経由

専用の「RETURN」キーがあるため、Mキーには表記がありません。そのため、CTRL-Mは冗長です。


2
あるレベルでは、今では古代のシステムのように見えるデザインの選択にまだ拘束されている程度は非常に驚くべきことです。 (b)十分な設計上の決定が下されると、それらの一部(特に人々に十分な問題を引き起こさないもの)は、それらの理由が記憶に消えてからずっと続くことになります。しかし、これらのことのいくつかの歴史を振り返るのはまだ奇妙な気持ちです。
スチュアートゴロデッツ14年

2
@StuartGolodetz-実のところ、私は奇妙に心強いと思う。しかし、テレタイプが「高度な技術」だった時代を覚えています。(ちなみに、Teletype ASR-33はエレガントでシンプルな点で注目に値します。「現代の」コンピューターシステムがうまく設計されていればいいのにと思います。)
ダニエルRヒックス14年

1
これは魅力的ですが、私が理解していないのは..なんで彼らはこのタイプライターにベルが必要だと決めたのですか?
キャプテンコードマン14年

4
@CaptainCodeman-重要なメッセージを送信すると、相手のオペレーターの注意を引くためにベルを鳴らします。
ダニエルRヒックス14年

2
CtrlキーがPCキーボード上で今日まで存続していることに注意するのは興味深いことです。
ダニエルRヒックス14年

3

キャレット(^)は、Ctrlキーを押しながらCtrlキーを押したまま記述するだけの略記です。

古き良き時代には、これらのコード(上記を参照)を直接入力できました。Ctrlキー+ G(^ G)を押すと、端末は「鳴り」ます

VimでCRを追加する場合は、Ctrlキー+ Mなどを使用しますtab = Ctrl + I


探している用語はdigraphで、これは1文字を表す2文字を意味します。具体的には、ダイグラフとトライグラフは、印刷できない文字を表すために使用されます。歴史的には、キーボードに表示されない文字にも使用されてきましたが、最新のGUIとキーボードではこれは問題ではないため、この使用はより古風です。

「古き良き時代」は今日でもなお、^ Cと^ Dは完全に機能しています。^ Gが端末をもう鳴らさない唯一の理由は、ほとんどの端末エミュレータがその応答をオフにしていることです。
SevenSidedDie 14年

2

定義上、印刷できない文字を視覚的に表示する必要があります。

したがって、1970年代初期(またはそれ以前)の誰か(私はCP / Mでそれを見たことを覚えており、他の人はすでにTOPSについて言及しています) 1〜26。値0は^ @として、値127は^?として印刷されました。


1

文書化されている場所では、このページにはすべての制御文字がリストされており、制御キーで入力/表現する方法(最初のASCII文字0には制御キー表現はありませんが)と文字127には何もありません。下部にソースを提供します

https://www.cs.tut.fi/~jkorpela/chars/c0.html

33個の制御文字(ASCII文字0から31、したがって32文字、+文字127。したがって、= 33文字)があるため、アルファベットには26文字しかないため、それらがすべてどのように表されるか疑問に思われるかもしれません。さて、アスキー文字1にはCtrl-Aを使用し、アスキー文字26にはCtrl-Zを使用し、そこでCtrl-Zに達すると、 [ \ ] ^ _

Ctrl-ZはSUBとしてリストされますが、DOSおよびcmdプロンプトではEOFであり、技術ユーザーとしてファイルのcopy con a.a場所を指定するときに使用しa.aます。テキストを入力し、面白いことにEOFマーカーを入力しないCtrl-Zで終了します。しかし、CMDがファイルの終わりであることを伝えるので、CMDはそれを書き込みます。

このcs.tut.fi Webページは、これをソースとして提供しています
http://www.wps.com/texts/codes/X3.4-1963/index.html

しかし、それは壊れたリンクですが、archive.orgで利用でき、JPGの形式です

情報交換
ASA標準X3.4-1963のアメリカ標準コード

https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html


ほとんどの制御文字は無意味ですが、Ctrl-Iのような意味を持つものの一部でさえ、Ctrl-Iを実行してタブを取得できる場所がわかりません。
barlop

1
制御文字はどれも意味がありません。それらの多くは多くのコンテキストで使用されていませんが、それぞれに少なくとも1つの意味があります。
ジョンハンナ14年

@JonHannaもちろん、彼らが無意味だったわけではありません(過去形)。しかし、R。は何十年も無意味でした。 w /現在および少し古いtech.nが現代の用途に使用されている場合、それは多くありません。ここにen.wikipedia.org/wiki/Control_character の一般的な使用0,7,8,9,10,11,12,13,127のリストがあります。9/33そのほか(そのうちの24)uはどちらか非常にまれか、まったく彼らは数十年のための使用のうち、未使用の首をかしげたくなる彼らは上で使用された機械のように死んでrとcのだろう
barlop

Associated Pressは、引き続き1〜4を使用するANPA-1312を使用し、6と16を使用してすべてのTCP / IP接続を開始します。現代のプリンター(他のスタイルの中でも)はまだ17と19を使用しています。あなたが言及したものと合わせて、私たちはそれらのかなりの割合を実際に試さずにカバーしています。私はあなたが彼らが頻繁に使用されていないことを認めますが、彼らも死んでいません。
ジョンハンナ14年

1
@barlop ^I標準のbash:typeのタブに対して実行できますls ~/^I^I。ホームディレクトリ内のすべてのフォルダーが表示されます。
wchargin

0

この表では、pripritableでないASCII文字のControlマッピングをすべて見ることができます。


5
これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう。そうすれば、リンクされたページが何らかの理由で変更または無効になった場合でも、スーパーユーザーへの訪問者にとって答えは有用です。
CVn 14年

3
ありがとうございました。有益ではありますが、この回答には質問に対する回答が含まれていません。
dotancohen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.