Терминал Mac OS X: опция карты + удалить, чтобы «удалить слово назад»

232

Пытался сопоставить его из «Настройки» -> «Настройки» -> «Клавиатура», но в поле со списком «ключ» есть только «удалить вперед», но не «удалить». Моя клавиатура, с другой стороны, имеет только «удалить» и не «удалить вперед»!

Есть ли другой способ сделать это, кроме как из настроек?

IBZ
источник
Под словом «удалить назад» вы подразумеваете клавишу возврата? Я не знаю ни о какой недавней клавиатуре Apple, которая имеет клавишу удаления.
Сёрен Куклау
Под словом «назад удалить слово» я имею в виду именно это - удалить все слово, начиная с курсора назад. :) У последнего Macbook есть клавиша с надписью «удалить», но она действует как возврат.
IBZ
Я сталкиваюсь с той же проблемой. клавиатура имеет обратное удаление, но не может быть использована в качестве привязки в Terminal.app.
knoopx
Для меня ваш вопрос заслуживает миллионов голосов. Это мне очень помогло. Раньше я был Ubuntu. Теперь это сделало мою жизнь проще и в Mac OS. Спасибо.
doptimusprime

Ответы:

424

Включить ключ опции как мета-ключ

  1. Перейти Terminal> Preferences> Profiles>Keyboard
  2. Проверьте Use option key as meta key.

Образ

На macOS High Sierra 10.13.6, захвачено 23 октября 2018 года.

Иллюстрация окна для переключения ключа опции в качестве мета-ключа

Ноты

Многие приложения (в том числе bash и tcsh) рассматривают мета-удаление как «слово для обратного удаления».

