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


762

Я знаю комбінацію Ctrl+ Aперейти до початку поточної команди, і Ctrl+ Eперейти до кінця.

Але чи є спосіб стрибати слово за словом, як Alt+ / у програмах з какао?


2
Яку оболонку ви використовуєте? Баш?
Саргун Діллон

4
iTerm2 набагато приємніше, ніж вбудований термінал. Нижче я розмістив інструкції, як налаштувати клавіатуру :)
cwd

21
Ці ALTярлики були додані в термінал в останній OS X версії.
Мості Мостачо

7
На мою думку, це не поза темою, оболонка Bash - це відповідне середовище програмування, а прив'язки читання в лінійці широко поширені в більшості популярних програм для CLI Linux. Подивіться також на кількість звітів, про які говорила громада.
GL2014

11
Повторне голосування, OS X Terminal дуже вважається інструментом програмування.
дічлін

Відповіді:


566

З вікна ви можете використовувати досить химерні Esc+ Fдля переходу до початку наступного слова та Esc+ Bдля переходу до початку поточного слова.


47
Повторно натискати обидві клавіші було незручно, щоб знову виконати команду. Мені здається, що це дуже кульгаво зробити це в терміналі Mac OSX, порівняти з терміналом GNOME.
Phương Nguyễn

244
Ви можете ввімкнути "Використовувати параметр як мета-клавішу" в Терміналі> Налаштування> Налаштування> [профіль]> Клавіатура . Тоді не потрібно вручну вводити Esc окремо.
Кріс Пейдж

7
Також якщо ви натискаєте Esc+, Fколи в кінці рядка або інший клавішею клавіші на початку рядка, він просто вставляє букву замість цього. Дратівливий!
Нолдорін

10
Повторно “химерно”: Позначення “F” та “B” означають “Вперед” та “Назад”. Control-F переміщує курсор вперед одного символу, а Control-B переміщує курсор назад. Використання мета-модифікатора (або ESC) означає "рухатися словами". Це сумісні з emacs прив’язки. Якщо ви використовуєте bash, є можливість використовувати прив'язки, сумісні з vi, або ви можете повністю їх налаштувати ~/.inputrc.
Кріс Пейдж

5
Використання параметра як мета, на жаль, не є варіантом для тих, хто потребує клавіші опцій для введення важливих символів оболонки, таких як ~ та | (як на французькій клавіатурі).
Ерік О Лебігот

417

У Mac OS X - наступні комбінації клавіш працюють за замовчуванням. Зауважте, що ви повинні зробити клавішу Option діяти як Meta в налаштуваннях терміналу (на вкладці клавіатури)

  • alt (⌥)+ Fстрибнути F або вперед словом
  • alt (⌥)+ Bстрибнути B вперед на слово

Я помітив, що прив'язка клавіш emacs за замовчуванням для простої навігації по тексту, здається, працює на оболонках bash. Можна використовувати

  • alt (⌥)+, Dщоб видалити слово, починаючи з поточного положення курсору
  • ctrl+ Aстрибати до початку лінії
  • ctrl+, Eщоб перейти до кінця лінії
  • ctrl+, Kщоб вбити рядок, починаючи з позиції курсору
  • ctrl+ Yвставити текст з буфера вбивства
  • ctrl+ Rдля зворотного пошуку команд, які ви ввели раніше, зі своєї історії
  • ctrl+ Sдля переадресації пошуку (працює в zsh для мене, але не bash)
  • ctrl+ Fрухатися вперед за допомогою знака
  • ctrl+ Bрухатися назад за допомогою знака
  • ctrl+ Wдля видалення слова назад із положення курсору

1
Дякую! Мені було цікаво, чому це не вийшло з коробки, це саме те, що мені потрібно.
Флов

11
Ви можете змінити мета в iterm2 наступним чином: Налаштування -> Профілі -> Клавіші -> Ліва опціональна клавіша діє +ESC, тоді ви можете використовувати OPTION f / b, щоб відповідно перемістити слово вперед та назад. Більше
Алан Донг

5
[ Ctrl + W ] - щоб видалити слово назад із положення курсору
YemSalat

[ctrl + u] - видалити весь запис
Корнелій

286

Ось як ви можете це зробити

За замовчуванням у Терміналу є ці ярлики для переміщення (ліворуч та праворуч) по слову:

  • esc+ B(зліва)
  • esc+ F(праворуч)

