terminal – 「キャリッジリターン」などの特殊文字はなぜ「^m」と表現されるのですか?

encoding special-characters terminal

なぜ^MはVIMや他のコンテキストでキャリッジリターンを表すのに使われるのですか?

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

Tabはラテンアルファベットの9番目の文字である^Iで表されていることに気がつきました。逆に、Tabは\x09か10進数の9であり、これは上述した私の理論を支持するものです。しかし、これはどこで事実として文書化されているのでしょうか?

  94  dotancohen  2014-06-05


ベストアンサー

OPが実際に尋ねていたのは、Caret Notationと呼ばれるものだと思います

カレット表記法とは、ASCIIエンコーディングにおける印刷不可能な制御文字のための表記法である。この表記法は、キャレット(^)の後に大文字が続くもので、このディグラフは、その文字の数値に相当する数値を持つASCIIコードを表しています。例えば、値が4のEOT文字は、Dがアルファベットの4番目の文字であるため、^Dと表現されます。また、値が0のNUL文字は^@(@はAの前のASCII文字)と表現されます。値127のDEL文字は通常^?として表現されますが、これはASCIIの「?翻訳の代替的な定式化は、印刷された文字がASCIIコードの7ビット目を反転することによって発見されるというものです

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

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

117  Art Gertner  2014-06-05


まさにその通りの理由です

ASCIIは、文字0〜31を非印刷制御コードとして定義しています。ここでは、ランダムな Linux システム (ascii(7)) のマニュアルページから、CR (13) までの、そして 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 年に米国規格協会が発行したものです。彼らのウェブサイトでは原文を見つけることができませんが、この原文からの抜粋には、上記の制御コードを含む文字表が掲載されています

22  Flup  2014-06-05


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

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

これがASR33キーボードのベストショットです。ご覧のように、制御文字の名前が対応するアルファキーに小さな文字で印刷されています

Teletype Model 33 ASR with paper tape punch/reader

画像 Marcin Wichary, User:AlanM1 (File:ASR-33 2.jpg からの派生(トリミング)です。)CC BY 2.0]via Wikimedia Commons

Mキーには専用の「RETURN」キーがあるので、Mキーには表記がないので、CTRL-Mは冗長です

14  Daniel R Hicks  2014-06-06


キャレット(^)は、ちょうどコントロールキーを保持するための書き込みのための略記です – CTRLダウン

古き良き時代には、これらのコードを入力することができます(上記参照)直接では、Ctrlキー+ G(^G)は、ターミナルが行く “チン “を作るだろう

VimでCRを追加するには、Ctrlキー+Mなどのタブ=Ctrl+Iを使います

3  Don  2014-06-06


定義上の非印刷可能な文字であるものを表示するための何らかの視覚的な方法の必要性

そこで、1970年代初頭(あるいはそれ以前かもしれませんが)の誰かが(CP/Mで見た記憶がありますが、他の誰かが既にTOPSに言及しています)、値1から26までの26個の印刷不可能なASCII制御文字のシンボルを「キャレットプラスレター」と決めました。値0は^@として印刷され、値127は^?

2  RonJohn  2014-06-09


どこに文書化されているかというと、このページではすべての制御文字と、それを制御キーで入力/表現する方法がリストアップされています(最初の文字、アスキー文字0には制御キーの表現がありませんが)。また、一番下にはソースがあります

302 Found

33の制御文字があることを考えると、不思議に思うかもしれません(ASCII文字0-31なので32文字、+文字127、=33文字)。まあ、アスキー文字1にはCtrl-A、アスキー文字26にはCtrl-Zを使い、Ctrl-Zになったら[ \ ] ^ _を使います

Ctrl-ZはSUBとしてリストアップされていますが、DOSやcmdプロンプトではEOFで、技術者としてはcopy con a.aa.aがファイルになっているときに使います。テキストを入力してCtrl-Zで終了しますが、不思議なことにEOFマーカーは入力されません。しかし、CMDにファイルの終了を伝えて、CMDがそれを書き込むようにしています

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

しかし、リンク切れですが、archive.orgではJPGの形で利用できます

情報交換のための米国規格コード ASA規格X3.4-1963

WPS:I/O
The ASA X3.4-1963 ASCII code standard

1  barlop  2014-06-05


このテーブルで、プリタブルではないASCII文字Controlのマッピングをすべて見ることができます

0  Ofir Luzon  2014-06-05


タイトルとURLをコピーしました