aboutsummaryrefslogblamecommitdiff
path: root/book/src/keymap.md
blob: a4af5ce858b69860d21a7d5a63bfacf7e36ba6c5 (plain) (tree)
1
2
3
4
5
6
7
8
        
              
 
            

                     


                           

                                  


                                  
                                          
                                  


                                




                                                             
                                                                       





                                                        
                                  
                                         


                                         






                                
                                                         



                          







                                                                 

                                                                          
                                             






                                                                               


                                                     
 










                                                                          






























                                                                              
                                     
                                                          

                                        
                          
                               
                              
                                                



                                                              









                                                                            

                                                                    

                     
                            
                                              
                           
                                                                                   
# Keymap

## Normal mode

### Movement

| Key | Description |
|-----|-----------|
| h, Left   | move left |
| j, Down   | move down |
| k, Up   | move up |
| l, Right   | move right |
| w   | move next word start |
| b   | move previous word start |
| e   | move next word end |
| t   | find 'till next char |
| f   | find next char |
| T   | find 'till previous char |
| F   | find previous char |
| Home   | move to the start of the line |
| End   | move to the end of the line |
| m   | Jump to matching bracket |
| PageUp | Move page up |
| PageDown | Move page down |
| ctrl-u | Move half page up |
| ctrl-d | Move half page down |
| ctrl-i | Jump forward on the jumplist TODO: conflicts tab |
| ctrl-o | Jump backward on the jumplist |
| v   | Enter select (extend) mode |
| g   | Enter goto mode |
| :   | Enter command mode |
| z   | Enter view mode |
| ctrl-w | Enter window mode (maybe will be remove for spc w w later) |
| space   | Enter space mode |
| K | Show documentation for the item under the cursor |

### Changes

| Key | Description |
|-----|-----------|
| r   | replace with a character |
| R   | replace with yanked text |
| i   | Insert before selection |
| a   | Insert after selection (append) |
| I   | Insert at the start of the line |
| A   | Insert at the end of the line |
| o   | Open new line below selection |
| o   | Open new line above selection |
| u   | Undo change |
| U   | Redo change |
| y   | Yank selection |
| p   | Paste after selection |
| P   | Paste before selection |
| >   | Indent selection |
| <   | Unindent selection |
| =   | Format selection |
| d   | Delete selection |
| c   | Change selection (delete and enter insert mode) |

### Selection manipulation

| Key | Description |
|-----|-----------|
| s   | Select all regex matches inside selections |
| S   | Split selection into subselections on regex matches |
| alt-s   | Split selection on newlines |
| ;   | Collapse selection onto a single cursor |
| alt-;   | Flip selection cursor and anchor |
| %   | Select entire file |
| x   | Select current line |
| X   | Extend to next line |
| [   | Expand selection to parent syntax node TODO: pick a key |
| J | join lines inside selection |
| K | keep selections matching the regex TODO: overlapped by hover help |
| space | keep only the primary selection TODO: overlapped by space mode |
| ctrl-c | Comment/uncomment the selections |

### Search

> TODO: The search implementation isn't ideal yet -- we don't support searching
in reverse, or searching via smartcase.

| Key | Description |
|-----|-----------|
| /   | Search for regex pattern |
| n   | Select next search match |
| N   | Add next search match to selection |
| *   | Use current selection as the search pattern |

### Diagnostics

> NOTE: `[` and `]` will likely contain more pair mappings in the style of
> [vim-unimpaired](https://github.com/tpope/vim-unimpaired)

| Key | Description |
|-----|-----------|
| [d | Go to previous diagnostic |
| ]d | Go to next diagnostic |
| [D | Go to first diagnostic in document |
| ]D | Go to last diagnostic in document |

## Select / extend mode

I'm still pondering whether to keep this mode or not. It changes movement
commands to extend the existing selection instead of replacing it.

> NOTE: It's a bit confusing at the moment because extend hasn't been
> implemented for all movement commands yet.

## View mode

View mode is intended for scrolling and manipulating the view without changing
the selection.

| Key | Description |
|-----|-----------|
| z , c | Vertically center the line |
| t   | Align the line to the top of the screen |
| b   | Align the line to the bottom of the screen |
| m   | Align the line to the middle of the screen (horizontally) |
| j   | Scroll the view downwards |
| k   | Scroll the view upwards |

## Goto mode

Jumps to various locations.

> NOTE: Some of these features are only available with the LSP present.

| Key | Description |
|-----|-----------|
| g   | Go to the start of the file |
| e   | Go to the end of the file |
| h   | Go to the start of the line |
| l   | Go to the end of the line |
| s   | Go to first non-whitespace character of the line |
| t   | Go to the top of the screen |
| m   | Go to the middle of the screen |
| b   | Go to the bottom of the screen |
| d   | Go to definition |
| y   | Go to type definition |
| r   | Go to references |
| i   | Go to implementation |
| a   | Go to the last accessed/alternate file |

## Object mode

TODO: Mappings for selecting syntax nodes (a superset of `[`).

## Window mode

This layer is similar to vim keybindings as kakoune does not support window.

| Key | Description |
|-----|-------------|
| w, ctrl-w | Switch to next window |
| v, ctrl-v | Vertical right split |
| h, ctrl-h | Horizontal bottom split |
| q, ctrl-q | Close current window |

## Space mode

This layer is a kludge of mappings I had under leader key in neovim.

| Key | Description |
|-----|-----------|
| f   | Open file picker |
| b   | Open buffer picker |
| s   | Open symbol picker (current document)|
| w   | Enter window mode |
| space   | Keep primary selection TODO: it's here because space mode replaced it |