Как пропустить слова в терминале OS X?

Скажем, я записал долгую команду в терминале MAC OSX, т.е.

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

и теперь я хочу изменить слово Hello кому: Hi.

Чтобы сделать это, прямо сейчас я должен продолжать нажимать (или удержать), левая клавиша на клавиатуре, пока "курсор" не добирается в конец слова Hello, и затем удалите его. Обычное 'удержание опции' техника не работает, как это делает в большинстве других приложений OS X.

Существует ли способ пропустить слово за один раз вместо этого (или какой-либо другой более короткий способ получить курсор там)?

11
задан 26.11.2015, 03:14

2 ответа

Редактирование командной строки является функцией Вашей оболочки, не Терминала. Вероятно, Ваша оболочка является ударом, и вероятно его стиль редактирования командной строки установлен на “emacs”.

Вот несколько сочетаний клавиш Emacs-стиля, которые Вы могли бы найти удобным:

  • C-a: beginning-of-line
  • C-e: end-of-line
  • M-f: forward-word
  • M-b: backward-word
  • C-d: delete-char
  • M-d: kill-word (удалите следующее 'слово'),
  • M-DEL: backward-kill-word

C-x означает Control+x, таким образом, C-a является Control+a.

M-x означает Meta+x, но на Вашей клавиатуре, вероятно, нет никакой Метаклавиши. Таким образом вместо этого, можно использовать ESC x (т.е. Escape затем x). Терминал имеет установку для автоматической отправки ESC перед клавишами, нажатыми с удерживаемой Опцией. Использование этой функции отключает расширенный символ, обрабатывающий, который Mac OS X обычно обеспечивает при использовании модификатора Опции. Так, если Вы используете немного расширенных символов и хотите иметь Option+x, отправляют ESC x, затем можно включить эту опцию Terminal.

Существует много способов переместиться в “Привет” в Вашем примере:

  • Поиск “Привет”: C-r H e l l o C-j (или ESC)
    • В нормальном Emacs Вы просто использовали бы RET (Возврат), чтобы закончить поиск в текущем местоположении и возвратиться к редактированию. Но в ударе, привязка по умолчанию заставляет RET (т.е. C-m) всегда выполнять текущую строку, даже если возрастающий поиск активен. Таким образом, часть C-j/ESC является отклонением от нормального Emacs.
  • Переход к началу строки и продвигается: C-a M-f C-f (или )
  • Переход к началу строки, затем переместитесь словами: C-a M-f M-f M-b
  • Используйте M-b много (только действительно выполнимый при отображении Опции на Meta).

Существует также несколько способов выполнить Вашу желаемую замену:

  • удалите слово и замените его: M-d H i
  • удалите символы и замените их: C-d C-d C-d C-d C-d H i
  • переместитесь мимо “H” и удалите следующую работу, замените его: C-f M-d i
  • переместитесь мимо “H” и удалите оставшиеся символы, замените их: C-f C-d C-d C-d C-d i

Если бы Вы остановились в конце слова (возможно, через C-a M-f M-f), то Вы могли бы использовать M-DEL H i.

Вы могли бы сделать что-то как bind -P | less найти другую интересную привязку. Консультируйтесь с readline разделом страницы справочника удара (или readline части страниц информации об ударе) для деталей.

19
ответ дан 07.12.2019, 12:16

Значение по умолчанию readline связывающий для forward-word Meta-F (bash(1) страница справочника, раздел READLINE, Команды для Движущегося подраздела). Я не уверен, во что переводит Meta в OS X все же. Опция, возможно.

2
ответ дан 07.12.2019, 12:16

Теги

Похожие вопросы