Чому ярлик Ctrl + Перехід до початку рядка в терміналі?


11

Як і стрибок до кінця рядка - це Ctrl+ E, де Eможна вважати кінець, чому він переходить до початку використання A?


1
Ви можете придумати "A" для "Anfang"
Антон

Або «А» - перша літера в альфабеті
Костас

Зверніть увагу, що в emacs(і в bashтому числі) ви можете перейти до початку / кінця рядка також за допомогою Home/ Endклавіш за замовчуванням.
jimmij

Відповіді:


20

У питання є дві сторони, технічна та історична сторони.

Технічна відповідь полягає в тому, що bashвикористовується GNU Readline . У readlineControl-a пов'язаний з функцією beginning-of-line, ви можете показати це за допомогою:

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

де \C-aозначає "Control-a". bind -pпокаже всі прив’язки (будьте обережні, користуйтеся bindклавіатурою легко, якщо випадково надаєте додаткові параметри або аргументи).

Деякі з перерахованих вище прив'язок додаються за замовчуванням, інші я додав (через .inputrc) для різних використовуваних терміналів. Починаючи з bash-2.0, якщо термінальний термінcap містить можливості kh, kHтоді Homeі Endбуде встановлено значення beginning-of-lineі end-of-line. І те, bashі readlineїх розробляє Chet Ramey , користувач Emacs, а також розробник ceклону Emacs.


(Зверніть увагу, це намагається узагальнити багаторічну історію за багато десятиліть тому назад, а також висвітлити деякі деталі.)

Тепер, чому саме Control-a зокрема? Readline використовує за замовчуванням Emacs-подібні прив’язки . Control-a в GNU Emacs посилається на move-beginning-of-lineте, що ми зараз вважаємо "домашньою" функцією.

Оригінальний EMACS від Stallman and Steel був натхненний редактором електронної редакції Fred Fred Wright (ранній редактор WYSIWYG) та TECO (крипто-модальний редактор / мова) - EMACS був набором макросів для TECO. Див. Essential E [PDF] (від SAIL , 1980). Однак, використовуючи форму управління для "початку рядка", це було на клавіатурі "DataDisc", яка мала Controlклавішу та Formклавішу. Простір-курсант клавіатура часу (відсутній Homeключ, до речі, хоча він мав End) зазвичай звинувачує для інтерфейсу клавіатури Emacs.

Однією з бажаних особливостей EMACS було використання режиму редагування ліній в режимі реального часу TECO Control-R (TECO перед терміналами CRT / клавіатури). Ви можете бачити ключові прив’язки на сторінці 6 лабораторії MIT AI 1978 ITS Вступ до редактор EMACS [сканований PDF], де ┌ використовується для позначення Control. У цьому режимі ключовими прив'язками були всі керуючі послідовності, значною мірою мемонічні: Control-E Кінець цього рядка , Control-P перехід до попереднього рядка , Control-N перехід до наступного рядка , Control-B назад один символ , і не в останню чергу управління -Перехід до початку цього рядка , пропозиція Костаса про "першу літеру алфавіту" для цього так само добре, як і будь-яка.

(Аналогічна прив'язка ключів є в tvlibмакропакеті, який мав на меті змусити EMACS вести себе як редактор TVEDIT, прив'язуючи керування A і E до зворотнього і прямого речення , але використовував різні послідовності для початку та кінця рядка.)

Прив'язки Control-A / Control-E в режимі "^ R" були реалізовані безпосередньо в ITS TECO (1983 р., Версія 1208, див. _teco_.tgzАрхів на веб- сайті PDP10 / ITS nocrew або на Github ), хоча я не можу визначити більш точно коли вони вперше з'явилися, і джерело TECO не вказує, чому були обрані певні прив'язки. З вищенаведеного документа MIT EMACS 1978 р. Випливає, що в 1978 р. EMACS не використовував натиснуту контрольну систему AEC / Control-E TECO, можливо , scrlinмакро пакет (лінія екрана) реалізував їх.

Для резюме:

  • bash використовує readline
  • Ключові прив'язки для читання ліній слід за Emacs / EMACS
  • оригінальний EMACS був створений разом з TECO, успадкувавши багато функцій
  • Макроси TECO в інтерактивному режимі використовували (здебільшого) мнемічні прив’язки клавіш управління, і "початок рядка" в кінцевому підсумку призначено Control-A

Дивитися також:


6

Тому що Річарду Сталману подобається Emacs .

Ctrl+ aпереходить на початок рядка в Emacs, а libreadline використовує ті самі прив'язки клавіш, що і Emacs. Bash використовує вільну лінію.


2
Зауважте також, що ви можете зробити set -o viабо echo 'set editing-mode vi' >> ~/.inputrcотримати клавіші Vim!
wchargin

Чому люди дають такі бали відповідей? Питання полягало в тому, чому ctrl + a було обрано як команду перейти до початку рядка, а не те, що є командою.
wurtel

@Wurtel Відповідь у першому реченні, див. "Історію Гну".
Ясен

4
Вибачте, але тому, що Річарду Сталлману подобається Emacs. не говорить мені, чому ctrl-a відводить мене до початку рядка. Чому б не ctrl-s, або ctrl-x, або що завгодно ?!
wurtel

0

Буква "а" була обрана тому, що Control + b та Control + s вже були прийняті, тож вони вирішили, що оскільки A - перша літера латинського алфавіту, це буде те, що вони використовували. Звідки я знаю? Тому що я сьогодні отримав відповідь від одного з розробників TECO (попередник EMACS) та EMACS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.