Андру Лувизи
источник
32
Это в разделе «Настройки терминала»> «Настройки»> «Клавиатура», справа внизу.
Джон
16
Почему это не по умолчанию ?!
Росс Хамбрик
8
На Yosemite этот параметр теперь находится в разделе «Настройки» -> «Профили» -> «Клавиатура». Похоже, вы должны изменить / установить его для каждого профиля.
палимпсестор
6
На неамериканских клавиатурах клавиша выбора часто необходима для получения определенных символов (например, труба '|' довольно важна для оболочки). В этом случае <Esc> b и <Esc> f, упомянутые в других ответах, вероятно, являются лучшим решением?
Тоуко
8
К сожалению, это непродуктивно для программистов с иностранными клавиатурами, которым необходимо использовать клавишу выбора для получения специальных символов, таких как {, потому что это не будет работать, когда клавиша выбора используется в качестве мета-ключа.
Магне
74

Терминал OS X запускает bash, который включает поддержку readline. Следуйте советам Glomek и скажите терминалу использовать опцию в качестве мета-ключа (или использовать Esc), а затем у вас есть несколько удобных опций: Ctrl+ wудаляет предыдущее слово (как Meta + delete, как уже упоминалось), но вы также можете использовать Meta + f и Meta + b для перехода вперед и назад по словам, Ctrl+ aи Ctrl+ eк началу и концу строки, Ctrl+ kудаление (уничтожение) от курсора до конца строки и еще куча.

См. Http://www.bigsmoke.us/readline/shortcuts для хорошей маленькой справочной таблицы.

nadafigment
источник
3
Как это "удобно"? Остальная часть системы использует deleteквалификаторы для удаления слов.
idrougge
Можно ли также удалить "строку"?
Венберт
1
Readline - это здорово, но это не помогает OP. Ctrl + w удаляет WORD (разделенный пробелом), а не слово (разделенный пунктуацией + пробел). С курсором в конце cat .git/refs/heads, Ctrl-w приводит к cat. Мета + удалить результаты вcat .git/refs/
idbrii
@nadafigment, «а» и «е» означает?
Пейсер
63

Удалить слово, возвращаясь:

Ctr-ш.

Шай
источник
2
хорошо прочитав это, я обнаружил, что «удалить слово вперед» это Ctrl + K (методом проб и ошибок). теперь я удивляюсь, почему так мало документации обо всем этом.
Виктор Н.
8
Ctr-k удаляет все перед, а не только одно слово, нет?
Шай
это работает на моем Mac. это работает на Ubuntu Linux также?
user391339
1
Ctrl + w удаляет WORD (разделенный пробелом), а не слово (разделенный пунктуацией + пробел). С курсором в конце cat .git/refs/heads, Ctrl-w приводит к cat. Мета + удалить результаты вcat .git/refs/
idbrii
24

По умолчанию мета-backspace в большинстве оболочек выполняет обратное слово yank. Если вы нажмете клавишу Escape, а затем нажмите клавишу Backspace, это почти везде работает.

Dustin
источник
3
Фантастика, которая не требует дополнительной настройки. Я замечаю <Esc> bи <Esc> fтакже работаю, чтобы отскочить назад или вперед на одно слово.
Joeytwiddle
1
Мне нравится <ALT> + СТРЕЛКА больше. ESC не допускает непрерывных нажатий на кнопки b или f.
Виталий Пом
1
Я использовал <ALT> + СТРЕЛКА для перемещения, но я обнаружил, что нет способа удалить аналогичным образом. Упомянутый выше подход CTRL + W не останавливается на несловарных символах так же, как <ALT> + ARROW, поэтому он удаляет все вплоть до пробела. Любой способ удаления, использующий такое же обнаружение границ, как <ALT> + СТРЕЛКА, был бы признателен
Рене Вуллер
18

⌃W(control + W) - это не то же самое, что meta + delete (ESC + delete, если вы не отметили опцию use в качестве мета-ключа) meta + delete будет рассматриваться / _как разделитель слов, где ^Wпространство будет рассматриваться как разделитель.

например, используя ESC + Bakcspace (курсор в конце)

rm /dira/dirb/file1

дает

rm /dira/dirb/

пока ^ W на том же даст

rm

Поэтому лучше использовать \ 033 \ 177, а не ^ W при определении модифицирующего профиля терминала. Таким образом, вы действительно отображаете ⌥⌫ на то, что делает esc⌫, и у вас остается ^ W, чтобы стереть слово на основе разделителя пробелов.

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

обратитесь к комментарию bouke, чтобы узнать, как изменить профиль терминала.

Стефан Гаспарини
источник
5
Для тех, кто хочет сделать это iterm2, вы можете перейти в «Настройки»> «Ключи»> добавить «Сопоставление клавиш» ⌥⌫для отправки шестнадцатеричных кодов 0x1B 0x7F. 🍻
Qix
Как вы узнали, что \033\177это то, что вы хотите для "удалить часть слова"?
адиабатический
на самом деле вам просто нужно нажать нужную последовательность клавиш в диалоговом окне «Настройки терминала». Настройки → Профили → вкладка клавиатуры → кнопка +, затем выберите модификатор «опция» и нажмите «удалить», затем выберите текстовое поле и нажмите клавишу выхода, затем нажмите клавишу and, и все готово. Esc + ⌫ делает то же самое, что и ⌥⌫
Стефан Гаспарини
14

В профиле вашего терминала вы можете привязать ⌥⌫ (опция + удалить) к ⌃W (управление + W), чтобы он работал аналогично другим приложениям.

Настройки клавиатуры профиля терминала

Bouke
источник
Для того, чтобы это работало, stty должен иметь ^ w, отображенный для werase (поведение по умолчанию). Используйте stty -a в командной строке, чтобы увидеть, как устанавливаются сопоставления.
natersoz
4

Команды быстрого доступа

Ctrl + a - перейти в начало командной строки

Ctrl + e - перейти в конец командной строки

Ctrl + k - удалить от курсора до конца командной строки

Ctrl + u - удалить курсор от начала командной строки

Ctrl + w - удалить от курсора до начала слова (т.е. удалить назад одно слово)

Ctrl + y - вставить слово или текст, вырезанный с помощью одного из ярлыков удаления (например, выше) после курсора

Ctrl + xx - перемещение между началом командной строки и текущей позицией курсора (и обратно)

Alt + b - переместиться назад на одно слово (или перейти к началу слова, на котором в данный момент находится курсор)

Alt + f - переместиться на одно слово вперед (или перейти к концу слова, в котором находится курсор)

Alt + d - удалить до конца слова, начинающегося с курсора (целое слово, если курсор находится в начале слова)

Alt + c - использовать заглавные буквы до конца слова, начинающегося с курсора (целое слово, если курсор находится в начале слова)

Alt + u - сделать верхний регистр от курсора до конца слова

Alt + l - сделать строчные буквы от курсора до конца слова

Alt + t - поменять текущее слово с предыдущим

Ctrl + f - перейти на один символ вперед

Ctrl + b - переместиться назад на один символ

Ctrl + d - удалить символ под курсором

Ctrl + h - удалить символ перед курсором

Ctrl + t - поменять символ под курсором с предыдущим

Команды быстрого вызова Recall

Ctrl + r - поиск в истории назад

Ctrl + g - выход из режима поиска истории

Ctrl + p - предыдущая команда в истории (то есть вернуться к истории команд)

Ctrl + n - следующая команда в истории (т.е. пройти вперед по истории команд) Alt +. - использовать последнее слово предыдущей команды

Командные клавиши управления

Ctrl + l - очистить экран

Ctrl + s - останавливает вывод на экран (для длительной многословной команды)

Ctrl + q - разрешить вывод на экран (если ранее был остановлен командой выше)

Ctrl + c - завершить команду

Ctrl + z - приостановить / остановить команду

Команды Bash Bang (!) Bash также имеет несколько удобных функций, которые используют! (взрыв), чтобы позволить вам сделать некоторые интересные вещи с командами Bash.

!! - выполнить последнюю команду! Blah - запустить самую последнюю команду, начинающуюся с 'blah' (например,! Ls)

! blah: p - распечатать команду, которую запустит! blah (также добавляет ее как последнюю команду в истории команд)

! $ - последнее слово предыдущей команды (аналогично Alt +.)

! $: p - вывести слово, которое заменяет! $

! * - предыдущая команда, за исключением последнего слова (например, если вы введете «_find somefile.txt /», тогда! * Даст вам «_find somefile.txt»)

! : p - распечатать что! заменит

Кертис М
источник
2

С Natural Text Editingпредустановкой в ​​Профиле -> Ключи. Вы можете просто удалить слово

  • Назад с alt + delete
  • Вперед с fn + alt + delete
Энтони Артемьев
источник