Mengapa ^M
digunakan untuk merepresentasikan carriage return dalam VIM dan konteks lainnya?
Dugaan saya adalah bahwa M
adalah huruf ke-13 abjad Latin dan carriage return adalah \x0D
atau desimal 13
. Apakah ini alasannya? Apakah representasi ini didokumentasikan di mana saja?
Saya perhatikan bahwa Tab diwakili oleh ^I
, yang merupakan huruf kesembilan dari alfabet Latin. Sebaliknya, Tab adalah \x09
atau desimal 9
, yang mendukung teori saya yang dinyatakan di atas. Namun, di mana ini bisa didokumentasikan sebagai fakta?
terminal
encoding
special-characters
dotancohen
sumber
sumber
^H
menghapus karakter atau memungkinkan pencetakan berlebih (sepertin^H~
cara usang untuk menghasilkan ñ) atau penggunaan aktual lain dari karakter kontrol terpisah dari notasi tanda sisipan.Jawaban:
Saya percaya bahwa apa yang sebenarnya ditanyakan oleh OP disebut Caret Notation .
Daftar lengkap karakter kontrol ASCII bersama dengan notasi caret dapat ditemukan di sini
Mengenai vim dan editor teks lainnya: Anda biasanya hanya akan melihat ^ M jika Anda membuka file teks berformat Windows (CRLF) dalam editor yang mengharapkan Linux line endings (LF). 0x0A diterjemahkan sebagai pemisah baris, 0x0D tepat sebelum dicetak sebagai ^ M. Sebagian besar waktu, pengaturan default editor termasuk 'secara otomatis mengenali akhir baris'.
sumber
^A
adalah0x41 xor 0x40
, atau0x01
dan^?
merupakan0x3F xor 0x40
, atau0x7F
.<---
kunci (juga, membingungkan, disebut backspace) pada terminal mirip VT100.Itulah alasannya.
ASCII mendefinisikan karakter 0-31 sebagai kode kontrol non-cetak. Berikut ini kutipan dari
ascii(7)
halaman manual dari sistem Linux acak (man ascii
), hingga dan termasuk CR (13):Secara konvensional karakter-karakter ini dihasilkan dengan Controldan surat yang berkaitan dengan karakter yang diperlukan. Teletype dan keyboard terminal awal memiliki 'BELL' tertulis di atas Gkunci untuk alasan ini.
Dokumen standar yang mendefinisikan ASCII adalah ASA X3.4-1963 , yang diterbitkan oleh American Standards Association pada tahun 1963. Saya tidak dapat menemukan dokumen asli di situs web mereka, tetapi kutipan dari dokumen asli ini menunjukkan tabel karakter, termasuk kode kontrol di atas.
sumber
^M
adalah singkatan untuk Control-M. Di terminal Anda akan menekan tombol Control bersama-sama dengan tombol M untuk mengirim kode 0x0D ASCII juga dikenal sebagai carriage return.Notasi kembali ke ASCII Teletypes yang paling awal (ca 1963). Ada kunci CTRL yang mengubah bit 0x40 sehingga CTRL-M (carriage return) akan menjadi 0D bukannya 4D, CTRL-G (bell) akan menjadi 07 bukannya 47, CTRL-L (form feed) akan menjadi 0C sebagai gantinya dari 4C.
Tidak ada "desain" dalam menetapkan huruf-huruf tertentu untuk fungsi-fungsi tertentu, itu hanya kebetulan bahwa, ketika debu menetap dari menetapkan kode ASCII, kunci M sedikit berbeda dari carriage return dan karenanya carriage return menjadi CTRL-M.
Ini adalah foto terbaik yang bisa saya temukan dari keyboard ASR33. Seperti yang Anda lihat, nama karakter kontrol dicetak dalam huruf kecil pada tombol alpha yang sesuai.
Gambar oleh Marcin Wichary, Pengguna: AlanM1 (Turun (dipotong) dari File: ASR-33 2.jpg ) [ CC BY 2.0 ], melalui Wikimedia Commons
Kunci M tidak memiliki notasi di atasnya karena ada tombol "KEMBALI" khusus, jadi CTRL-M berlebihan.
sumber
Tanda sisipan (^) hanya singkatan untuk tulisan tahan tombol Kontrol - CTRL bawah.
Di masa lalu yang baik Anda dapat mengetik kode ini (lihat di atas) secara langsung, tombol Ctrl + G (^ G) akan membuat terminal menjadi "ding"
Ketika Anda ingin menambahkan CR di Vim Anda menggunakan tombol Ctrl + M dll tab = Ctrl + I
sumber
Perlunya beberapa cara visual untuk menampilkan apa yang menurut karakter tidak dapat dicetak.
Jadi, seseorang di awal 1970-an (atau mungkin lebih awal) (Saya ingat melihatnya di CP / M, dan orang lain telah menyebutkan TOPS) memutuskan bahwa "caret plus letter" akan menjadi simbol untuk 26 karakter kontrol ASCII yang tidak dapat dicetak dengan nilai 1 hingga 26. Nilai 0 adalah / dicetak sebagai ^ @, dan nilai 127 sebagai ^ ?.
sumber
Di mana ia didokumentasikan, baik halaman ini mencantumkan setiap karakter kontrol, dengan cara memasukkan / mewakili dengan kunci kontrol (meskipun yang pertama, karakter ascii 0, tidak memiliki representasi kunci kontrol), dan tidak memiliki apa pun untuk karakter 127. Dan ini menyediakan sumber di bagian bawah
https://www.cs.tut.fi/~jkorpela/chars/c0.html
Orang mungkin bertanya-tanya, mengingat bahwa ada 33 karakter kontrol (karakter ASCII 0-31 jadi 32 karakter, + karakter 127. jadi, = 33 karakter) Bagaimana mereka semua diwakili karena hanya ada 26 huruf dalam alfabet. Yah, itu menggunakan Ctrl-A untuk Ascii karakter 1, Ctrl-Z untuk karakter ascii 26, dan di sana setelah mencapai Ctrl-Z, ia menggunakan
[
\
]
^
_
Ini daftar Ctrl-Z sebagai SUB, meskipun dalam DOS dan cmd prompt itu adalah EOF, dan sebagai pengguna techie Anda menggunakannya ketika melakukan di
copy con a.a
manaa.a
file Anda. Anda memasukkan teks dan menghentikannya dengan Ctrl-Z yang cukup lucu tidak memasukkan penanda EOF. Tapi apakah memberitahu CMD itu akhir dari file sehingga CMD menulisnya.Halaman web cs.tut.fi memberikan ini sebagai sumber
http://www.wps.com/texts/codes/X3.4-1963/index.html
tetapi itu adalah tautan yang rusak, tetapi tersedia di archive.org itu dalam bentuk JPG
Kode Standar Amerika untuk Pertukaran Informasi
standar ASA X3.4-1963
https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html
sumber
^I
untuk tab dalam tipe standar bash:ls ~/^I^I
dan Anda akan melihat semua folder di direktori home Anda.Anda dapat melihat semua Controlpemetaan karakter ASCII yang tidak menguntungkan dalam tabel ini .
sumber