2017-02-01 8 views
1

Я использую раскладку клавиатуры Colemak, а обычный Vim 'hjkl' не удобен. В моем .vimrc я добавил следующее, чтобы заменить «hjkl» на «neio» (и наоборот).Emacs Evil mode - Как переназначить «hjkl»?

noremap n h 
noremap e j 
noremap i k 
noremap o l 

noremap h n 
noremap j e 
noremap k i 
noremap l o 

noremap N H 
noremap E J 
noremap I K 
noremap O l 

noremap H N 
noremap J E 
noremap K I 
noremap L O 

Если возможно, как это сделать в Emacs с помощью Spacemacs?

ответ

2

Вот как hjkl связаны в :

(define-key evil-motion-state-map "h" 'evil-backward-char) 
(define-key evil-motion-state-map "j" 'evil-next-line) 
(define-key evil-motion-state-map "k" 'evil-previous-line) 
(define-key evil-motion-state-map "l" 'evil-forward-char) 

Вы можете поставить аналогичные линии с вашими собственными ключами в вашем init.el связать направления в зависимости от того, ключи, которые вы хотите. Вам также потребуется переустановить hjkl, предполагая, что вы не хотите, чтобы они ушли в исходное направление.

EDIT: заменить hjkl с neio Я считаю, что вам нужно отвязать i и o в evil-normal-state-map:

(define-key evil-normal-state-map "i" nil) 
(define-key evil-normal-state-map "o" nil) 
+0

Я сначала добавил измененные 'hjkl' и 'neio' в 'init.el', но это не сработало. Затем я вернул изменения в 'init.el' и сменил ключи непосредственно в' evil-maps.el'. Тот же результат. Другие отображения, похоже, работают, но «i» и «o» все еще не могут использоваться для перемещения. Спасибо, в любом случае! – lillemets

+1

@lillemets видит, помогает ли мое редактирование. –

1

Вы также можете сделать эти изменения в .spacemacs. Я не смог найти evil-maps.el, но FAQ рекомендует изменить их в user-config.

(defun dotspacemacs/user-config() 
;; colemak config 
;; Make evil-mode up/down operate in screen lines instead of logical lines 
(define-key evil-normal-state-map "i" nil) 
(define-key evil-normal-state-map "o" nil) ;;neio back,up,down,next 
(define-key evil-motion-state-map "i" 'evil-next-visual-line) 
(define-key evil-motion-state-map "e" 'evil-previous-visual-line) 
(define-key evil-motion-state-map "n" 'evil-backward-char) 
(define-key evil-motion-state-map "o" 'evil-forward-char) 
;; Also in visual mode 
(define-key evil-visual-state-map "i" 'evil-next-visual-line) 
(define-key evil-visual-state-map "e" 'evil-previous-visual-line) 
+0

wait! это ужасно. Теперь вы не можете использовать состояние вставки с «i». Что вы собираетесь делать, всегда используйте append state «a». ? Хорошее движение Колемака, но, похоже, имеет небольшую проблему. –

+2

Это переназначение также обрабатывается пакетом bash-colemak. https://github.com/syl20bnr/spacemacs/pull/7178 –

+0

не совсем точно, но он приближается: в основе зла-colemak используется вариация: держит «hnei» для стрелок и нацелена на «совместимость с мышью». –

1

hjkl в QWERTY является hnei в Colemak, не neio. я вижу, почему вы можете использовать neio, так как это приводит к тому, что все стрелки находятся под пальцами (вместо того, чтобы сдвигать одну позицию влево), но это не всегда хорошо: вниз/вверх (jk на qwerty) часто используются, и используйте два самых сильных пальца.

qwerty hjkl (colemak hnei) на самом деле довольно эргономичный, поэтому для меня имеет смысл сохранить это при использовании colemak. и, конечно, разузнать многолетнюю мышечную память - еще одна причина придерживаться этого.

хранение hnei для навигации и разумного решения последствий именно то, что я достиг с моим пакетом evil-colemak-basics. вы можете проверить его документацию, так как он имеет обширную рецензию о дизайне. возможно, вы даже закончите использовать его. :)

+1

Справедливая точка. Недавно я пришел к тому же самому выводу: не нужно, чтобы все стрелки были под пальцами, пока они вверх/вниз. Я мог бы попробовать «hnei». – lillemets