Tại sao các nhân vật đặc biệt như xe ngựa quay trở lại, được đại diện như là ^ ^ M '?


93

Tại sao được ^Msử dụng để đại diện cho lợi nhuận vận chuyển trong VIM và các bối cảnh khác?

Tôi đoán đó Mlà chữ cái thứ 13 của bảng chữ cái Latinh và lợi nhuận vận chuyển là \x0Dhoặc số thập phân 13. Đây có phải là lý do? Là đại diện này được ghi nhận ở bất cứ đâu?

Tôi nhận thấy rằng Tab được đại diện bởi ^I, đó là chữ cái thứ chín của bảng chữ cái Latinh. Ngược lại, Tab là \x09hoặc thập phân 9, hỗ trợ lý thuyết của tôi đã nêu ở trên. Tuy nhiên, nơi này có thể được ghi nhận là thực tế?


1
Ngoài ra, hãy nhớ rằng dos / windows sử dụng "0x0d 0x0a", cũng được ghi chú là "CR LF". Nhưng unix / linux chỉ sử dụng "0x0a" hoặc "LF". Vì vậy, khi bạn mở một tài liệu windows trong linux, nó sẽ phát hiện thêm "CR" và khi bạn mở một tài liệu linux trong windows thì nó không phát hiện ra các dòng mới.
LatinSuD

3
Ký hiệu dấu mũ @LatinSuD (và việc sử dụng phím Ctrl tương ứng) liên quan trực tiếp đến bộ điều khiển C0 (phần lịch sử của ASCII) và không biết liệu một hệ điều hành hoặc chương trình cụ thể có sử dụng một phần của bộ đó để thể hiện các dòng mới hay bất cứ thứ gì khác Tương tự, cho dù ^Hxóa một ký tự hoặc cho phép in đè (như n^H~cách tạo lỗi thời) hoặc bất kỳ việc sử dụng thực tế nào khác của ký tự điều khiển đều tách biệt với ký hiệu dấu mũ.
Jon Hanna

11
mã cũ ... Tôi không thể nhớ mã gốc, nhưng ctrl-G rung chuông!
Brian Drumond