Ви можете налаштувати alt+ та створити ці послідовності для вас:

  • Відкрити налаштування терміналу ( cmd+ ,);
  • На вкладці Налаштування виберіть Клавіатуру та двічі клацніть, ⌥ ←якщо вона є, або додайте її, якщо її немає.
  • Встановіть модифікатор за бажанням та введіть клавішу швидкого доступу у вікні: esc+ B, генеруючи текст \033b(цей текст не можна вводити вручну).
  • Повторіть слово слово ( esc+ Fстає \033f)

Крім того, ви можете посилатися на цю публікацію в блозі в текстовому тексті:

http://blog.macromates.com/2006/word-movement-in-terminal/


7
Для користувачів MacOSX 10+ та iTerm: або призначте комбінацію клавіш на основі глобальних налаштувань або як комбінацію клавіш профілю. Переконайтеся , що ви вибрали: «Надіслати Escape - послідовність» на списку вибору і введення тільки Bдля задньої або Fдля вперед в Esc+поле
Гас

+1 за чудову мнемоніку, про яку я не думав раніше. Я точно / на жаль, не пам’ятаю цього зараз, тому що я налаштував alt leftта alt rightгенерував ці послідовності
Arc676

Якщо до терміналу я додаю картографічну карту, вона прив'язує її до '^ [B' замість Esc-B.
Андреа Бергонцо

164

Перехід на iTerm2 . Це безкоштовно і набагато приємніше, ніж звичайний старий термінал. Крім того, у нього є набагато більше варіантів налаштування, як, наприклад, комбінації клавіш.

Також я люблю, що ви можете використовувати cmdта 1-9 для перемикання між вкладками. Спробуйте, і ви ніколи не повернетесь до звичайного терміналу :)

Як налаштувати власні налаштування клавіатури в iterm2

  • Встановіть iTerm2
  • Запустіть, а потім перейдіть до області налаштувань.
  • Виберіть вкладку Профілі клавіатури
  • Вам потрібно буде скопіювати профіль на щось нове, а потім видалити ярлики клавіш зі стрілками, наприклад ^+ Right/, Leftабо якщо вам не важлива резервна копія, просто видаліть їх із профілю за замовчуванням.
  • Далі переконайтесь, що вибраний змінений профіль (із зірочкою)

Зображення 1.png

  • Тепер виберіть вкладку клавіатури (дуже верхній ряд)

iTerm 2

  • Натисніть кнопку плюс, щоб додати нову комбінацію клавіш
  • У першому полі введіть CMD+Left arrow
  • У другому полі виберіть "надіслати код втечі"
  • У третьому полі введіть букву B

Зображення 2.png

  • Повторіть із потрібними комбінаціями клавіш. escape+ Bпереміщує одне слово вліво, escape+ fпересуває одне слово праворуч.
  • ви також можете налаштувати cmd+, dщоб видалити слово перед курсором з escape+d

Я часто натискаю неправильну кнопку ( cmd/ control/ alt) за допомогою клавіші зі стрілкою, і тому у мене є комбінації клавіш зі стрілками з цими кнопками, усі вони готові стрибати слова вперед та назад, але будь ласка, робіть те, що вам найбільше підходить.


4
Що б я не робив, я не можу ввійти Ctrl + Arrow Leftабо Right- Upі Downпрацює: / спробував і без нового профілю встановлений за замовчуванням
Tobi

4
Рішення: мені довелося вимкнути ярлики управління місією в розділі Налаштування системи MacOS -> Клавіатура :)
Tobi

Наведена вище інструкція більше не працює з iTerm2. Будь ласка, дивіться мої відповіді нижче для iTerm2 Build 3.3.4.
Повісьте

150

Насправді існує набагато кращий підхід. Утримуйте option( altна деяких клавіатурах) і натискайте клавіші зі стрілками вліво або вправо, щоб рухатися за словом. Просто як це.

option
option

Також ctrleпідведе вас до кінця рядка і ctrlaпереведе вас на старт.


