Предполагаемое использование Ctrl + T в Bash?

47

Я заметил, что bash имеет сокращение ctrl+, Tкоторое меняет последние два символа перед курсором.

Мне интересно, почему инженеры решили включить это.

  • Это было унаследовано от предыдущего соглашения?
  • Или есть практическая цель, для которой это обычно используется?
Филип Киркбрайд
источник
13
Не ответ, но это не bashтак, но readline(какой bash использует для ввода в приглашении). Ваш bash использует emacsпривязки клавиш; Вы можете изменить привязку клавиш к vi, если вы приверженец Editor Wars;) sanctum.geek.nz/arabesque/vi-mode-in-bash Здесь есть несколько «шпаргалок» readline: readline.kablamo.org/emacs .html и readline.kablamo.org/vi.html .
Джон Н
13
Исторически сложилось так , Emacs-стиль командной строки редактирования функции были изначально разработаны в Bash, а затем превратился в отдельную библиотеку , - но это было до первого выпуска в 1989 году самый первый вход в техreadline ChangeLog намеков на это. Поэтому изначально ярлык обрабатывался в самом Bash, хотя и кратко, до того, как его вытащили readline- но ярлык пришел в Bash из Emacs (я не знаю, был ли он изобретен в Emacs или откуда-то еще).
Стивен Китт

Ответы:

27

Это унаследовано (readline) от GNU Emacs, который использует control- Tдля транспонирования символов:

https://www.gnu.org/software/emacs/manual/html_node/emacs/Transpose.html

Обратите внимание, что редактор строки bash по умолчанию работает в режиме Emacs, но вы также можете переключить его в режим vi, если хотите.

Дмитрий Андрик
источник
63

Очень полезно быстро исправить опечатки:

sl

становится

ls

с одной CtrlT.

Вы также можете использовать AltTдля обмена словами ( например, при переключении между serviceи systemctl...).

Исторически говоря, эта CtrlTособенность пришла в Bash из Emacs по всей вероятности. Вероятно, он был скопирован в Emacs из другого редактора; он присутствовал в редакторе E Стэнфорда (см. Essential E стр. 13) к 1980 году, и E оказал сильное влияние на Ричарда Столлмана (как описано в книге «Свободно как в свободе» ). Он был реализован в очень ранних версиях Bash до его первого выпуска в 1989 году, когда он был вытащен в readlineбиблиотеку, в которой он живет сегодня (самая первая запись, readline ChangeLogнамекающая на это).

Стивен Китт
источник
2
Обмен словами был чем-то новым и очень полезным
Mongrel
Предоставление числового аргумента для Alt + T транспонирует слово в (или перед) курсоре с n-м словом перед этим словом. например: Alt + 2 Alt + T будет модифицировать , word1 word2 word3чтобы , word3 word2 word1если выполняется в word3.
crw
@crw, это было бы неплохо, но alt + T не меняет слова на моем терминале. Я просто открываю пункт меню «Установить заголовок».
Филипп Киркбрайд
@PhilipKirkbride это позор, ваш эмулятор терминала лишает вас очень полезного ярлыка ...
Стивен Китт
@PhilipKirkbride должна быть опция эмулятора терминала для отключения клавиш доступа к меню
Joril
15

Эта комбинация клавиш, привязка, унаследованная от emacsредактора, приводит к тому, что последние 2 введенных символа меняются местами в конце строки, используются в середине строки, меняются местами слева от курсора и под символом курсор.

Может показаться тщетным иметь привязку к такой редко используемой функции, которая может быть легко достигнута еще несколькими нажатиями клавиш. Старые таймеры, такие как я, используют его довольно часто, и это позволяло сэкономить время передачи во времена модемов в 300 бод, в конце 70-х, особенно в середине длинных линий.

Аналогичная и более полезная команда, связанная с Alt+ T, транспонирует слова слева и справа от курсора.

Tбыл выбран, потому что это начальная буква транспонирования . Другие привязки с аналогичным происхождением включают в себя:

  • Ctrl+ B, для назад , перемещает курсор влево на одну позицию,
    • Alt+ Bперемещает курсор влево на одно слово,
  • Ctrl+ F, вперед , перемещает курсор вправо на одну позицию,
    • Alt+ Fперемещает курсор вправо на одно слово,
  • Ctrl+ A, для Anfang или ante , перемещает курсор в начало строки,
  • Ctrl+ E, для конца , перемещает курсор в конец строки,
  • Ctrl+ N, для следующего , извлекает следующую строку,
  • Ctrl+ P, для предыдущего , получает следующую строку,
  • Ctrl+ D, для удаления , удаляет символ под курсором,
    • Alt+ Dудаляет слово под курсором,
  • Ctrl+ K, для убийства , обрезает конец строки,
  • Ctrl+ Y, для янки , вставляет содержимое буфера обмена,

Эти привязки, реализованные в пакете readline GNU, поэтому доступны во всех программах, которые используют его для пользовательского ввода, таких как bash , но также и gdb , bc , ...

Некоторые из них также доступны в других средах: строка ввода URL Firefox, поля ввода текста в графическом интерфейсе OS / X и многие оконные менеджеры на основе X.

Пользователи vim могут выбирать соответствующие привязки через переменную окружения.

chqrlie
источник
Да, это отлично подходит для таких как мы, которые иногда забывают, что мы печатаем в терминале, а не в Emacs; Я все еще пойман, когда использую виджеты текстовой области Firefox (как этот сейчас), которые пропускают эти важные привязки. :-(
Тоби Спейт
Есть ли способ, которым вы могли бы объединить версии символов и слов связанных команд в вашем описании? Это действительно помогает памяти, когда вы понимаете, что Altи Ctrlверсии этих нажатий клавиш связаны последовательно.
Тоби Спейт
@TobySpeight GTK + поддерживает альтернативную тему привязки клавиш в стиле Emacs, поэтому вы можете использовать некоторые из этих привязок клавиш в Firefox. C-tОднако, похоже, ничего не делает. wiki.archlinux.org/index.php/GTK%2B#Emacs_keybindings
Candy Gumdrop
@TobySpeight вы когда-нибудь пробовали это все текст! ? Это позволяет вам редактировать содержимое текстовых полей в редакторе по вашему выбору.
Стивен Китт
Спасибо @Stephen - я слышал об этом, но не пробовал (пока). Я буду следить за этим ...
Тоби Спейт
10

Это очень полезно для исправления улыбок, которые были случайно перенесены пиарами писем.

(С тяжелым RSI на обоих запястьях, я заканчиваю тем, что использовал это много, лично ...)

пушистый
источник
2
Мои глаза кровоточат
Basic
4

Очень быстро исправить опечатки. производит немедленный блок 2 корректоров перед направляющим.

Если вы набрали текст ls-и хотите ввести пробел между ls& дефисом, вы можете использовать Ctrl+T

Это работает, если после дефиса есть пробел, а затем выполните Ctrl+T

дворняжка
источник