Если я хочу создать пользовательскую комбинацию клавиш для запуска команды, есть ли для этого какие-либо сочетания клавиш? Мне всегда трудно решить, на какой ярлык переопределить, потому что я не уверен, какие команды я не должен переопределять, а какие плагины команд, которые я могу установить в будущем, будут пытаться установить.
Существуют ли какие-либо комбинации клавиш emacs для пользовательских команд?
Ответ 1
Я бы предложил использовать unbound. Это было сделано только для этого типа сценариев.
После того, как вам понадобится ваша конфигурация emacs, введите следующую команду: список возможных несвязанных ключей для вашей настройки:
M-x describe-unbound-keys
Он запрашивает уровень сложности (я обычно просто использую 5) для комбинации клавиш в зависимости от того, насколько удобен (меньше вариантов) или эзотерический (больше параметров) ключевое связывание, которое вас интересует.
Ответ 2
Вы можете переопределить что-либо, но соглашение должно использовать C-c l
(где l
- любая буква).
Как пользователь, вы можете переопределить любой ключ; но обычно лучше придерживаться ключа последовательности, состоящие из C-cа затем письмо (верхнее или нижнее дело). Эти ключи "зарезервированы для пользователей", поэтому они не будут конфликтовать с любое правильно разработанное расширение Emacs. Функциональные клавиши F5 - F9также зарезервированы для пользователей. если ты переопределите другой ключ, ваш определение может быть переопределено определенные расширения или основные режимы которые переопределяют один и тот же ключ.
Лично я пытаюсь найти дыру в keybindings, чтобы сместить мои настройки - и обычно мне достаточно найти что-то разумное. Кроме того, я обычно делаю свои собственные привязки клавиш локальными к второстепенному режиму или основной клавиатуре режима и избегаю использовать global-set-key
, когда это возможно. Это помогает держать отверстия в картах.
Например, я перепробовал C-r
в minibuffer-local-map
, чтобы изменить путь в минибуфере на "Разрешенный" путь. Таким образом, хотя C-r
глобально привязано к 'isearch-reverse
, я не пропускаю эту привязку изнутри минибуфера (и становится доступным, если я начинаю поиск вперед в минибуфере).
Другим примером является то, что я написал что-то, который убивает все остальные буферы, имя файла которых совпадает с именем текущего буфера. C-x k
'kill-buffer
, и, к счастью, C-x k
был свободен для моего 'kill-other-buffers-of-this-file-name
, что мне нравится, потому что это небольшое изменение в исходном ключевом соединении. Это глобальная настройка, но я хочу, чтобы функциональность была доступна по всему миру.
Ответ 3
Также помните, что все зарезервированные последовательности могут тривиально использоваться как привязки префикса, если вы хотите группировать связанные задачи вместе или просто хотите максимально использовать конкретную последовательность C-c <letter> для простого типа.
Например, я использую C-c m в качестве префикса для некоторых магических (и связанных) функций, к которым я хочу получить быстрый доступ. например:.
(global-set-key (kbd "C-c m m") 'magit-status)
(global-set-key (kbd "C-c m l") 'magit-key-mode-popup-logging
(global-set-key (kbd "C-c m b") 'mo-git-blame-current)
И, конечно, C-c m C-h затем показывает мне все привязки, которые у меня есть под этим префиксом.
Ответ 4
Нет, вы можете сопоставить любую команду любому интересующему вас ключу, если это ваша конфигурация.
Если вы создаете свой режим или lib, тогда выберите keybinding, которое еще не выполнено.