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


11

Скажімо, я написав довгу команду в терміналі Mac OSX, тобто

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

і тепер я хочу змінити слово Helloна Hi.

Для цього мені потрібно продовжувати натискати (або утримувати) ліву клавішу клавіатури, поки «курсор» не дістанеться до кінця слова Hello, а потім видалити її. Звичайна техніка "утримування опції" не працює, як у більшості інших програм X X.

Чи є спосіб замість цього слова пропустити за один раз (або будь-який інший коротший спосіб дістати курсор)?

Відповіді:


19

Редагування командного рядка - це функція вашої оболонки, а не терміналу . Можливо, ваша оболонка є bash, і, ймовірно, стиль редагування її командного рядка встановлений на "emacs".

Ось кілька комбінацій клавіш у стилі Emacs, які можуть бути вам корисними:

  • Ca: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Мб: backward-word
  • Cd: delete-char
  • Md: kill-word(видалити наступне слово)
  • M-DEL: backward-kill-word

C- x означає Control+ x, тому Са є Control+ a.

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

У вашому прикладі є багато способів переходу до "Привіт":

  • Шукати "Привіт": Cr H ello Cj (або ESC)
    • У звичайному Emacs ви просто використовуєте RET ( Return), щоб закінчити пошук у поточному місці та повернутися до редагування. Але в bash , прив'язки за замовчуванням змушують RET (тобто Cm) завжди виконувати поточний рядок, навіть якщо активний пошук поступово. Отже, частина Cj / ESC - це відхилення від нормального Emacs.
  • Перейти до початку рядка і рухатися вперед: Ca Mf Cf (або )
  • Перейти до початку рядка, а потім перейти словами: Ca Mf Mf Mb
  • Використовуйте Мб дуже багато (лише реально можливо, якщо зіставити Варіант на мета).

Існує також кілька способів здійснити бажану заміну:

  • видаліть слово та замініть його: Md H i
  • видалити символи та замінити їх: Cd Cd Cd Cd Cd H i
  • пропустити повз «H» та видалити наступну роботу, замінити її: Cf Md i
  • пропустити повз "H" та видалити інші символи, замінити їх: Cf Cd Cd Cd Cd i

Якщо ви зупинилися в кінці слова (можливо, через Ca Mf Mf), ви можете використовувати M-DEL H i.

Ви можете зробити щось на кшталт bind -P | lessпошуку інших цікавих прив’язок. Докладні відомості див. У розділі читання сторінки bash man (або частинах readline на інформаційних сторінках bash ).


Гаразд, це насправді не стосується питання, але як ви кладете туди слова, схожі на клавіші клавіатури?
Wuffers

1
@Містер. Людина: Використовуйте <kbd>елементи. Підмножина HTML дозволено в розмітці тут . Поява пояснюється локальним стилем тегу (фон, колір рамки, стиль рамки, ширина рамки тощо). Ви можете переглянути розмітку джерела моєї публікації ("переглянути джерело" на цій сторінці ). Дивіться meta.stackexchange.com/questions/5527, навіть якщо стильний стиль вимкнено на MSO: meta.stackexchange.com/questions/1939/#23571
Кріс Джонсен,

Я не впевнений, це очевидно чи ні, мені знадобилося хвилину, щоб це зрозуміти, але я перебуваю на MBP без мета-ключа і використовую конфігурацію терміналу за замовчуванням. Щоб рухатись словами вперед і назад, я можу натиснути клавішу Esc, а потім F, або Esc, а потім B. Просто хотів згадати це, тому що спосіб, який це було пояснено вище, змусив мене спробувати натиснути Esc + x, а потім f або b ...
cwd

Чи є спосіб змінити оточення або оболонку, щоб я міг робити ctrl або fn + клавіші зі стрілками, щоб відповідати моєму IDE?
codecowboy

1
Ви також можете використовувати прив'язки vi, додавши set -o viу свій .bashrc! gnu.org/software/bash/manual/html_node/…
Буде Манн

2

За замовчуванням для зв'язування Readline forward-wordє Meta-F ( bash(1)чоловік сторінка БІБЛІОТЕКИ READLINE розділ, команди для Moving підрозділу). Я не впевнений, що Meta перекладає в OS X, хоча. Варіант, можливо.


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