Emacs define-key, привязка клавиш в режиме Viper - PullRequest
2 голосов
/ 28 октября 2010

Я пытаюсь изучить emacs, получая пользовательские привязки клавиш vi.

В Viper-режиме, как правильно связать ключ заново? (Я использую раскладка клавиатуры Colemak (вместо qwerty), поэтому придется изменить такие вещи, как n-> j) Но хотелось бы, чтобы она работала в режиме viper.

Из этого руководства по связыванию ключей на GNU.org: http://www.gnu.org/software/emacs/manual/html_node/viper/Key-Bindings.html

В нем говорится, что команда для добавления в ваш файл .viper:

(define-key viper-vi-global-user-map "\C-v" 'scroll-down)

Это не работает для меня ... на самом деле не уверен, что у меня даже есть функция "определить ключ" ...

M-x define-key [No match]

Я не уверен, доступен ли 'define-key' в моей версии emacs?

Это работает, но не в режиме viper

(global-set-key "n" "j")

Любая помощь будет высоко ценится. Это мой первый день, когда я использую Emacs, и мне трудно заставить Colemak & Viper-mode работать должным образом.

Спасибо за любую помощь ...

Ответы [ 2 ]

4 голосов
/ 28 октября 2010

Надеемся, что некоторые полезные ответы здесь:

Во-первых, наличие этой строки в .viper работает для меня. Обратите внимание, что viper-vi-global-user-map применяется, когда вы находитесь в режиме команда , а не в режиме вставки.

Во-вторых, define-key - это не команда, это обычная функция, которая просто означает, что ее нельзя вызвать с помощью M-x . Посмотрите эту вики-страницу Emacs , чтобы немного подробнее узнать об этом различии. Но это была хорошая попытка.

В-третьих, global-set-key - это команда, вы могли бы попытаться внести изменение, используя M-x global-set-key . Но это устанавливает ключ в текущей глобальной карте , которая не совпадает с viper-vi-global-user-map. В режиме Viper используется множество различных комбинаций клавиш, чтобы Emacs вел себя как vi, но все карты накладываются поверх глобальной карты.

Я предполагаю, что вы обнаружили, что C-v не был связан так, как вы хотите, когда вы находитесь в режиме insert . И это можно решить, добавив это к вашему .viper:

(define-key viper-insert-global-user-map "\C-v" 'scroll-down)

Наконец, scroll-down может быть не тем, что вы хотите. down относится к тексту, перемещающемуся вниз (учитывая перспективу фиксированного окна). C-v обычно связан с 'scroll-up. Но, может быть, это именно то, что вы хотите.

Предостережение: Я не пользователь режима viper, я даже не знаю, как использовать vi. Так что моя терминология может быть отключена. Но я считаю, что задача изменения вещей в режиме viper очень интересна.

Отредактировано для добавления

Из вашего комментария звучит так, как будто вы хотите, чтобы n был таким же, как то, с чем j связан по умолчанию. Попробуйте добавить это:

(define-key viper-vi-global-user-map "n" 'viper-next-line)

В «нормальном» режиме я сделал Mx описать-ключ j , который сказал мне, что j связан с 'viper-next-line, а приведенная выше строка будет связывать n к той же рутине. Повторите эти действия для остальных привязок, которые вы хотите переместить.

0 голосов
/ 20 октября 2016

в наше время режим зла - это слой эмуляции vim для emacs, и для его настройки для colemak мой пакет https://github.com/wbolster/evil-colemak-basics очень помогает.

...