Pertanyaan Mengapa ^ C, ^ V, dll. Muncul di terminal ketika saya menggunakan pintasan keyboard Ctrl + karakter?


Kadang-kadang, ketika menyalin-menyisipkan teks dari output perintah, saya akan menggunakan secara tidak sengaja Ctrl+c dari pada Ctrl+Bergeser+c.

Jadi baris perintah menafsirkannya sebagai ^C...

Kenapa ini? Mengapa baris perintah menafsirkan kontrol masukan sebagai ^?


24
2017-12-01 13:51


asal




Jawaban:


Itu tidak benar-benar memasukkan urutan karakter "^ C". Ini hanya representasi untuk karakter kontrol ASCII yang tidak dapat ditulis, seperti:

  • ^C → ETX (Akhir teks, mengirim sinyal membunuh), ASCII 0x03
  • ^D → EOT (Akhir transmisi, mengakhiri input), ASCII 0x04
  • ^H → BS (Backspace, \b), ASCII 0x08
  • ^J → LF (Pakan baris, \n), ASCII 0x0A
  • ^L → FF (Form feed, halaman baru, membersihkan terminal), ASCII 0x0C
  • ^M → CR (Pengembalian barang, \r), ASCII 0x0D

Ini hanyalah ekstrak kecil dari karakter kontrol ASCII yang mungkin yang dapat dimasukkan menggunakan keyboard; Anda dapat menemukan daftar lengkap sini.

Saya pikir yang paling penting untuk diingat adalah Ctrl+C, Ctrl+D dan Ctrl+L.


35
2017-12-01 14:12



Penggunaan caret ^ sebagai simbol untuk "kontrol" tanggal kembali ke masa pra-grafik ketika terminal hanya berupa teks, dan saya percaya bahkan sebelum itu ketika kami memiliki kartu dan kertas, tidak ada terminal. Saya ingin tahu Mengapa tanda sisipan dipilih sebagai simbol. - Paddy Landau


Karena CTRL+KUNCI combo diinterpretasikan oleh terminal sebagai karakter ASCII yang tidak dapat dicetak, dan karena itu tidak bisa dicetak, Anda perlu cara untuk merepresentasikannya.

Konvensi, berasal dari Terminal VT dengan dukungan ANSI, adalah mewakili CTRL+KUNCI combo yang mewakili CTRL dengan tanda sisipan (^) dan KUNCI dengan KUNCI.


8
2017-12-01 14:12





Ketika menyalin dan menempel ke / dari terminal, adalah praktik terbaik untuk menggunakan jalan pintas Ctrl+Memasukkan dan Bergeser+Memasukkan masing-masing.

Ini adalah cara pintas yang lebih tradisional untuk penggunaan terminal, meskipun Anda akan mencatat bahwa dalam lingkungan grafis X Ctrl+Memasukkan dan Bergeser+Memasukkan terikat pada hal yang sama Ctrl+C dan Ctrl + V.

Di sebagian besar terminal Ctrl+C (dipersembahkan oleh ^C) digunakan untuk menghentikan pelaksanaan suatu proses, sehingga menempel dengan jalan pintas itu tidak akan berhasil.

Untuk menyalin dan menempel dengan cepat, Anda dapat memanfaatkan buffer utama X dengan menyorot teks apa pun yang ingin Anda salin, dan kemudian klik-tengah di mana Anda ingin menempelkannya. Tidak perlu keyboard.


5
2017-12-01 14:10



Maaf, tetapi Anda salah memahami pertanyaan itu. OP ingin tahu mengapa string ^C atau yang serupa muncul ketika menekan CTRL + C (atau CTRL + huruf lain). Ini bukan tentang cara menyalin dan menempel barang dengan benar di terminal, yang jawabannya akan sangat bagus. - Byte Commander
@ByteCommander, Anda benar! permintaan maaf saya, saya akan meninggalkan jawaban saya sebagaimana adanya, karena tampaknya pertanyaan sudah dijawab dengan benar :) Seseorang mungkin menemukan ini dan menemukan apa yang saya tulis berguna. - Keefer Rourke


Kamu harus menggunakan Ctrl+C dan tidak Bergeser+Ctrl+C, karena pada baris perintah, mereka melakukan hal yang sama (dan Ctrl+C lebih mudah daripada Bergeser+Ctrl+C). Itu mungkin tidak benar dalam lingkungan grafis tertentu di mana GUI menangkap beberapa penekanan tombol dan melakukan sesuatu yang istimewa, tetapi jika keystroke benar-benar dikirim ke baris perintah, maka tidak ada perbedaan. Inilah mengapa menekan Ctrl+C dapat menunjukkan ^ C sebagai modal C, bukan huruf kecil C. Baris perintah tidak membedakan mana yang Anda tekan (dan huruf besar agaknya dinilai lebih mudah dibaca). Ini benar untuk huruf; untuk karakter lain, Bergeser mungkin berpengaruh.)

Mendesak Ctrl-C mengirimkan kode ASCII yang 64 di bawah posisi huruf besar di tabel ASCII (dan 96 kurang dari posisi huruf kecil di tabel ASCII). Sangat menekan Ctrl-c(huruf kecil) mengirimkan kode ASCII 3 (yang 64 kurang dari modal Ckode ASCII dari 67). Di banyak lingkungan, Anda dapat memegang Alt lalu tekan 3 pada numpad (dan kemudian lepaskan 3 kunci, dan kemudian lepaskan Alt kunci) dan Anda mungkin mendapatkan efek yang sama.

Mengenai ^ C, ^ hanyalah singkatan yang terkenal untuk "Ctrl"kunci. Demikian pula, M- adalah singkatan untuk"Alt"kunci. Err, ya. M singkatan dari kata" Meta ", yang dapat dimasukkan dengan memegang Alt dan menekan apa pun yang terjadi berikutnya, atau kadang dengan menekan ESC (dan melepaskan ESC) dan kemudian menekan apa pun yang terjadi selanjutnya. Artikel Wikipedia di bagian "Control Key": "Notation" menggambarkan ini sebagai "Notasi tradisional". Ini juga dikenal sebagai Notasi Caret (Artikel Wikipedia tentang notasi Caret, Unix StackExchange: pertanyaan ryvnf tentang Notasi Caret).

Mengenai pertanyaan terakhir, shell perintah tidak "menafsirkan" apa pun untuk menjadi tanda sisipan. Dengan kata lain, shell tidak membaca apa pun, dan percaya bahwa itu adalah sebuah tanda sisipan. Apa yang terjadi adalah bahwa shell menggunakan notasi caret terkenal untuk output. Sebagai contoh lain, Anda dapat melihat pager terkenal, "less", menggunakan notasi caret dengan menjalankan: dd if=/dev/zero bs=64 count=1 | less

(Editor teks "nano" juga menggunakan notasi tanda sisipan dalam bantuan daringnya, termasuk layar penuh bantuan daring yang ditampilkan setelah menekan ^ G, a.k.a. Ctrl-g.)


-1
2017-12-01 21:19



DevRobot secara khusus bertanya tentang menggunakan Ctrl-C (atau lebih tepatnya Shift-Ctrl-C) dalam konteks copy dan paste, yang menyiratkan terminal GUI. Anda tidak selalu salah, tetapi penjelasan Anda pasti membingungkan bagi seseorang yang berasal dari perspektif pengguna GUI. - R.M.