Что стоит добавить в emacs keybindings

Что стоит добавить в emacs keybindings

Cua-mode

Что вызывает самое большое неприятие новичков в emacs - это то, что не работают ставшие уже стандартом de-facto комбинации клавиш Ctrl+c, Ctrl+v. Связано это, насколько я понимаю, в первую очередь с тем, что emacs был придуман задолго до того как эти комбинации клавиш вообще появились ;-) Вторая причина состоит в том, что с годами, учитывая достаточно удобное расположение c, v на них в emacs навесили уже настолько много всякого функционала (через двойные вызовы типа Ctrl+c s) что отказаться от них просто нет никакой возможности..

С другой стороны, авторы и разработчики emacs прекрасно понимают, что если начинающие пользователи сталкиваются с такими "граблями" сразу, желание работать может и исчезнуть. Потому была придумана альтернатива: cua-mode. Что делает этот режим:

  1. Включает комбинации клавищ Ctrl+C, Ctrl+v
  2. Включает блоки с shift

Всё конечно классно - но… Всё таки очень многое теряется при отключении двух основных комбинаций очень многое удобное в emacs сразу становиться не удобным. Пиррова победа..

Потому рекомендую среднее решение. Всё таки  оставить Ctrl+c, Ctrl+v (C-c, C-v) для стандартных emacs клавиш. Ничего с программистом не случиться если он выучил 2 новых конбинации клавиш (вместо того чтобы придумавать как переназначить 56 стандартных "скрытых" под C-c, C-v). А вот блоки с Shift всё таки стоит оставить - и конфликтов с ними (почти) не наблюдается.

Потому делаем так:

(cua-mode)
(custom-set-variables
 '(cua-enable-cua-keys nil)
 '(cua-mode t nil (cua-base))
)
(global-set-key [(control shift a)] 'mark-whole-buffer)
(global-set-key [mouse-2] 'yank)
(global-set-key [C-kp-insert] 'copy-region-as-kill)
(global-set-key [C-kp-0] 'copy-region-as-kill)
(global-set-key [(control S)] 'save-buffer)

Итого, у нас получилось следующее:

  • control+shift+a (C-S-a) выделение всего буффера (аналогично ctrl+a в win)
  • control+shift+s (C-S-s) записать файл (аналог ctrl+s)
  • Control+Insert - скопировать выделенный сегмент в буффер (ту же самую операцию emacs делает по умолчаниею по клавише Alt+W. для удобства на Microsoft клавиатурах я копирую текст через Ctrl+kp-Insert)
  • Shift+Insert - вставить тескт из буффера в текст (эмаксодиды обычно делают Ctrl+Y)

Другие удобные комбинации клавиш

; для UNIX, спрашивает какую страницу Manual будем смотреть
(global-set-key [f1] 'woman)

; F2 - записать файл 
(global-set-key [f2] 'save-buffer)

; F3 - открыть файл
(global-set-key [f3] 'find-file)

; F7 - поиск и замена
(global-set-key [f7] 'query-replace)

; F8 - next error - "следующая ошибка". Используется 
; для перехода на следующее место в программе.
; Используется при компиляции, отладке, запуске скриптов 
; и при поиске/замене по множеству файлов
(global-set-key [f8] 'next-error)

; привык уже к этому - список всех открытых файлов. То же самое в std 
; emacs не очень удобно: ctrl+x b
; P.S. практически не пользуюсь списком буфферов после установки ido
(global-set-key [f9] 'buffer-menu)

; очень удобно прыгать между открытых фреймов по alt+ клавиши
; курсора
(windmove-default-keybindings 'meta)

; люблю убивать ненужные буйффера без лишних вопросов,
; по alt-delete
(global-set-key [M-delete] 'geosoft-kill-buffer)

; ctrl+shift+z  или ctrl+shift+# (дальше тянуться) - супер
; удобная команда для комментирования/раскомментирования 
; _любых_ source файлов. в зависимости от типа открытого файла
; подставиться нужный комментарий
(global-set-key [(control \#)] 'comment-or-uncomment-region)
(global-set-key [(control shift z)] 'comment-or-uncomment-region)

; пишем макро как обычно C-x (, C-x ), а проигрываем по Ctrl+f5 - 
; это удобно нажать и держать пока надо запускать макро
(global-set-key [C-f5] 'call-last-kbd-macro)

; переход к предыдущему / следующему открытому файлу
(global-set-key [(control ,)] 'previous-buffer)
(global-set-key [(control .)] 'next-buffer)

; запомнить место в коде. или прыгнуть к нему. очень, очень удобно
; т к работает по всем файлам. я в основном пользуюсь alt+ins - на доп
; клавиатуре и alt+del - так как эти клавиши под рукой и быстро 
; вызываются


(global-set-key [C-f6] 'bookmark-set)
(global-set-key [M-kp-insert] 'bookmark-set)

(global-set-key [f6] 'bookmark-jump)
(global-set-key [M-kp-delete] 'bookmark-jump)

Comments

Comments powered by Disqus