Expertus metuit
Клавиатурные сочетания макоси и русская раскладка
2021-03-24 22:34

Я много работаю с текстом и активно пользуюсь клавиатурными сочетаниями (keyboard shortcuts). На макбуке и в макоси в целом писать текст фантастически удобно во многом из-за мощной и очень эргономичной системы клавиатурных сочетаний, они предсказуемо и одинаково работают во всей системе. Однако очень много людей такой полезной функциональностью не пользуются или даже не знают про её существование, а ведь без неё работа с компактной клавиатурой макбука сильно тормозится.

Клавиатура в мак-устройствах отличается от привычной ПК-клавиатуры набором модальных клавиш. Вместо привычных Shift, Alt, Control, Win там другие клавиши: Shift, Option, Control, Command и Fn. Только Shift (и частично Fn) работает одинаково на обоих системах, но остальные клавиши — нет, например, для сохранения документа стандартное сочетание в маке Command-S вместо Ctrl-S в винде.

В этом тексте я ограничусь только командами редактирования и навигации по документам, они применимы везде, где можно печатать текст: текстовые редакторы, поля ввода в формах, браузер и так далее. Большой (но не полный) список доступных можно найти на сайте apple: https://support.apple.com/en-gb/HT201236.

Apple использует специальные символы для обозначения этих клавиш:

  • Shift —
  • Option/Alt —
  • Control/Ctrl — ^
  • Command —

Однако в этом тексте у меня только обычные осмысленные названия клавиш типа Ctrl-A. Также все они исключительно для латинской раскладки, то есть никаких Ctrl-Ф вместо Ctrl-A.

Стандартные сочетания клавиш

Сразу отмечу, что сочетания из этого списка применимы почти везде, в принципе, они должны вообще везде работать, но всегда найдутся приложения, написанные с нарушениями рекомендаций Apple к написанию софта.

Дальше просто списком, а если вы пользовались Emacs, то часть из них покажется знакомыми:

  • Command-A: выделение всего текста
  • Command-C: копирование выделенного текста в клипборд
  • Command-X: копирование выделенного текста в клипборд и удаление выделенного текста
  • Command-V: вставка текста из клипборда
  • Ctrl-A: перемещение курсора в начало всего параграфа (а не текущей видимой строки!)
  • Ctrl-E: перемещение курсора в конец всего параграфа (а не текущей видимой строки!)
  • Command-Left Arrow: перемещение курсора в начало текущей видимой строки
  • Command-Right Arrow: перемещение курсора в конец текущей видимой строки
  • Shift-Ctrl-A: перемещение курсора в начало строки/параграфа и выделение всего фрагмента с исходной позиции курсора и до начала строки/параграфа
  • Shift-Ctrl-E: перемещение курсора в конец строки параграфа и выделение всего фрагмента с исходной позиции курсора и до конца строки/параграфа
  • Ctrl-V: перемещение на одну страницу документа вниз вместе с курсором, это не то же самое, что Fn-Down Arrow или Page Down, которые оставляет курсор на исходном месте, но прокручивают документ на страницу вниз.
  • Shift-Ctrl-V: перемещение на одну страницу документа вниз и выделение всего этого блока текста
  • Option-Ctrl-F: перемещение курсора на правую границу текущего слова, то же самое делает Option-Right Arrow
  • Shift-Option-Ctrl-F: перемещение курсора на правую границу текущего слова с расширением выделения, то же самое делает Shift-Option-Right Arrow
  • Option-Ctrl-B: перемещение курсора на левую границу текущего слова, то же самое делает Option-Left Arrow
  • Shift-Option-Ctrl-B: перемещение курсора на левую границу текущего слова с расширением выделения, то же самое делает Shift-Option-Left Arrow
  • Ctrl-K: вырезание текста от курсора и до конца строки, вырезанный текст помещается в отдельный yank-буфер
  • Ctrl-Y: вставка в текущую позицию курсора текста из yank-буфера (об этом буфере отдельно ниже)
  • Ctrl-D: удалить символ справа от курсора, то же самое делает Fn-Delete
  • Ctrl-H: удалить символ слева от курсора, то же самое делает Delete
  • Ctrl-P: перемещение курсора вверх, аналог нажатия на стрелку вверх на клавиатуре
  • Shift-Ctrl-P: перемещение курсора вверх и расширение выделения на эту строку, то же самое делает стрелка вверх с зажатым Shift
  • Ctrl-N: перемещение курсора вниз, аналог нажатия на стрелку вниз на клавиатуре
  • Shift-Ctrl-N: перемещение курсора вниз и расширение выделения на эту строку, то же самое делает стрелка вниз с зажатым Shift
  • Ctrl-B: перемещение курсора на одну позицию влево, аналог нажатия на стрелку влево на клавиатуре
  • Shift-Ctrl-B: перемещение курсора влево и расширение выделения на один символ, то же самое делает стрелка влево с зажатым Shift
  • Ctrl-F: перемещение курсора на одну позицию вправо, аналог нажатия на стрелку вправо на клавиатуре
  • Shift-Ctrl-F: перемещение курсора на одну позицию вправо и расширение выделения на один символ, то же самое делает стрелка вправо с зажатым Shift
  • Ctrl-O: вставить новую строку в позиции курсора, при этом сам курсор остаётся на месте и перевод строки добавляется справа от него (при нажатии на Enter курсор перемещается, так что это разные функции)
  • Ctrl-T: поменять местами символы слева и справа от курсора
  • Option-Delete: удалить слово слева от курсора
  • Option-Enter: вставить перевод строки и запретить перехват клавиши Enter формой/окном
  • Option-Tab: вставить символ табуляции и запретить перехват клавиши Tab формой/окном

