Mengapa pintasan Ctrl + A melompat ke awal garis di terminal?


11

Seperti melompat ke ujung garis adalah Ctrl+ E, di mana Edapat dianggap sebagai akhir, mengapa ia melompat ke awal menggunakan A?


1
Anda dapat memikirkan "A" untuk "Anfang"
Anthon

Atau "A" adalah huruf pertama dalam alpabet
Costas

Harap dicatat bahwa di emacs(dan bashjuga di) Anda dapat melompat ke awal / akhir baris juga dengan Home/ Endtombol secara default.
jimmij

Jawaban:


20

Ada dua sisi pertanyaan, sisi teknis dan sisi historis.

Jawaban teknisnya adalah karena bashmenggunakan GNU Readline . Di readlineControl-a terikat ke fungsi beginning-of-line, Anda dapat menunjukkan ini dengan:

$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".

dimana \C-aartinya "Control-a". bind -pakan menampilkan semua binding (hati-hati menggunakan bind, mudah untuk memecahkan keyboard Anda jika Anda secara tidak sengaja memberikan opsi atau argumen tambahan).

Beberapa binding di atas ditambahkan secara default, yang lain telah saya tambahkan (via .inputrc) untuk berbagai terminal yang telah saya gunakan. Sejak bash-2.0, jika terminal termcap berisi kemampuan kh, dan kHkemudian Homedan Endakan diatur ke beginning-of-linedan end-of-line. Keduanya bashdan readlinedikembangkan oleh Chet Ramey , pengguna Emacs dan juga pengembang ceklon Emacs.


(Harap dicatat, upaya ini untuk merangkum sejarah bertahun-tahun dari beberapa dekade lalu, dan membahas beberapa detail.)

Sekarang, mengapa Kontrol-a khususnya? Readline menggunakan binding standar seperti Emacs . Control-a dalam GNU Emacs memanggil move-beginning-of-line, apa yang kami anggap sebagai fungsi "rumah" sekarang.

EMACS asli Stallman dan Steel terinspirasi oleh editor E Fred Wright ( editor WYSIWYG awal) dan TECO (editor modal / bahasa samar) - EMACS adalah seperangkat makro untuk TECO. Lihat Essential E [PDF] (dari SAIL , 1980). Namun E menggunakan Control-Form untuk "awal garis", ini pada keyboard "DataDisc" yang memiliki Controlkunci, dan Formtombol. The Keyboard ruang-kadet waktu (kurang Homekunci dengan cara, meskipun memiliki End) umumnya disalahkan untuk antarmuka Keyboard Emacs.

Salah satu fitur EMACS yang diinginkan adalah penggunaan mode pengeditan baris Kontrol-R "real-time" TECO (TECO mendahului terminal CRT / keyboard), Anda dapat melihat ikatan utama pada halaman 6 MIT AI Lab 1978 ITS Pengantar editor EMACS [dipindai PDF], di mana ┌ digunakan untuk menunjukkan Kontrol. Dalam mode ini, ikatan utama semua urutan kontrol, sebagian besar mnemonik: Control-E Akhir baris ini , Control-P pindah ke baris sebelumnya , Control-N pindah ke baris berikutnya , Control-B mundur satu karakter , dan paling tidak Kontrol -Pindah ke awal baris ini , saran Costas tentang "huruf pertama alfabet" untuk ini sama baiknya dengan yang lainnya.

(Pengikatan kunci yang serupa ada dalam tvlibpaket makro yang bertujuan untuk membuat EMACS berperilaku seperti editor TVEDIT, mengikat kontrol A dan E untuk kalimat mundur dan maju , tetapi menggunakan urutan yang berbeda untuk awal dan akhir baris.)

Binding Control-A / Control-E dalam "^ R mode" diterapkan langsung di ITS TECO (1983, versi 1208, lihat _teco_.tgzarsip di situs PDP10 / ITS nocrew , atau di Github ), meskipun saya tidak dapat menentukan lebih akurat ketika mereka pertama kali muncul, dan sumber TECO tidak menunjukkan mengapa ada binding tertentu yang dipilih. Dokumen MIT EMACS 1978 di atas menyiratkan bahwa pada 1978 EMACS tidak menggunakan Control-A / Control-E asli TECO, ada kemungkinan bahwa scrlinpaket makro (garis layar) mengimplementasikannya.

Untuk rekap:

  • bash menggunakan readline
  • binding kunci readline mengikuti Emacs / EMACS
  • EMACS asli dibuat dengan TECO, mewarisi banyak fitur
  • Makro mode interaktif TECO menggunakan (kebanyakan) binding kunci kontrol mnemonic, dan "start of line" akhirnya ditugaskan ke Control-A

Lihat juga:


6

Karena Richard Stallman menyukai Emacs .

Ctrl+ amelompat ke awal baris di Emacs, dan libreadline menggunakan binding kunci yang sama dengan Emacs. Bash menggunakan libreadline.


2
Perhatikan juga yang dapat Anda lakukan set -o vi, atau echo 'set editing-mode vi' >> ~/.inputrc, untuk mendapatkan ikatan kunci Vim!
wchargin

Mengapa orang memberikan poin jawaban ini? Pertanyaannya adalah mengapa ctrl + a dipilih sebagai perintah untuk pergi ke awal baris, bukan apa perintahnya.
Wurtel

@Wurtel Jawabannya ada di kalimat pertama, lihat "sejarah Gnu".
Jasen

4
Maaf, tapi Karena Richard Stallman suka Emacs. tidak memberi tahu saya mengapa ctrl-a membawa saya ke awal baris. Mengapa tidak ctrl-s, atau ctrl-x, atau apa pun ?!
Wurtel

0

Huruf "a" dipilih karena Control + b dan Control + s telah diambil sehingga mereka memutuskan bahwa karena A adalah huruf pertama dari alfabet latin yang akan digunakan. Bagaimana aku tahu? Karena saya mendapat jawaban hari ini dari salah satu pengembang TECO (pendahulu EMACS) dan EMACS.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.