Как связать ключи с indent/unindent region в emacs? - программирование
Подтвердить что ты не робот

Как связать ключи с indent/unindent region в emacs?

Я хочу определить два привязки клавиш к области indent/unindent на 4 пробела.


Перед

hello
world
foo
bar
  • Визуально выберите world и foo.
  • Тип >

После того, как:

hello
    world
    foo
bar

Я также хочу привязать < к unindent region.
Я не знаком с emacs, пожалуйста, помогите.

4b9b3361

Ответ 1

Для этого уже есть сочетания клавиш:

Отступ: C-u 4 C-x TAB

Unindent C-u - 4 C-x TAB

Если вы слишком долго набираете текст, вы можете поместить в файл .emacs следующее:

(defun my-indent-region (N)
  (interactive "p")
  (if (use-region-p)
      (progn (indent-rigidly (region-beginning) (region-end) (* N 4))
             (setq deactivate-mark nil))
    (self-insert-command N)))

(defun my-unindent-region (N)
  (interactive "p")
  (if (use-region-p)
      (progn (indent-rigidly (region-beginning) (region-end) (* N -4))
             (setq deactivate-mark nil))
    (self-insert-command N)))

(global-set-key ">" 'my-indent-region)
(global-set-key "<" 'my-unindent-region)

С помощью этого кода символы больше чем (>) и меньше (<) будут отступать/удалять отмеченную область на 4 пробела.

Ответ 2

(defun keyboard-indent (&optional arg)
  (interactive)
  (let ((deactivate-mark nil)
        (beg (or (and mark-active (region-beginning))
                 (line-beginning-position)))
        (end (or (and mark-active (region-end)) (line-end-position))))
    (indent-rigidly beg end (* (or arg 1) tab-width))))

(defun keyboard-unindent (&optional arg)
  (interactive)
  (keyboard-indent (* -1 (or arg 1))))

Ответ 3

В дополнение к тому, что уже написал @Thomas, вы можете не захотеть использовать клавиши < и > для отступов или отступов. Просто образ вам нужно написать некоторый HTML и больше не можете вводить эти символы. Вот почему я ввел в свой init file следующее в качестве настроек ключа:

(global-set-key (kbd "C-<") 'my-indent-region)
(global-set-key (kbd "C->") 'my-unindent-region)

Примечание: он не работает без (kbd ...). Вы получите сообщение об ошибке:

global-set-key: Key sequence C - > starts with non-prefix key C