- Включите CUA и привычное выделение: они дадут Ctrl+C/X/V, Shift+стрелки, замену выделенного при печати, правый клик — меню.
- Добавьте небольшой глобальный minor-mode, который привяжет “виндовые” сочетания: Ctrl+Z, Ctrl+Shift+Z, Ctrl+S, Ctrl+Shift+S, Ctrl+O, Ctrl+Tab, Ctrl+F4, Alt+F4, Ctrl+колёсико масштаб и т.д.
- Потенциально спорные переназначения (например, Ctrl+S на “Сохранить”, а не “Поиск”) можно включить опционально.
- Быстрый старт
;; 1) Базовая “Windows”-поведенка
(cua-mode 1) ;; Ctrl+C/X/V, прямоугольники и т.п.
(delete-selection-mode 1) ;; печать заменяет выделение
(setq shift-select-mode t) ;; Shift+стрелки = расширять выделение
(when (fboundp 'context-menu-mode) ;; ПКМ-меню как в GUI-редакторах (Emacs 28+)
(context-menu-mode 1))
;; 2) Удобства с колесиком (как в браузерах/IDE)
(global-set-key (kbd "<C-wheel-up>") #'text-scale-increase)
(global-set-key (kbd "<C-wheel-down>") #'text-scale-decrease)
(global-set-key (kbd "C-=") #'text-scale-increase)
(global-set-key (kbd "C--") #'text-scale-decrease)
(global-set-key (kbd "C-0") (lambda () (interactive) (text-scale-set 0)))
;; 3) Слова по Ctrl+Backspace/Delete (как в Windows)
(global-set-key (kbd "C-<backspace>") #'backward-kill-word)
(global-set-key (kbd "C-<delete>") #'kill-word)
- Полный профиль: Windows‑friendly minor mode (вкл/выкл одной командой)
(defgroup windows-friendly nil
"Windows-like key UX."
:group 'convenience)
(defcustom windows-friendly-rebind-C-s/save t
"Переназначать C-s на save-buffer (сместив поиск на C-f)."
:type 'boolean :group 'windows-friendly)
(defcustom windows-friendly-rebind-C-y-to-redo nil
"Делать Ctrl+Y = Redo (по умолчанию C-y в Emacs — paste/yank)."
:type 'boolean :group 'windows-friendly)
(defcustom windows-friendly-rebind-C-a-select-all nil
"Делать Ctrl+A = Выделить всё (по умолчанию C-a — начало строки)."
:type 'boolean :group 'windows-friendly)
(defvar windows-friendly-keys-mode-map
(let ((m (make-sparse-keymap)))
;; Undo / Redo
(define-key m (kbd "C-z") #'undo)
(when (fboundp 'undo-redo)
(define-key m (kbd "C-S-z") #'undo-redo)) ;; стандартно в Windows
;; Открыть / Сохранить / Сохранить как
(define-key m (kbd "C-o") #'find-file)
(when windows-friendly-rebind-C-s/save
(define-key m (kbd "C-s") #'save-buffer)
(define-key m (kbd "C-S-s") #'write-file)
;; Поиск/Замена на знакомых клавишах
(define-key m (kbd "C-f") #'isearch-forward)
(define-key m (kbd "C-S-f") #'query-replace))
;; Закрыть текущий “таб”/буфер и приложение
(define-key m (kbd "<C-f4>") #'kill-current-buffer)
(define-key m (kbd "<M-f4>") #'save-buffers-kill-emacs)
;; Переключение вкладок/окон как Ctrl+Tab / Ctrl+Shift+Tab
(define-key m (kbd "<C-tab>") #'other-window)
(define-key m (kbd "<C-S-tab>") (lambda () (interactive) (other-window -1)))
(define-key m (kbd "<C-S-iso-lefttab>")
(lambda () (interactive) (other-window -1))) ;; совместимость на X11
;; Полноэкранный режим на F11
(define-key m (kbd "<f11>") #'toggle-frame-fullscreen)
m))
(define-minor-mode windows-friendly-keys-mode
"Глобальный режим с Windows-подобными клавишами."
:global t
:keymap windows-friendly-keys-mode-map
(if windows-friendly-keys-mode
(progn
;; Базовая привычная поведенка
(cua-mode 1)
(delete-selection-mode 1)
(setq shift-select-mode t)
(when (fboundp 'context-menu-mode) (context-menu-mode 1))
;; Опциональные горячие
(when (and (fboundp 'undo-redo) windows-friendly-rebind-C-y-to-redo)
(global-set-key (kbd "C-y") #'undo-redo))
(when windows-friendly-rebind-C-a-select-all
(global-set-key (kbd "C-a") #'mark-whole-buffer)))
;; Отключаем опциональные переназначения аккуратно
(when (and (fboundp 'undo-redo) windows-friendly-rebind-C-y-to-redo)
(global-unset-key (kbd "C-y")))
(when windows-friendly-rebind-C-a-select-all
(global-unset-key (kbd "C-a")))))
;; Включить сразу
(windows-friendly-keys-mode 1)
- Что вы получите по умолчанию
- Редактирование
- Ctrl+C / Ctrl+X / Ctrl+V — копировать/вырезать/вставить (cua-mode).
- Shift+стрелки — выделение; печать заменяет выделение.
- Ctrl+Backspace / Ctrl+Delete — удалять слово влево/вправо.
- Поиск/замена и файлы
- Ctrl+O — открыть.
- Ctrl+S — сохранить, Ctrl+Shift+S — “Сохранить как” (если включен rebind).
- Ctrl+F — поиск, Ctrl+Shift+F — заменить (если включен rebind).
- Отмена/повтор
- Ctrl+Z — Undo; Ctrl+Shift+Z — Redo. Опционально Ctrl+Y — Redo.
- Навигация и окна
- Ctrl+Tab / Ctrl+Shift+Tab — следующее/предыдущее окно (как вкладки).
- Ctrl+F4 — закрыть буфер; Alt+F4 — выйти (с предложением сохранить).
- F11 — полноэкранный режим.
- Масштаб
- Ctrl+колёсико — увеличить/уменьшить.
- Ctrl+= / Ctrl+- / Ctrl+0 — увеличить/уменьшить/сбросить масштаб.
- Замечания и советы
- Переназначение Ctrl+S под “Сохранить” конфликтует со стандартным Emacs-поиском на C-s. Включайте эту опцию, если цель — максимально “виндовое” поведение. Поиск будет на Ctrl+F.
- Ctrl+Y как Redo может мешать привычному Emacs “yank” (вставке). В Windows-профиле это логично, но по умолчанию я оставил выключенным.
- Если вам больше нравится, чтобы Ctrl+Tab переключал не окна, а буферы, замените other-window на next-buffer/previous-buffer.
- Правая клавиша мыши: context-menu-mode даёт контекстное меню “как в IDE”.
- Home/End, PageUp/PageDown и Shift‑Home/End обычно работают из коробки как ожидается в GUI Emacs.
- Хочется ещё более “IDE‑подобно”?
- Подписи сочетаний клавиш: пакет which-key делает подсказки во всплывающем окне.
- Переключение между окнами “умнее”: ace-window на Alt+O
- Командная палитра: M-x уже есть, но можно повесить на Ctrl+Shift+P.
- Откат к классике Emacs
- Выключите режим: M-x windows-friendly-keys-mode.
- Или точечно снимите спорные биндинги, поменяв значения переменных windows-friendly-rebind-/ перед (windows-friendly-keys-mode 1).