Yank-буфер — это отдельный буфер обмена, он никак не связан со стандартным клипбордом и для каждого приложения свой собственный. Для операций с этим буфером используются специальные клавиатурные сочетания.

Все эти сокращения прекрасно работают на английской раскладке и не работают на русской. Но это можно исправить, если положить в файл ~/Library/KeyBindings/DefaultKeyBinding.dict определения сочетаний для русского языка, я эту операцию автоматизировал через однострочную команду в терминале (подробнее об этом — в моём репозитории):

curl 'https://raw.githubusercontent.com/sigsergv/dotfiles/master/mac/russian-shortcuts/dist-install.sh'\
   -o /tmp/k-dist-install.sh && bash /tmp/k-dist-install.sh

После выполнения этой команды нужно перезапустить нужные приложения и они станут корректно работать с привычными сочетаниями клавиш при включенной русской раскладке клавиатуры (впрочем, только в варианте PC). Причём этот файл дополнительно включает несколько новых полезных сочетаний (они работают также на английской раскладке):

  • Ctrl-U: вырезание текста от позиции курсора до начала параграфа, вырезанный текст помещается в yank-буфер
  • Ctrl-W: удаление слова слева от курсора, изначально то же самое делает Option-Delete

❈ ❈ ❈

Я не помню наизусть все эти сокращения и по большей части пользуюсь постоянно только несколькими: Ctrl-A/Ctrl-E для перемещения в начало/конец параграфа, Command-Left Arrow/Command-Right Arrow для перемещения в начало/конец строки, Ctrl-D для удаления символа справа от курсора (это сильно удобнее, чем Fn-Delete), Ctrl-W для удаления слова слева от курсора.

Клавиатура в эмуляторе терминала

В эмуляторах терминала (Term.app или iTerm.app) нет полноценной поддержки этих сочетаний и я ничего не могу с этим поделать, часть комбинацей работает (типа Ctrl-A/Ctrl-E), часть работает нестандартно, а часть совсем не функционирует.

Комментарии

Текст комментария (разметка: *курсив*, **полужирная**, [ссылка](http://example.com) или <http://example.com> ещё)
Имя (обязательно, 50 символов или меньше)
Опциональный email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2019 Sergey Stolyarov | Работает на Pyrone