2
Іноді це не працює в певних випадках. Для мене, коли я відкрив Terminal.app, це було добре, але для IntelliJ він просто надрукував [Dі [C. Щоб виправити це, додайте bind '"[D": backward-word'і bind '"[C": forward-word'до мого .bashrc.
Джеймі Конселл

@JamieCounsell Я додав прив'язку до своєї, .bashrcале вона не спрацювала, нічого поганого для мене? (Я використовую RubyMine)
张艳军

@ 张艳军 Я не впевнений, чи читає RubyMine, .bashrcколи термінал завантажується. Спробуйте echo "here"і подивіться, чи з’являється це повідомлення під час відкриття нового терміналу. Також вам доведеться закрити і знову відкрити термінал або запустити source ~/.bashrcйого, щоб прочитати новий файл.
Джеймі Конселл

79

У мене є Alt+ / працює: відкрити Налаштування »Налаштування» Клавіатура , встановіть запис курсору опцій зліва для надсилання рядка в оболонку: \ 033b і встановіть курсор опцій праворуч для надсилання рядка в оболонку: \ 033f . Ви також можете використовувати це для інших комбінацій клавіш управління.


20
Щоб отримати \ 033b, вам потрібно натиснути Esc, а потім b.
Меттью Шинкель

7
Я на Snow Leopard і виявляю, що він працює лише тоді, коли ви це ввімкните Enable option as meta key. До речі, це дуже круто. Ключ, безумовно, буде набагато зручніше досягти порівняння з Esc + B або Esc + F
Phương Nguyễn

2
Що з допитливості, що саме тут відбувається? Чому цей код по-різному починається з OSX? Як я можу знайти інші такі коди?
Koobz

у моєму mac його Налаштування> Профілі> Клавіші лівої опціональної клавіші встановлено як + Ecs
Arun

38

Насправді це залежить від того, яку оболонку ви використовуєте, проте більшість оболонок мають схожі прив'язки. Прив’язки, на які ви посилаєтесь (наприклад, Ctrl+ Aі Ctrl+ E), є прив'язками, які ви знайдете у багатьох інших програмах, і вони використовуються протягом віків, BTW також працює в більшості програм UI.

Ось перегляд типових прив’язок для Bash:

Найважливіші комбінації клавіш Bash

Також зверніть увагу, що ви можете їх налаштувати. Вам потрібно створити файл, назвіть за своїм бажанням, я назвав mine .bash_key_bindings і помістив його у свій домашній каталог. Там ви можете встановити деякі загальні параметри bash, а також можете встановити прив'язки ключів. Щоб переконатися, що вони застосовані, вам потрібно змінити файл під назвою ".bashrc", який читає bash при запуску (ви повинні створити його, якщо його немає) та здійснити наступний виклик там:

bind -f ~/.bash_key_bindings

~ означає домашній каталог у bash, як зазначено вище, ви можете називати файл так, як вам подобається, а також розміщувати його там, де вам подобається, доки ви подаєте правильний шлях + ім'я для прив’язки.

Дозвольте показати вам деякі витяги з мого .bash_key_bindings файлу:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Вони просто встановлюють пару варіантів (наприклад, відключити дзвінок; все це можна знайти на веб-сторінці bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Вони впевнені, що лише персонажі нічого не роблять, але переконуючись, що персонаж "набраний" (вони вставляються на оболонку).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

Це досить цікаво. Якщо я натиснув Ctrl+ Dпоодинці (вибрав d для видалення), нічого не станеться. Але якщо я тоді введу нижній регістр w, слово зліва від курсора буде видалено. Однак, якщо я напишу верхній регістр, слово праворуч від курсору вбивається. Те ж саме стосується l та L щодо всього рядка, що починається від курсору. Якщо я напишу "a", весь рядок фактично видаляється (усе до і після курсору).

Я розмістив стрибки одне слово вперед на Ctrl+ Fі одне слово назад на Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Як ви бачите, ви можете зробити ярлик, який веде до дії негайно, або ви можете зробити один, який просто вводить послідовність символів, і тоді вам доведеться ввести один (або більше) символів, щоб викликати дію як показано в прикладі далі вище.

Тож якщо ви не задоволені прив’язками за замовчуванням, сміливо налаштовуйте їх так, як вам подобається. Ось посилання на посібник з bash для отримання додаткової інформації.


як commandключовий код? У вашому прикладі controlє \C, але як це command?
Пасхаліс

В основному я хочу відобразити Ctrl + A на cmd + вліво (перейти до початку рядка)
Paschalis

1
@Paschalis На MacOS X командний ключ відображається Metaв bash ( \M), cmd + зліва \M-\e[D. Однак ви не можете зіставити cmd + ... ні до чого, всі ярлики команд обробляються (і таким чином проковтуються) самим додатком Terminal (ті ніколи не пересилаються в оболонку), а cmd + залишає карти в "попереднє вікно", якщо у вас кілька вікна терміналу відкриті. Вибачте, це просто неможливо з додатком Terminal.
Mecki

18

Використовуйте попередньо налаштоване природне редагування тексту !

введіть тут опис зображення

По суті, він пов'язує, серед інших ключових послідовностей, Option + LeftArrow для ^[bпослідовності та Option + RightArrow для^[f

Це працює в рибі та баш, а також у терміналі psql.


Це найефективніший спосіб налаштування старого хорошого відображення ключів. Дякую!
fedesismo

У випадку, якщо хтось інший заплутається, як я, зауважте, що ця настройка доступна лише під підкладкою Ключі профілю , а не на вкладці Ключі верхнього рівня .
ben-albrecht

15

Якщо ви станете користувачем Vim, ви можете спробувати режим vim bash. Запустіть це або покладіть у свій ~/.bashrcфайл:

set -o vi

За замовчуванням ви перебуваєте у режимі вставки; натисніть на втечу, і ви зможете пересуватися так, як у звичайному режимі Vim, тому рух за словом є wабо b, і звичайні клавіші руху також працюють .


15

Якщо ви перевірте Use option as meta keyна вкладці клавіатури налаштування, то команди стилю emacs за замовчуванням для прямого та зворотного слова та ⌥F( Alt+ F) та ⌥B( Alt+ B) відповідно.

Я рекомендую прочитати від Bash до Z-Shell . Якщо ви хочете збільшити баш / zsh майстерність!


1
Так, це працює. Але проблема полягає в тому, що я хочу набрати дужки ([] {} |), які знаходяться на Варіантах 7, Варіанті-8 та Варіанті-9. Опції зараз мета, так що це закінчується з Meta-7, Meta-8 ... Будь-які ідеї?
Мартін Вікман

12

На Mac OS X Lion 10.7, Terminal карти Option- Left/Right Arrowдо Esc- b/fза замовчуванням, так що тепер вбудований для Баш і інших програм, що використовують ці Emacs-сумісних комбінацій клавіш.



8

У Bash вони пов'язані з Esc- Bі Esc- F. Bash має багато, набагато більше комбінацій клавіш; Подивіться на результат, bind -pщоб побачити, що вони є.


4

У розділі iterm2" Налаштування"> "Профіль"> "Клавіші" ви натискаєте клавішу "Класифікація+ нижче" та записуєте новий ярлик. Для дії виберіть і введіть відповідно або назад або вперед.Send Escape Sequencebf

Коли я спробував записати один для ( Ctrl+ ), я помітив у полі " Клавіша швидкого доступу", що стрілка ніколи не з’являється. Виявляється, мені довелося відключити системні налаштування Mac за замовчуванням > Клавіатура> Комбінації клавіш> Комбінації клавіш управління місіями, щоб спочатку працювати, оскільки вони перекриють ярлики за замовчуванням iterm2. Має бути правдою і для стандартного термінального додатка.

Налаштування системи клавіатури


1

Нова відповідь для користувачів iTerm2 Build 3.3.4:

Крок 1: (MacOS X) Системні налаштування> Клавіатура> Вкладка ярликів> Вибір управління місією (ліва панель)> Зніміть прапорці для ярликів, позначених як "Переміщення ліворуч" та "Переміщення праворуч на пробіл"

Крок 2: (iTerm2 Build 3.3.4) Налаштування> Профілі> Виберіть * За замовчуванням (ліва панель)> вкладка Ключі> Видалити обидві записи "⌥->" та "⌥ <-"> Встановити обидві клавіші "Лівий параметр (⌥)": "та" Клавіша правого варіанту (⌥): "до Esc +

Ніякого возитися з профілями оболонки, не возитися з неповноцінними masOS (за замовчуванням) Термінал, без незручних Esc + F / B, промивати та повторювати безглуздість.

Справу зроблено!!!

Насолоджуйтесь цією порадою, мої колеги ПРОГРАММЕРИ!


0

Як відповів раніше, ви можете додати set -o viв ваших , ~/.bashrcщоб використовувати vi/ vimприв'язок клавіш, або ж ви можете додати такі частини в .bashrcворушити Ctrlі клавіші зі стрілками:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Щоб запустити дію цих рядків коду, source ~/.bashrcабо розпочніть новий термінальний сеанс.

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