Я много работаю с текстом и активно пользуюсь клавиатурными сочетаниями (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-буфер — это отдельный буфер обмена, он никак не связан со стандартным клипбордом и для каждого приложения свой собственный. Для операций с этим буфером используются специальные клавиатурные сочетания.
Все эти сокращения прекрасно работают на английской раскладке и не работают на русской (да, до сих пор, даже в MacOS Sonoma 14.4!) Но это можно исправить, если добавить в файл ~/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), часть работает нестандартно, а часть совсем не функционирует.