"캐리지 리턴"과 같은 특수 문자가 "^ M"으로 표시되는 이유는 무엇입니까?


93

^MVIM 및 기타 컨텍스트에서 캐리지 리턴을 나타내는 데 왜 사용됩니까?

내 생각 엔 M라틴 알파벳의 13 번째 문자이고 캐리지 리턴은 \x0D십진수 13입니다. 이것이 이유입니까? 이 표현은 어디에나 문서화되어 있습니까?

Tab은 ^I라틴 알파벳의 아홉 번째 문자 인로 표시됩니다. 반대로 Tab은 \x09또는 decimal 9이며 위에서 언급 한 이론을 지원합니다. 그러나 이것은 어디에서 사실로 문서화 될 수 있습니까?


1
또한 dos / windows는 "0x0d 0x0a"( "CR LF"라고도 함)를 사용합니다. 그러나 유닉스 / 리눅스는 "0x0a"또는 "LF"만 사용합니다. 따라서 Linux에서 Windows 문서를 열면 추가 "CR"이 감지되고 Windows에서 Linux 문서를 열면 새 줄이 감지되지 않습니다.
LatinSuD

3
@LatinSuD 캐럿 표기법 (및 Ctrl-key의 해당 사용)은 C0 컨트롤 세트 (역사적으로 ASCII의 일부)와 직접 관련이 있으며 주어진 운영 체제 나 프로그램이 새로운 라인 또는 기타를 나타내는 데 그 세트의 일부를 사용하는지 여부 그밖에. 마찬가지로, ^H문자를 삭제하거나 중복 인쇄를 허용 하는지 (예 : n^H~더 이상 사용하지 않는 방법) 또는 제어 문자를 실제로 사용 하는 것은 캐럿 표기법과 별개입니다.
Jon Hanna

11
오래된 코드 ... 나는 원래 코드를 기억할 수 없지만 ctrl-G는 종을 울립니다!
Brian Drummond

