Emacs define-key, привязка клавиш в режиме Viper

Я пытаюсь изучить 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 ответа

Решение

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

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

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

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

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

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

И, наконец, scroll-down может быть не то, что вы хотите. down относится к тексту, перемещающемуся вниз (учитывая перспективу фиксированного окна). Cv обычно связан с '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 с той же самой программой. Повторите эти действия для остальных привязок, которые вы хотите переместить.

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

Другие вопросы по тегам