3
@OlivierDulac không, ^ M chính xác một vận chuyển trở lại, giống như ^ J chính là một dòng nguồn cấp dữ liệu. Mặc dù các HĐH khác nhau có quan điểm khác nhau về việc liệu nguồn cấp dữ liệu và / hoặc vận chuyển trở lại hay thứ gì khác (như ký tự Newline được sử dụng bởi một số nhân vật IBM nhưng không phải là một phần của di sản lịch sử của một số HĐH khác) đại diện cho một dòng mới trong tệp văn bản và trong khi một số chương trình sau đó đã ghi đè rằng theo các cách khác nhau, bản thân U + 000D vẫn là trả về vận chuyển, bất kể các hệ điều hành sau này như Unix hay DOS đã quyết định làm gì với nó. (Tất nhiên, gọi nó là ...
Jon Hanna

1
@OlivierDulac ... U + 000D là phổ biến, vì tên đó xuất hiện với Unicode vào những năm 1990, nhưng điều đó hoàn toàn tham chiếu mã khi nó tồn tại trong ASCII vào năm 1963, qua đó như đã tồn tại trong mã Baudot được sửa đổi của Murray năm 1901 . Murray đã giải quyết các vấn đề liên quan đến việc di chuyển giấy xung quanh, với cùng các công cụ được sử dụng trong khái niệm "tệp văn bản" trong nhiều thập kỷ sau đó. Đóng đinh vít vào một cái gì đó giống như móng tay, và nó vẫn là một ốc vít. Sử dụng LF và / hoặc CR để thể hiện phần cuối của một dòng trong tệp văn bản và chúng vẫn là các nguồn cấp dữ liệu và trả về vận chuyển.
Jon Hanna

Câu trả lời:


115

Tôi tin rằng những gì OP thực sự hỏi về được gọi là Ký hiệu Caret .

Ký hiệu dấu mũ là ký hiệu cho các ký tự điều khiển không thể in được trong mã hóa ASCII. Ký hiệu bao gồm một dấu mũ (^) theo sau là chữ in hoa; bản tóm tắt này là viết tắt của mã ASCII có giá trị số tương đương với giá trị số của chữ cái. Ví dụ, ký tự EOT có giá trị 4 được biểu thị là ^ D vì D là chữ cái thứ 4 trong bảng chữ cái. Ký tự NUL có giá trị 0 được biểu thị là ^ @ (@ là ký tự ASCII trước A). Ký tự DEL có giá trị 127 thường được biểu thị là ^?, Bởi vì ASCII '?' là trước '@' và -1 giống như 127 nếu bị che thành 7 bit. Một công thức thay thế của bản dịch là ký tự in được tìm thấy bằng cách đảo ngược bit thứ 7 của mã ASCII

Danh sách đầy đủ các ký tự điều khiển ASCII cùng với ký hiệu dấu mũ có thể được tìm thấy ở đây

Về vim và các trình soạn thảo văn bản khác: Thông thường bạn sẽ chỉ thấy ^ M nếu bạn mở tệp văn bản có định dạng Windows (CRLF) trong trình chỉnh sửa dự kiến ​​kết thúc dòng Linux (LF). 0x0A được hiển thị dưới dạng ngắt dòng, 0x0D ngay trước khi được in là ^ M. Hầu hết thời gian, cài đặt mặc định của trình chỉnh sửa bao gồm 'tự động nhận ra kết thúc dòng'.


1
Tôi luôn tự hỏi thứ đó được gọi là gì ...
smci

5
Công ước này quay trở lại ít nhất là vào những năm 1970; Lần đầu tiên tôi nhìn thấy nó trên hệ điều hành TOPS-10 nhưng nó có thể đã tồn tại trước đó. Đối với những gì nó có giá trị, trên các thiết bị đầu cuối ASCII cũ hơn, ký tự hiện được hiển thị dưới dạng dấu mũ thực sự là một mũi tên hướng lên, do đó, đây có nguồn gốc là "ký hiệu uparrow".
keshlam

15
Điều này được tích hợp một cách rõ ràng vào thiết kế ASCII để phím Ctrl chỉ bật bit 7.
OrangeDog

2
Nó không chỉ được sử dụng với các chữ cái. Tôi sẽ không định nghĩa nó là ký tự điều khiển với "giá trị số của chữ cái" mà là "xor 64". Nói cách khác, ^A0x41 xor 0x40, hoặc 0x01^?0x3F xor 0x40, hoặc 0x7F.
R ..

1
Ascii DEL (^?) Không liên quan gì đến phím xóa. Đó thực sự là mã tiêu chuẩn được tạo bởi <---khóa (cũng khó hiểu, được gọi là backspace) trên các thiết bị đầu cuối giống như VT100.
R ..

22

Đó chính xác là lý do.

ASCII định nghĩa các ký tự 0-31 là mã kiểm soát không in. Đây là một trích xuất từ ascii(7)trang hướng dẫn từ một hệ thống Linux ngẫu nhiên ( man ascii), lên đến và bao gồm 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)    

Thông thường các ký tự này được tạo ra Controlvà chữ cái liên quan đến ký tự được yêu cầu. Teletypes và bàn phím thiết bị đầu cuối sớm có chữ 'BELL' được viết phía trên Gphím vì lý do này.

Tài liệu tiêu chuẩn xác định ASCII là ASA X3.4-1963 , được xuất bản bởi Hiệp hội Tiêu chuẩn Hoa Kỳ năm 1963. Tôi không thể tìm thấy tài liệu gốc trên trang web của họ, nhưng trích xuất từ ​​tài liệu gốc này cho thấy bảng ký tự, bao gồm các mã kiểm soát ở trên.


4
Cảm ơn bạn. Mặc dù nhiều thông tin, câu trả lời này không chứa câu trả lời cho câu hỏi.
dotancohen

1
Câu trả lời được ẩn trong đoạn thứ hai: ^Mlà tốc ký cho Control-M. Trên thiết bị đầu cuối, bạn sẽ nhấn phím Control cùng với phím M để gửi ASCII kode 0x0D còn được gọi là trở về vận chuyển.
Martin Liversage

14

Ký hiệu quay trở lại Teletypes ASCII sớm nhất (ca 1963). Có một khóa CTRL đã bật bit 0x40 để CTRL-M (trả lại vận chuyển) sẽ là 0D thay vì 4D, CTRL-G (chuông) sẽ là 07 thay vì 47, thay vào đó, CTRL-L (nguồn cấp dữ liệu mẫu) sẽ là 0C của 4C.

Không có "thiết kế" nào trong việc gán các chữ cái cụ thể cho các chức năng cụ thể, chỉ có khả năng là khi bụi được giải quyết từ việc gán mã ASCII, phím M khác một chút so với trả về vận chuyển và do đó trở về vận chuyển trở thành CTRL-M.