3
@OlivierDulac 아니오, ^ J는 정확히 줄 바꿈처럼 ^ M 정확히 캐리지 리턴입니다. 다른 OS는 줄 바꿈 및 / 또는 캐리지 리턴 또는 다른 것 (일부 IBM 문자는 사용하지만 ASCII의 일부는 아니므로 일부 다른 OS의 역사적 유산의 일부는 아닌 뉴 라인 문자)에 대해 다른 견해를 가졌습니다. 텍스트 파일에 줄 바꿈을 표시하고 일부 프로그램은 다른 방식으로 대체했지만 U + 000D 자체는 여전히 캐리지 리턴입니다. 유닉스 또는 DOS와 같은 이후의 운영 체제는 그와 관련하여 결정했습니다. (물론, 그것을 부르는 ...
Jon Hanna

1
@OlivierDulac ... U + 000D는 1990 년대에 유니 코드를 사용하기 때문에 이름이 풍부하지만 1963 년 ASCII에 존재했던 코드를 1901 년에 Murray의 수정 된 Baudot 코드에 존재했던 코드와 매우 정확하게 참조합니다. Murray는 수십 년 후 "텍스트 파일"개념에서 사용 된 것과 동일한 도구를 사용하여 종이 이동과 관련된 문제를 해결하고있었습니다. 나사를 못과 같은 것으로 망치십시오. 그것은 여전히 ​​나사입니다. LF 및 / 또는 CR을 사용하여 텍스트 파일에서 줄의 끝을 나타내며 여전히 줄 바꿈 및 캐리지 리턴입니다.
Jon Hanna

답변:


115

OP가 실제로 요구 한 것은 Caret Notation 이라고 합니다.

캐럿 표기법은 ASCII 인코딩의 인쇄 할 수없는 제어 문자에 대한 표기법입니다. 표기는 캐럿 (^)과 대문자로 구성됩니다. 이 digraph는 문자의 숫자 값과 동등한 숫자 값을 갖는 ASCII 코드를 나타냅니다. 예를 들어, 값이 4 인 EOT 문자는 D가 알파벳의 네 번째 문자이므로 ^ D로 표시됩니다. 값이 0 인 NUL 문자는 ^ @로 표시됩니다 (@는 A 이전의 ASCII 문자 임). 값이 127 인 DEL 문자는 일반적으로 ^?로 표시됩니다. ASCII '?' 는 '@'앞에 있고 -1은 7 비트로 마스킹 된 경우 127과 같습니다. 번역의 대체 공식은 ASCII 코드의 7 비트를 반전시켜 인쇄 된 문자를 찾는 것입니다.

캐럿 표기법과 함께 ASCII 제어 문자의 전체 목록은 여기 에서 찾을 수 있습니다.

vim 및 기타 텍스트 편집기와 관련하여 : Linux 줄 끝 (LF)이 필요한 편집기에서 Windows 형식 (CRLF) 텍스트 파일을 열면 ^ M 만 표시됩니다. 0x0A는 줄 바꿈으로 렌더링되며 0x0D는 ^ M으로 인쇄되기 직전입니다. 대부분의 경우 편집기 기본 설정에는 '자동으로 줄 끝 인식'이 포함됩니다.


1
나는 항상 그 일이 무엇인지 궁금했습니다.
smci

5
이 협약은 적어도 1970 년대로 거슬러 올라갑니다. 처음에 TOPS-10 운영 체제에서 보았지만 이전에 존재했을 수도 있습니다. 그 가치가있는 것은, 오래된 ASCII 터미널에서 현재 캐럿으로 표시되는 문자는 실제로 위쪽을 가리키는 화살표이므로 "위쪽 화살표"로 시작되었습니다.
keshlam

15
이것은 Ctrl 키가 비트 7을 토글하도록 ASCII 디자인에 명시 적으로 내장되어 있습니다.
OrangeDog

2
문자에만 사용되지는 않습니다. "문자의 숫자 값"이있는 제어 문자가 아니라 "xor 64"로 정의합니다. 즉, ^Ais 0x41 xor 0x40또는 is 0x01^?is 0x3F xor 0x40또는 0x7F입니다.
R ..

1
Ascii DEL (^?)은 삭제 키와 관련이 없습니다. 실제로 <---VT100과 같은 터미널 에서 키에 의해 생성 된 표준 코드입니다 (혼란스럽게도 백 스페이스라고도 함).
R ..

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 년 미국 표준 협회 (American Standards Association)에서 출판했습니다. 웹 사이트에서 원본 문서를 찾을 수 없지만 원본 문서에서 추출한 내용은 다음을 포함하여 문자표를 보여줍니다. 위의 제어 코드.


4
감사합니다. 유익하지만이 답변에는 질문에 대한 답변이 포함되어 있지 않습니다.
dotancohen

1
답은 두 번째 단락에 숨겨져 ^M있습니다. Control-M의 약어입니다. 터미널에서 M 키와 함께 Control 키를 누르면 캐리지 리턴이라고도하는 ASCII kode 0x0D가 전송됩니다.
Martin Liversage 2018

14

이 표기법은 가장 초기의 ASCII Teletypes (ca 1963)로 돌아갑니다. CTRL-M (캐리지 리턴)은 4D 대신 0D, CTRL-G (벨)는 47 대신 07, CTRL-L (양식 피드)은 0C가되도록 0x40 비트를 토글하는 CTRL 키가있었습니다. 4C의.

특정 문자를 특정 기능에 할당 할 때 "디자인"이 없었습니다. 먼지가 ASCII 코드를 할당하여 설정했을 때 M 키가 캐리지 리턴과 약간 다르므로 캐리지 리턴이 CTRL-M이되었습니다.

여기 ASR33 키보드 중에서 가장 좋은 사진이 있습니다. 보시다시피 제어 문자 이름은 해당 알파 키에 작은 문자로 인쇄됩니다.

종이 테이프 펀치 / 리더가 장착 된 텔레타이프 모델 33 ASR

Marcin Wichary, User : AlanM1의 이미지 ( File : ASR-33 2.jpg 에서 파생 (잘라 냄 )) [ CC BY 2.0 ], Wikimedia Commons를 통해

전용 "RETURN"키가 있으므로 MRL에는 표기법이 없으므로 CTRL-M은 중복됩니다.


2
어떤 수준에서 우리가 여전히 고대 시스템처럼 보이는 것에 대한 디자인 선택에 의해 구속되는 정도는 놀랍습니다. (a) 오래 전이 아니라고 생각합니다. 그것은 단지 중간에 변화의 속도 일뿐입니다. (b) 충분한 설계 결정이 내려진 경우, 일부 (특히 사람들에게 충분한 문제를 유발하지 않는) 결정은 메모리에 이유가 사라진 후에 오래 지속될 수밖에 없습니다. 그래도 이러한 것들 중 일부의 역사를 되돌아 보는 이상한 느낌.
Stuart Golodetz

2
@StuartGolodetz-사실, 이상하게도 안심입니다. 그러나 Teletypes가 "고급 기술"이었던시기를 기억합니다. (텔레타이프 ASR-33은 매우 단순
Daniel R Hicks

1
이것은 매혹적이지만 내가 이해하지 못하는 것은 .. 왜이 타자기가 종을 필요로하는지 결정한 이유는 무엇입니까?
CaptainCodeman 2018 년

4
@CaptainCodeman-중요한 메시지를 전송했을 때 종을 울려 상대방의주의를 끌 것입니다.
Daniel R이

2
Ctrl 키는 PC 키보드에서도 현재까지 유지되고 있습니다.
Daniel R이

3

캐럿 (^)은 Ctrl 키를 누른 상태로 작성하는 데 사용되는 약어입니다.

옛날에는이 코드를 직접 입력 할 수있었습니다 (위 참조). Ctrl 키 + G (^ G)는 터미널을 "딩"하게합니다.

Vim에 CR을 추가하려면 Ctrl 키 + M 등 탭 = Ctrl + I를 사용하십시오.


찾고있는 용어는 digraph 이며 한 문자를 나타내는 두 문자를 의미합니다. 특히, digraphs 및 trigraphs는 인쇄 할 수없는 문자를 나타내는 데 사용됩니다. 현대 GUI와 키보드에서는 이것이 문제가되지 않기 때문에 키보드에 표시되지 않는 문자에도 사용되었습니다.

^ C와 ^ D가 완벽하게 기능하는 "좋은 옛날"은 오늘날에도 여전히 유효합니다. ^ G가 더 이상 터미널 딩을하지 않는 유일한 이유는 대부분의 터미널 에뮬레이터가 해당 응답을 해제했기 때문입니다.
SevenSidedDie

2

정의 할 수없는 문자를 시각적으로 표시하는 시각적 방법이 필요합니다.

따라서 1970 년대 초 (또는 이전의) 누군가 (CP / M에서 본 것을 기억하고 다른 사람들이 이미 TOPS를 언급 한 것을 기억합니다)는 "캐럿 플러스 문자"는 인쇄 할 수없는 26 개의 ASCII 제어 문자에 대한 값이 값으로 결정했습니다. 값 0은 ^ @로 인쇄되고 값 127은 ^?로 인쇄됩니다.


1

문서화 된 위치는이 페이지에 모든 제어 문자와 제어 키를 사용하여 입력 / 표현하는 방법 (첫 번째 키, ASCII 문자 0, 제어 키 표현 없음) 및 문자 127에 대한 내용이 없습니다. 하단에 소스를 제공합니다

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

33 개의 제어 문자 (ASCII 문자 0-31 문자, 32 문자, + 문자 127 문자, = 33 문자)가 있다고 가정하면 알파벳에 26 자만있는 것으로 표시되는 방법이 궁금합니다. 글쎄, 그것은 ASCII 문자 1에 Ctrl-A, ASCII 문자 26에 Ctrl-Z를 사용하고 일단 Ctrl-Z에 도달하면 [ \ ] ^ _

DOS 및 cmd 프롬프트는 EOF이지만 Ctrl-Z는 SUB로 나열되며 파일 copy con a.a위치를 수행 할 때 사용하는 기술자 a.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

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


대부분의 제어 문자는 의미가 없지만 Ctrl-I와 같은 의미를 가진 문자도 Ctrl-I를 수행하고 탭을 어디에서 얻을 수 있는지 잘 모르겠습니다.
barlop

1
제어 문자 중 아무 것도 의미가 없습니다. 그것들 중 많은 것이 많은 맥락에서 사용되지 않지만, 모든 것은 하나 이상의 의미를 가지고 있습니다.
Jon Hanna

@JonHanna 물론 나는 그들이 의미가 없다는 것을 의미하지는 않습니다 (그러나 과거 시제) .R. 수십 년 동안 의미가 없었습니다. 즉, 그들은 예전부터 원래의 의미를 가지고 있었으며, 더 이상 실행되지 않는 기술은 (대부분의 문자) 오늘날 의미가 없습니다. 현재 / 약간 오래된 tech.n 현대적인 용도로 사용되는 경우 많지 않습니다. 여기 에 일반적으로 사용되는 0,7,8,9,10,11,12,13,127의 en.wikipedia.org/wiki/Control_character 목록이 있습니다 . 9/33 그래서 다른 사람들 (그들 중 24 명)은 그들이 사용했던 수십 년 동안 기계를 사용하지 않는 익살
스러운 동물

AP 통신은 여전히 ​​1 ~ 4, 6, 16을 사용하는 ANPA-1312를 사용하여 모든 TCP / IP 연결을 시작합니다. 현대 프린터 (다른 곳에서도)는 여전히 17 & 19를 사용합니다. 언급 한 프린터와 함께, 우리는 실제로 시도하지 않고 상당 부분을 커버했습니다. 나는 그들이 많이 사용 하지 않지만 당신도 죽지 않았다는 것을 당신에게 줄 것 입니다.
Jon Hanna

1
@barlop ^I표준 bash : type에서 탭을 수행 ls ~/^I^I하면 홈 디렉토리에 모든 폴더가 표시됩니다.
wchargin

0

테이블 Control에서 Pripriable ASCII 문자를 매핑 할 수 있습니다 .


5
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다. 이렇게하면 어떤 이유로 든 링크 된 페이지가 변경되거나 유효하지 않은 경우에도 여전히 수퍼 유저 방문자에게 유용한 답변이 될 것입니다.
CVn

3
감사합니다. 유익하지만이 답변에는 질문에 대한 답변이 포함되어 있지 않습니다.
dotancohen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.