web-dev-qa-db-ja.com

「復帰」などの特殊文字が「^ M」と表示されるのはなぜですか。

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

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

タブがラテン文字の9番目の文字である^Iで表されていることに気づきました。逆に、タブは\x09または10進数9であり、上記の私の理論をサポートしています。しかし、これが事実としてどこに文書化されているのでしょうか?

93
dotancohen

OPが実際に求めていたことは Caret Notation と呼ばれていると思います。

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

ASCII制御文字とキャレット表記の完全なリストは次のとおりです here

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

115
Art Gertner

それがまさに理由です。

ASCIIは、文字0〜31を非印刷制御コードとして定義します。これは、ランダムなLinuxシステムからの ascii(7) マニュアルページからの抜粋です(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 と必要な文字に関連する手紙。テレタイプと初期の端末キーボードには、上に「BELL」と書かれていました G この理由でキー。

ASCIIはASA X3.4-1963を定義した標準文書で、1963年に米国規格協会によって発行されました。私はできません。 Webサイトで元のドキュメントを検索しますが、 元のドキュメントからの抜粋 は、上記の制御コードを含む文字テーブルを表示します。

22
Flup

表記は最も初期のASCII Teletypes(ca 1963)に戻ります。CTRL-M(キャリッジリターン)が4Dではなく0Dになるように、0x40ビットを切り替えるCTRLキーがありました。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、ユーザー:AlanM1( (File:ASR-33 2.jpg )から派生(トリミング))[ CC BY 2. ]、ウィキメディア・コモンズ経由

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

14
Daniel R Hicks

キャレット(^)は、Ctrlキーを押しながらCtrlキーを押しながら書くことの省略形です。

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

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

3
Don

定義上、印刷できない文字を視覚的に表示する方法の必要性。

したがって、1970年代初頭(またはそれ以前)の誰か(CP/Mでそれを目にしたことを覚えており、他の誰かがすでにTOPSについて言及している)は、「キャレットプラスレター」が26の印刷できないASCIIは、1から26までの値を持つ制御文字です。値0は^ @として出力され、値127は^?として出力されました。

2
RonJohn

どこに記載されているか、このページにはすべての制御文字がリストされており、制御キーを使用して入力/表示する方法が記載されています(ただし、最初の文字は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に到達すると、[\]^_を使用します。

それはSUBとしてCtrl-Zをリストしますが、DOSおよびcmdプロンプトではEOFであり、技術者ユーザーとしてcopy con a.aを実行するときに使用します。ここでa.aはファイルです。あなたはテキストを入力してそれをCtrl-Zで終了しますが、おもしろいことにEOFマーカーは入力しません。しかし、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

1
barlop