Seperti melompat ke ujung garis adalah Ctrl+ E, di mana Edapat dianggap sebagai akhir, mengapa ia melompat ke awal menggunakan A?
emacs
(dan bash
juga di) Anda dapat melompat ke awal / akhir baris juga dengan Home
/ End
tombol secara default.
Seperti melompat ke ujung garis adalah Ctrl+ E, di mana Edapat dianggap sebagai akhir, mengapa ia melompat ke awal menggunakan A?
emacs
(dan bash
juga di) Anda dapat melompat ke awal / akhir baris juga dengan Home
/ End
tombol secara default.
Jawaban:
Ada dua sisi pertanyaan, sisi teknis dan sisi historis.
Jawaban teknisnya adalah karena bash
menggunakan GNU Readline . Di readline
Control-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-a
artinya "Control-a".
bind -p
akan 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 kH
kemudian Homedan Endakan diatur ke beginning-of-line
dan end-of-line
. Keduanya bash
dan readline
dikembangkan oleh Chet Ramey , pengguna Emacs dan juga pengembang ce
klon 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 tvlib
paket 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_.tgz
arsip 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 scrlin
paket makro (garis layar) mengimplementasikannya.
Untuk rekap:
Lihat juga:
Karena Richard Stallman menyukai Emacs .
Ctrl+ amelompat ke awal baris di Emacs, dan libreadline menggunakan binding kunci yang sama dengan Emacs. Bash menggunakan libreadline.
set -o vi
, atau echo 'set editing-mode vi' >> ~/.inputrc
, untuk mendapatkan ikatan kunci Vim!
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.