Предполагаемое использование 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 могут выбирать соответствующие привязки через переменную окружения.


Да, это отлично подходит для таких как мы, которые иногда забывают, что мы печатаем в терминале, а не в 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.