Đây là bức ảnh đẹp nhất tôi có thể tìm thấy của bàn phím ASR33. Như bạn có thể thấy tên nhân vật điều khiển được in bằng chữ nhỏ trên các phím alpha tương ứng.

Teletype Model 33 ASR với máy đọc / bấm băng giấy

Hình ảnh của Marcin Forgeary, Người dùng: AlanM1 (Xuất phát (cắt xén) từ Tệp: ASR-33 2.jpg ) [ CC BY 2.0 ], qua Wikimedia Commons

Phím M không có ký hiệu trên đó vì có phím "TRẢ LẠI" chuyên dụng, vì vậy CTRL-M là dự phòng.


2
Ở một mức độ nào đó, mức độ mà chúng ta vẫn bị ràng buộc bởi các lựa chọn thiết kế được tạo ra cho những gì có vẻ như các hệ thống cổ xưa là khá đáng ngạc nhiên - tôi đoán về sự phản ánh rằng (a) cách đây không lâu, đó chỉ là tốc độ thay đổi tạm thời thật đáng kinh ngạc, và (b) nếu đủ các quyết định thiết kế được đưa ra, một số trong số họ (đặc biệt là những quyết định không gây ra cho mọi người đủ vấn đề) chắc chắn sẽ tồn tại lâu sau khi những lý do khiến chúng biến mất vào bộ nhớ. Vẫn còn một cảm giác kỳ lạ khi nhìn lại lịch sử của một số trong những điều này.
Stuart Golodetz

2
@StuartGolodetz - Thật ra, tôi thấy yên tâm một cách kỳ lạ. Nhưng sau đó tôi nhớ khi Teletypes là "công nghệ tiên tiến". (Nhân tiện, Teletype ASR-33 rất đáng chú ý vì sự đơn giản thanh lịch của nó. Tôi chỉ ước rằng các hệ thống máy tính "hiện đại" cũng được thiết kế tốt.)
Daniel R Hicks

1
Điều này thật hấp dẫn nhưng điều tôi không hiểu là .. tại sao tất cả mọi thứ họ quyết định máy đánh chữ này cần một tiếng chuông?
Thuyền trưởng

4
@CaptainCodeman - Khi bạn truyền một thông điệp quan trọng, bạn sẽ rung chuông để thu hút sự chú ý của nhà điều hành ở đầu bên kia.
Daniel R Hicks

2
Thật thú vị khi lưu ý rằng phím Ctrl tồn tại cho đến ngày nay trên bàn phím PC.
Daniel R Hicks

3

Dấu mũ (^) chỉ là viết tắt để viết giữ phím Control - CTRL xuống.

Trong những ngày xưa cũ, bạn có thể nhập trực tiếp các mã này (xem bên trên), phím Ctrl + G (^ G) sẽ làm cho thiết bị đầu cuối hoạt động "ding"

Khi bạn muốn thêm CR trong Vim, bạn sử dụng phím Ctrl + tab M etc = Ctrl + I


Thuật ngữ bạn đang tìm kiếm là digraph , có nghĩa là hai ký tự đại diện cho một ký tự. Cụ thể, các bản vẽ sơ đồ và chữ viết tắt được sử dụng để thể hiện các ký tự không thể in được. Trong lịch sử, chúng cũng đã được sử dụng cho các ký tự không xuất hiện trên bàn phím, mặc dù với GUI và bàn phím hiện đại, đây không phải là vấn đề nên việc sử dụng này là cổ xưa hơn.

"Trong những ngày xưa tốt đẹp" vẫn còn cho đến ngày nay, với ^ C và ^ D là chức năng hoàn hảo. Lý do duy nhất mà ^ G không tạo ra thiết bị đầu cuối nữa là hầu hết các trình giả lập thiết bị đầu cuối đã tắt phản hồi đó.
SevenSidedDie

2

Sự cần thiết cho một số cách trực quan để hiển thị những gì theo định nghĩa các ký tự không in được.

Vì vậy, một người nào đó vào đầu những năm 1970 (hoặc có thể sớm hơn) (tôi nhớ đã thấy nó trên CP / M và ai đó đã đề cập đến TOPS) đã quyết định rằng "chữ cái dấu cộng" sẽ là biểu tượng cho 26 ký tự điều khiển ASCII không thể in được với các giá trị 1 đến 26. Giá trị 0 là / đã được in dưới dạng ^ @ và giá trị 127 là ^?.


