# Colemak plugin

This plugin remaps keys in `zsh`'s [`vi`-style navigation mode](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Keymaps)
for a [Colemak](https://colemak.com/) keyboard layout, to match the QWERTY position:

![Colemak layout on a US keyboard](https://colemak.com/wiki/images/6/6c/Colemak2.png)

To use it, add it to the plugins array in your `~/.zshrc` file:

```
plugins=(... colemak)
```

You will also need to enable `vi` mode, so add another line to `~/.zshrc`:
```
bindkey -v
```

Restart your shell and hit the `<ESC>` key to activate `vicmd` (navigation) mode,
and start navigating `zsh` with your new keybindings!

## Key bindings for vicmd

| Old        | New        | Binding                   | Description                                        |
|------------|------------|---------------------------|----------------------------------------------------|
| `CTRL`+`j` | `CTRL`+`n` | accept-line               | Insert new line                                    |
| `j`        | `n`        | down-line-or-history      | Move one line down or command history forwards     |
| `k`        | `e`        | up-line-or-history        | Move one line up or command history backwards      |
| `l`        | `i`        | vi-forward-char           | Move one character to the right                    |
| `n`        | `k`        | vi-repeat-search          | Repeat command search forwards                     |
| `N`        | `K`        | vi-rev-repeat-search      | Repeat command search backwards                    |
| `i`        | `u`        | vi-insert                 | Enter insert mode                                  |
| `I`        | `U`        | vi-insert-bol             | Move to first non-blank char and enter insert mode |
| `<none>`   | `l`        | vi-undo-change            | Undo change                                        |
| `J`        | `N`        | vi-join                   | Join the current line with the next one            |
| `e`        | `j`        | vi-forward-word-end       | Move to the end of the next word                   |
| `E`        | `J`        | vi-forward-blank-word-end | Move to end of the current or next word            |

## Key bindings for less

| Keyboard shortcut | `less` key binding |
|-------------------|--------------------|
| `n`               | forw-line          |
| `e`               | back-line          |
| `k`               | repeat-search      |
| `ESC`+`k`         | repeat-search-all  |
| `K`               | reverse-search     |
| `ESC`+`K`         | reverse-search-all |