Neden “satır başı” gibi özel karakterler “^ M” olarak temsil ediliyor?


93

Neden ^MVIM'de ve diğer bağlamlarda bir satırbaşını temsil etmek için kullanılır?

Tahminime Mgöre, Latin alfabesinin 13. harfi ve satır başı \x0Dya da ondalık sayı 13. Sebep bu mu? Bu temsil herhangi bir yerde belgeleniyor mu?

^ILatin alfabesinin dokuzuncu harfi olan Tab'ın temsil ettiğini fark ettim . Bunun tersine, Tab yukarıda belirtilen teorimi destekleyen \x09ondalık 9sayıdır. Ancak, bu gerçek olarak nerede belgelenebilir?


1
Ayrıca, dos / pencerelerin "CR LF" olarak da belirtilen "0x0d 0x0a" kullandığını unutmayın. Ancak unix / linux sadece "0x0a" veya "LF" kullanır. Bu nedenle linux'ta bir windows belgesini açtığınızda fazladan "CR" algılar ve pencerelerde bir linux belgesini açtığınızda yeni çizgiler algılamaz.
LatinSuD

3
@LatinSuD şapka notası (ve Ctrl-key'in karşılık gelen kullanımı), belirli bir işletim sisteminin veya programın, bu satırın bir kısmını yeni satırları temsil etmek için kullanıp kullanmadığını veya herhangi bir şeyi kullanıp kullanmamakta ve doğrudan kullanmakla ilgilidir. Başka. Benzer şekilde, ^Hbir karakteri silmekte veya üst baskıya izin vermek (örneğin, n^H~ñ üretmek için eski bir yol gibi) veya kontrol karakterinin başka herhangi bir fiili kullanımı karet gösteriminden ayrıdır.
Jon Hanna

11
eski olan ... Orijinal kodu hatırlayamıyorum, ama ctrl-G bir zil çalıyor!
Brian Drummond

3
@OlivierDulac no ^ M olduğunu ^ J tam olarak bir çizgi besleme olduğu gibi, tam olarak bir satır başı. Farklı işletim sistemleri satır besleme ve / veya satır başı veya başka bir şey (örneğin, bazı IBM karakterleri tarafından kullanılan, ancak ASCII'nin bir parçası olmayan ve bu nedenle diğer bazı işletim sistemlerinin tarihi mirasının bir parçası olmayan) kullanan yeni bir karakter olup olmadığı konusunda farklı görüşlere sahip olsalar da Bir metin dosyasında yeni bir satırı temsil eder ve bazı programlar daha sonra geçersiz kılınırken, Unix veya DOS gibi işletim sistemleri ne olursa olsun onunla ne yapmaya karar verdiyse U + 000D'nin kendisi hala bir satır başıdır. (Tabii ki, onu çağırıyor ...
Jon Hanna

1
@OlivierDulac ... U + 000D proleptiktir, çünkü bu isim 1990'larda Unicode'la birlikte gelirdi, ancak bu kesinlikle 1963'te ASCII'de olduğu gibi, 191'de Murray'in değiştirilmiş Baudot kodunda olduğu gibi, kesinlikle kodu referans alıyor. Murray, uzun yıllar sonra "metin dosyası" kavramında kullanılan aynı araçlarla, kağıt etrafında dolaşmakla ilgili problemleri çözüyordu. Bir çivi gibi bir şey içine bir vida çekiç ve hala bir vida. Bir metin dosyasındaki bir satırın sonunu temsil etmek için LF ve / veya CR kullanın ve bunlar hala satır beslemeleri ve satırbaşlarıdır.
Jon Hanna

Yanıtlar:


115

OP'nin gerçekte sorduğu şeyin Caret Notation olarak adlandırıldığına inanıyorum .

Şapka işareti, ASCII kodlamasında yazdırılamayan kontrol karakterleri için bir gösterimdir. Gösterim, bir büyük harften sonra gelen bir harf (^); bu yazı, harfin sayısal değerine eşdeğer sayısal değere sahip ASCII kodunu ifade eder. Örneğin, 4 değerine sahip EOT karakteri ^ D olarak gösterilir, çünkü D alfabedeki 4. harfdir. 0 değeri olan NUL karakteri ^ @ (@ A'dan önceki ASCII karakteridir) olarak temsil edilir. 127 değerine sahip DEL karakteri genellikle ^? Olarak temsil edilir, çünkü ASCII '?' '@' öncesidir ve -1, 7 bite maskelenmişse 127 ile aynıdır. Çevirinin alternatif bir formülasyonu, yazdırılan karakterin ASCII kodunun 7. bitini tersine çevirerek bulunmasıdır.

ASCII kontrol karakterlerinin tam listesi, şapka notasyonu ile birlikte burada bulunabilir .

Vim ve diğer metin editörleri hakkında: Genellikle Windows formatlı (CRLF) bir metin dosyasını, Linux satır sonları (LF) bekleyen bir düzenleyicide açarsanız ^ M göreceksiniz. 0x0A, bir satır sonu olarak gösterilir; 0x0D, ^ M olarak basılmadan hemen önce. Çoğu zaman, editör varsayılan ayarları 'satır sonlarını otomatik olarak tanı' özelliğini içerir.


1
Her zaman o şeyin ne
dendiğini

5
Bu sözleşme en azından 1970'lere dayanıyor; İlk önce TOPS-10 işletim sisteminde gördüm ama daha önce de var olmuş olabilir. Buna değer, eski ASCII terminallerinde, şimdi bir şapka işareti olarak gösterilen karakter aslında yukarı dönük bir okdu, bu yüzden bu "en tepeli gösterim" olarak ortaya çıktı.
keshlam

15
Bu açıkça ASCII tasarımına dahil edilmiştir, böylece Ctrl tuşu bit 7'yi değiştirir.
OrangeDog 5:14

2
Sadece harflerle kullanılmaz. Bunu "harfin sayısal değeri" olan kontrol karakteri olarak değil, "xor 64" olarak tanımlarım. Başka bir deyişle, ^Abir 0x41 xor 0x40ya da 0x01ve ^?bir 0x3F xor 0x40ya 0x7F.
R ..

1
Ascii DEL (^?), Silme tuşu ile ilgisi yoktur. Aslında <---VT100 benzeri terminallerde anahtar (ayrıca kafa karıştırıcı, geri adım adı verilen) tarafından üretilen standart koddur .
R. ..

22

Bu tam olarak sebep.

ASCII, 0-31 karakterlerini yazdırma dışı kontrol kodları olarak tanımlar. Burada ascii(7)kılavuz sayfasından man asciiCR (13) 'e kadar olan rastgele bir Linux sisteminden ( ) bir alıntı :

   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)    

Geleneksel olarak bu karakterler Controlve istenen karakterle ilgili harf ile üretilir . Teletypes ve erken terminal klavyeleri, Gbu nedenle tuşun üzerinde 'BELL' yazıyordu .

ASCII'yi tanımlayan standartlar belgesi, 1963'te Amerikan Standartlar Birliği tarafından yayınlanan ASA X3.4-1963'tür . Orijinal belgeyi web sitelerinde bulamıyorum, ancak orijinal belgeden bu alıntı karakter tablosu da dahil olmak üzere karakter tablosunu gösterir. Yukarıdaki kontrol kodları.


4
Teşekkür ederim. Bilgilendirici olsa da, bu cevap soruya cevap içermiyor.
dotancohen

1
Cevap ikinci paragrafta gizlidir: ^MControl-M için kısa yoldur. Terminalde, Taşıyıcı dönüşü olarak da bilinen ASCII kode 0x0D'yi göndermek için Kontrol tuşuna M tuşuyla birlikte basarsınız.
Martin Liversage

14

Gösterim, en eski ASCII Teletypes'e geri döner (yaklaşık 1963). CTRL-M (satır başı) 4D yerine 0D, CTRL-G (zil) 47 yerine 07, CTRL-L (form feed) yerine 0C olacak şekilde değiştirilen bir CTRL anahtarı vardı. 4C'de.

Belirli fonksiyonlara belirli harfleri tahsis etmede "tasarım" yoktu, sadece ASCII kodlarını atamaktan çıkan tozun M tuşunun taşıma dönüşünden biraz farklı olması ve böylece taşıma dönüşünün CTRL-M olması ihtimali yoktu.

İşte ASR33 klavyede bulabildiğim en iyi çekim. Gördüğünüz gibi kontrol karakter adları, karşılık gelen alfa tuşlarında küçük harflerle yazdırılır.

Teletype Model 33 ASR, kağıt bant delme / okuyucu ile

Resim AlanM1 (Derived (kırpılmış) ile ilgili: Marcin Wichary, kullanıcı tarafından Dosya: ASR-33 2.jpg ) [ 2.0 CC ], ortak bir havuz deposundan ile

M tuşunun üzerinde bir notasyonu yoktur, çünkü özel bir "RETURN" tuşu vardır, bu nedenle CTRL-M gereksizdir.


2
Bir dereceye kadar, eski sistemler gibi göründüğü için yapılan tasarım seçimleriyle hala ne kadar bağlı olduğumuzun derecesi oldukça şaşırtıcı - Sanırım (a) çok uzun zaman önce değil, aradaki değişimin hızı şaşırtıcıydı ve (b) yeterli tasarım kararı verilirse, bazıları (özellikle insanlara yeterince sorun yaratmayanlar), nedenleri hafızaya kaybolduktan uzun süre sonra yapışmaya mecburdur. Yine de bu şeylerin bazılarının geçmişine bakmak için garip bir his.
Stuart Golodetz

2
@StuartGolodetz - Aslında garip bir şekilde güven verici buluyorum. Ama sonra Teletypes'in "ileri teknoloji" olduğunu hatırlıyorum. (Bu arada, Teletype ASR-33, zarif sadeliği ile dikkat çekiciydi. Yalnızca "modern" bilgisayar sistemlerinin iyi tasarlanmış olmasını diliyorum.)
Daniel R Hicks

1
Bu büyüleyici ama anlamadığım şey .. neden bu daktiloların bir zile ihtiyaç duyduğuna karar verdiler?
CaptainCodeman,

4
@ CaptainCodeman - Önemli bir mesaj ilettiğinizde, diğer ucunda operatörün dikkatini çekmek için zili çalacaksınız.
Daniel R Hicks,

2
PC klavyelerinde Ctrl tuşunun bu güne kadar devam ettiğini not etmek ilginçtir.
Daniel R Hicks,

3

(^) İşareti, CTRL tuşunu basılı tuttuğunda Kontrol tuşunu basılı tutmanız için kısa yoldur.

Eski güzel günlerde bu kodları doğrudan yazabilirsiniz (yukarıya bakın), Ctrl tuşu + G (^ G) terminali "ding" konumuna getirecektir.

Vim'de bir CR eklemek istediğinizde Ctrl tuşu + M etc tab = Ctrl + I tuşlarını kullanın.


Aradığınız terim digraph , yani bir karakteri temsil eden iki karakter. Spesifik olarak, basılmamış karakterler ve yazdırılmamış karakterleri temsil etmek için kullanılır. Tarihsel olarak, klavyede görünmeyen karakterler için de kullanılıyorlar, ancak modern GUI'ler ve klavyelerde bu daha az sorun yaratıyor, bu yüzden bu kullanım daha arkaik.

"Eski güzel günlerde" hala bugün, ^ C ve ^ D mükemmel işlevselliğe sahip. ^ G'nin artık terminal ding yapmamasının tek nedeni terminal emülatörlerinin çoğunun bu cevabı kapatmasıdır.
SevenSidedDie

2

Baskısı olmayan karakterlerin tanımı gereği ne olduğunu göstermek için bazı görsel şekillere olan ihtiyaç.

Bu yüzden, 1970'lerin başlarında (ya da belki daha erken) birileri (CP / M’de gördüğünü hatırlıyorum ve TOPS’dan daha önce bahsettiğimi hatırladım) “caret plus letter” değerlerinin yazdırılamayan 26 ASCII kontrol karakterinin sembolü olduğuna karar verdi. 1'den 26'ya. Değer 0, ^ @ olarak ve /, 127 olarak ise ^? Olarak yazdırıldı.


1

Belgelendirildiği yerde, bu sayfa her kontrol karakterini, kontrol tuşuyla nasıl girileceğini / temsil edeceğini (ilki, ascii karakter 0, kontrol tuş gösterimi olmasa da) ve karakter 127 için hiçbir şeye sahip olmasa da listeler. altındaki kaynakları sağlar

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

33 kontrol karakteri olduğu düşünülürse (ASCII karakterleri 0-31, 32 karakter, + karakter 127, böylece = 33 karakter) Acaba, alfabede sadece 26 harf olduğu için hepsinin nasıl temsil edileceği merak edilebilir. Ascii karakter 1 için Ctrl-A'yı, ascii karakter 26 için Ctrl-Z'yi ve Ctrl-Z'ye ulaştığında orada kullanır. [ \ ] ^ _

Ctrl-Z'yi SUB olarak listeler, DOS'ta ve cmd komutunda EOF olup, teknisyen kullanıcısı olarak da dosyanızın copy con a.anerede olduğunu kullanır a.a. Metni girin ve Ctrl-Z ile sonlandırın, ki yeterince EOF işaretleyicisine girmiyor. Ancak CMD'ye dosyanın sonunun geldiğini ve böylece CMD'nin yazdığını söylüyor.

Bu cs.tut.fi web sayfası bunu bir kaynak olarak verir:
http://www.wps.com/texts/codes/X3.4-1963/index.html

ama bu kopuk bir bağlantı, ama archive.org'da mevcut, JPG biçiminde

Bilgi Değişimi için Amerikan Standart Kodu
ASA standardı X3.4-1963

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


Kontrol karakterlerinin çoğu anlamsız, ancak Ctrl-I gibi anlamı olanların bile, Ctrl-I'yi nerede yapıp sekme alabileceğinizden emin değilim.
barlop

1
Kontrol karakterlerinden hiçbiri anlamsız değil. Birçoğu birçok bağlamda kullanılmaz, ancak her birinin en az bir anlamı vardır.
Jon Hanna

@JonHanna Elbette anlamsız olduklarını kastetmiyorum (geçmiş zaman) .Ama R.Onlarca on yıl boyunca anlamsız davranıyorlardı, yani yıllar önce orjinal anlamlarına sahiplerdi, artık koşmayan teknoloji, (karakterlerin çoğu) bugün anlamsız w / akım ve hatta biraz eski teknoloji. Modern kullanımlara sunuluyorsa, fazla değildir. Burada bir liste var en.wikipedia.org/wiki/ Ortak kullanımda olanların kontrolü_character 0,7,8,9,10,11,12,13,127. 9/33 böylece diğerleri (24 tanesi), nadiren kullanılabilecekti ya da hiç kullanılmadıkları yıllarca kullanılan
antikacılar

Associated Press hala 1 - 4, 6 ve 16 kullanan ANPA-1312'yi kullanıyor, her TCP / IP bağlantısını başlatmak için kullanılıyor. Modern matbaacılar (diğer hırsızların arasında) hala 17 ve 19 kullanıyorlar. Bahsettiklerinizle birlikte, gerçekten denemeden neredeyse bir kısmını kapladık. Size ağır kullanımda olmadıklarını söyleyeceğim ama onlar da ölmedi.
Jon Hanna

1
@ barlop ^IStandart bash: türündeki bir sekme için bunu yapabilirsiniz ; ls ~/^I^Igiriş dizinindeki tüm klasörleri görmelisiniz.
wchargin

0

Bu tabloda Controleşleştirilemeyen ASCII karakterlerinin tümünü görebilirsiniz .


5
Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir. Bu şekilde, bağlantılı sayfa herhangi bir nedenden ötürü değişerse veya geçersiz olursa, cevap Süper Kullanıcıyı ziyaret eden kullanıcılar için hala faydalı olacaktır.
bir CVn

3
Teşekkür ederim. Bilgilendirici olsa da, bu cevap soruya cevap içermiyor.
dotancohen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.