1

Tài liệu này được ghi ở đâu, trang này liệt kê mọi ký tự điều khiển, với cách nhập / thể hiện nó bằng phím điều khiển (mặc dù ký tự đầu tiên, ký tự 0, không có biểu diễn khóa điều khiển) và nó không có gì cho ký tự 127. Và nó cung cấp nguồn ở phía dưới

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

Người ta có thể tự hỏi, có 33 ký tự điều khiển (ký tự ASCII 0-31 nên 32 ký tự, + ký tự 127. vì vậy, = 33 ký tự) Làm thế nào chúng sẽ được thể hiện khi chỉ có 26 chữ cái trong bảng chữ cái. Chà, nó sử dụng Ctrl-A cho ký tự Ascii 1, Ctrl-Z cho ký tự ascii 26, và khi nó đạt đến Ctrl-Z, nó sử dụng [ \ ] ^ _

Nó liệt kê Ctrl-Z là SUB, mặc dù trong DOS và dấu nhắc cmd là EOF và là người dùng kỹ thuật, bạn sử dụng nó khi thực hiện tệp của bạn copy con a.aở đâu a.a. Bạn nhập văn bản và chấm dứt nó bằng Ctrl-Z, đủ vui là không nhập điểm đánh dấu EOF. Nhưng nó nói với CMD rằng đó là phần cuối của tệp nên CMD viết nó.

Trang web cs.tut.fi đó cung cấp điều này dưới dạng nguồn
http://www.wps.com/texts/codes/X3.4-1963/index.html

nhưng đó là một liên kết bị hỏng, nhưng có sẵn trên archive.org nó ở dạng JPG

Mã tiêu chuẩn Mỹ để trao đổi thông tin
Tiêu chuẩn ASA X3.4-1963

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


Hầu hết các ký tự điều khiển là vô nghĩa, nhưng ngay cả một số ký tự có ý nghĩa như Ctrl-I tôi không chắc bạn có thể thực hiện Ctrl-I ở đâu và nhận một tab.
barlop

1
không có nhân vật điều khiển nào là vô nghĩa. Nhiều trong số chúng không được sử dụng trong nhiều ngữ cảnh, nhưng mỗi một đều có ít nhất một nghĩa.
Jon Hanna

@JonHanna Tất nhiên tôi không có nghĩa là chúng vô nghĩa (thì quá khứ). Nhưng R.C đã vô nghĩa trong nhiều thập kỷ, tức là chúng có ý nghĩa ban đầu từ các eons trước đây, công nghệ không còn chạy, là (hầu hết các ký tự) ngày nay vô nghĩa w / hiện tại và thậm chí hơi cũ tech.n nếu bất kỳ đang được đưa vào sử dụng hiện đại, nó không nhiều. Có một danh sách ở đây en.wikipedia.org/wiki/Control_character của những người đang sử dụng phổ biến 0,7,8,9,10,11,12,13,127. 9/33 vì vậy những người khác (24 người trong số họ) sẽ rất hiếm khi hoặc không chết vì họ không được sử dụng trong nhiều thập kỷ mà họ đã sử dụng
barlop

Associated Press vẫn sử dụng ANPA-1312 sử dụng 1 Hay4, 6 & 16 được sử dụng để bắt đầu mọi kết nối TCP / IP. Các máy in hiện đại (trong số các loại khác) vẫn sử dụng 17 & 19. Cùng với những người bạn đề cập, chúng tôi có khá nhiều phần trăm trong số chúng được bảo hiểm mà không thực sự cố gắng. Tôi sẽ cấp cho bạn họ không nằm trong hạng nặng sử dụng, nhưng họ không phải là đã chết trong hai.
Jon Hanna

1
@barlop Bạn có thể làm ^Imột tab trong bash tiêu chuẩn: gõ ls ~/^I^Ivà bạn sẽ thấy tất cả các thư mục trong thư mục chính của bạn.
wchargein

0

Bạn có thể thấy tất cả các Controlánh xạ ký tự ASCII không thể thay đổi trong bảng này .


5
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Bằng cách đó, nếu trang được liên kết thay đổi hoặc trở nên không hợp lệ vì bất kỳ lý do gì, câu trả lời vẫn sẽ hữu ích cho khách truy cập vào Siêu người dùng.
một CVn

3
Cảm ơn bạn. Mặc dù nhiều thông tin, câu trả lời này không chứa câu trả lời cho câu hỏi.
dotancohen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.