A gamepad-inspired keybinding layout for Evil in Emacs.
This package remaps a small set of core Evil commands into a controller-style layout:
- Left hand for movement
- Right hand for editing actions
The package intentionally stays small. It only depends on Evil and focuses on
core navigation and editing instead of third-party integrations. The j and J
bindings can optionally use avy when that package is installed.
The layout is built around a simple mental model:
W A S Dhandles directional movementQ Eexpands movement to wordsQ/Euppercase expands movement further- The right side of the keyboard handles deletion and append actions
The goal is consistency across normal state and visual state, not a full replacement for every default Evil binding.
| Key | Command |
|---|---|
| a | evil-backward-char |
| d | evil-forward-char |
| w | evil-previous-line |
| s | evil-next-line |
| q | evil-backward-word-begin |
| e | evil-forward-word-begin |
| Q | tab-bar-switch-to-prev-tab |
| E | tab-bar-switch-to-next-tab |
| A | evil-beginning-of-line |
| D | evil-end-of-line |
| W | evil-backward-paragraph |
| S | evil-forward-paragraph |
| C-w | evil-scroll-page-up |
| C-s | evil-scroll-page-down |
| h | magit-status |
| j | evil-gamepad-avy-goto-char |
| J | evil-gamepad-avy-goto-line |
| k | evil-delete-char |
| K | evil-delete-backward-char-and-join |
| C-k | evil-delete-backward-word |
| l | evil-append |
| L | evil-append-line |
Visual state keeps the same movement layout for consistency.
| Key | Command |
|---|---|
| a | evil-backward-char |
| d | evil-forward-char |
| w | evil-previous-line |
| s | evil-next-line |
| q | evil-backward-word-begin |
| e | evil-forward-word-begin |
| A | evil-beginning-of-line |
| D | evil-end-of-line |
| W | evil-backward-paragraph |
| S | evil-forward-paragraph |
This package is not on MELPA yet.
Add the repository to your load-path and enable the mode:
(add-to-list 'load-path "/path/to/evil-gamepad.el")
(require 'evil-gamepad)
(evil-gamepad-mode 1)If you use use-package:
(use-package evil-gamepad
:load-path "/path/to/evil-gamepad.el"
:after evil
:config
(evil-gamepad-mode 1))If you want the j and J bindings to jump with avy, install avy separately.
Without avy, loading evil-gamepad still succeeds and the bindings will show
an explanatory error only when invoked.
By default, the package only installs keybindings.
If you also want Evil search behavior tuned for symbol-based searching:
(setq evil-gamepad-enable-search-tweaks t)This enables:
evil-symbol-word-searchevil-search-moduleset toevil-search
This package includes minimal integration with popular packages:
hkey binding tomagit-statusfor quick Git accessjandJbindings useavywhen available
Beyond these, the package does not include bindings for:
- Helm
- Org extensions
- Python tooling
- Multiple cursors
- Modeline packages
- Other third-party packages
Those can be layered on top in user configuration if needed.
See LICENSE.
