]> Freerunner's - dotfiles.git/commitdiff
banners: update kak banner
authorAndre Ramnitz <tux.rising@gmail.com>
Mon, 11 Nov 2024 22:37:03 +0000 (23:37 +0100)
committerAndre Ramnitz <tux.rising@gmail.com>
Mon, 11 Nov 2024 22:37:03 +0000 (23:37 +0100)
banner-kak.asc

index ffa2ed74922dca9320f4584076b6f23cde80bac4..180108bba98bb6347b1f623134978879b1d0ece2 100644 (file)
-+=----------------------------------------------------------------------------=+
-              _              _
-             | |            | |
-             | | __   __ _  | | __   ___    _   _   _ __     ___
-             | |/ /  / _` | | |/ /  / _ \  | | | | | '_ \   / _ \
-             |   <  | (_| | |   <  | (_) | | |_| | | | | | |  __/
-             |_|\_\  \__,_| |_|\_\  \___/   \__,_| |_| |_|  \___|
-
-                  Mawww's experiment for a better code editor
-+=----------------------------------------------------------------------------=+
-
-This walk-through is an introduction to Kakoune's basic editing capabilities
-to help new users transition over easily from another editor, or simply
-learn how to write and edit documents with style.
-
-During the learning period, it is useful to activate an automatically displayed
-contextual help for commands in normal mode: `:set -add global autoinfo normal`
-
-In the first section, you will learn about the primitives of the editing
-language to be able to get to a level of knowledge of the editor that
-guarantees that you can work with it efficiently.
-
-In the second section, for users who've gone through the basics and want to
-move on to more advanced functionalities, we explain other primitives whose
-role has a less dominant place in an everyday editing session, but still
-prove themselves powerful when used on the right occasion.
-
-Finally, as this document is in no way an exhaustive list of features, don't
-hesitate to check out the official documentation to complement your tool-set,
-ask questions to more seasoned users on IRC, and check the documentation
-using the built-in `:doc` command.
-
-+=--------------------------------=+ BASICS +=--------------------------------=+
-
-                    =[ MODES
-
-                    Kakoune uses a paradigm called "modal editing" to allow
-       .---,        users to either have every single key they type inserted
-       | i |        into the file being edited (called "insert mode"),
-       `---'        or execute commands that are triggered by the keys hit
-                    (the "normal mode").  Aside from arrow keys, most keys
-       .---,        described in this document are "editing primitives" that
-       |esc|        have to be hit in normal mode, which is the default mode
-       `---'        when you start the editor. To enter insert mode, hit the
-                    `i` key, and to leave it and return to normal mode, hit the 
-                    escape key.
-
-
-                    =[ MOVEMENT
-       .---,
-       | ↑ |        Movement in a buffer (the representation of the contents
-   .---'---'---,    of a file opened by Kakoune) can be achieved using the arrow
-   | ← | ↓ | → |    keys, which will move the cursor up one column/row into
-   `---'---'---`    a given direction.
-
-                    However, furthering the tradition of mode-based editors,
- .---,---,---,---,  the `h`, `j`, `k` and `l` keys can be used for the same
- | h | j | k | l |  purpose, and will respectively move the cursor to the
- `---'---'---'---`  left, down, up, right by one, when hit. Using those keys
-   |   |   |   |    is the recommended way of moving around in a buffer.
- .---,---,---,---,  If you're not familiar with this concept, the proximity
- | ← | ↓ | ↑ | → |  of those four keys with the rest of the lettered keys
- `---'---'---'---`  on a `qwerty` layout allows faster interaction with the
-                    primitives than if the user had to move their hand to
-   .---,            reach the arrow keys.
-   | g |_.
-   `---' |`.---,    Another way of moving the cursor is the "goto" utility,
-         | | g |    invoked by hitting the `g` key. A menu will pop up with a
-         | `---'    summary of all the possible keys that can be hit, along with
-          `.---,    the location where they will move the cursor to, but the
-           | e |    most used ones that we are interested in, for now, are `g`
-           `---'    and `e`. The first one will jump to the beginning of the
-                    buffer, and the second one to its end.
-
-
-                    =[ VIEW
-
-   .---,            Displacing the cursor can sometimes move the view into an
-   | v |_.          inconvenient configuration, leaving some necessary context
-   `---' |`.---,    off-screen, or simply feel uncomfortable to type into.
-         | | t |    Kakoune provides a menu (similar to the `goto` menu
-         | `---'    mentioned in the previous section) that allows users to
-         |`.---,    move the current view in relation to the position of the
-         | | b |    cursor. Upon hitting the `v` key, a short menu appears
-         | `---'    which allows us to hit a second key according to how the
-          `.---,    view should be centered vertically: to leave the cursor
-           | v |    respectively on top, at the bottom or in the middle of the
-           `---'    current view, hit the `t`, `b` or `v` keys.
-
-
-                    =[ SEARCH
-
-                    In order to move the cursor to a specific word, the search
-                    command is the way to go. This functionality allows
-        .---,       the user to jump to the next occurrence of a piece of text.
-        | / |       Upon hitting the `/` key, a prompt reading "search"
-        `---'       will pop up in the status bar in which you can type
-                    your text and validate using the `<ret>` (return) key.
-     .---, .---,    You'll notice that as you type, the cursor changes location
-     |alt|+| / |    to automatically give you a preview of where the cursor
-     `---' `---'    would be displaced to if you validated the search. However,
-                    this behavior is only a preview, exiting prompt mode with
-                    the `<esc>` (escape) key will leave the current position
-        .---,       of the cursor unchanged. Note that you can also use a
-        | n |       regular expression as input.  By default the search
-        `---'       function will look for results forward, starting from
-                    the current location of the cursor, but you can search
-     .---, .---,    backwards using `<a-/>` (alt + `/`).
-     |alt|+| n |
-     `---' `---'    Jumping from one match to the other forward can be achieved
-                    using the `n` key, and backwards using the `<a-n>` (alt +
-                    `n`) key combination.
-
-
-                    =[ SELECTIONS
-
-                    You have certainly noticed that when searching for
-        .---,       text, the cursor extends to highlight the entire match.
-        | ; |       In fact, what we know in other editors as a "cursor" is
-        `---'       actually a single character wide selection in Kakoune,
-                    and can be expanded using primitives. When "expanded",
-     .---, .---,    the selection is an area whose beginning is the "anchor"
-     |alt|+| ; |    and the end the "secondary cursor". To switch anchor and
-     `---' `---'    cursor, use `<a-;>`, and to collapse the selection onto
-                    its anchor, use `;`.
-
-                    Moreover, not only Kakoune expands the principle of
-                    "cursor" by introducing selections, but it also allows
-        .---,       multiple selections within the same buffer. This makes
-        | % |       it very convenient to modify text in multiple locations
-        `---'       at once, as editing primitives apply to all the currently
-                    selected text.
-        .---,
-        | s |       Example: to remove all occurrences of the word "foo", one
-        `---'       would select the entire buffer (`%`), select occurrences of
-                    the word (`s`, "\bfoo\b", `<ret>`), then remove it (`d`).
-
-                    ==[ SELECTING OBJECTS
-
-                    In addition to allowing text selection using regular
-     .---, .---,    expressions, certain objects are defined by default to
-     |alt|+| i |    allow easy selection of text. Objects are bits of text
-     `---' `---'    in the buffer that are identified according to their
-                    structure, rather than their contents, e.g., a paragraph,
-     .---, .---,    a sentence, or a word. When the cursor is located within
-     |alt|+| a |    the boundaries of an object you want to interact with,
-     `---' `---'    several options are available: selecting the contents of an
-                    object without its boundaries (`<a-i>`), a part of it (from
-        .---,       the anchor to its end or its beginning, respectively `]`
-        | ] |       and `[`), or the entire object (`<a-a>`). Those "selection
-        `---'       ranges" are the first part of a two stages shortcut,
-                    as once you've used the key that dictates what part of
-        .---,       the object is to be selected, a menu with a description
-        | [ |       of all the object types select-able will be displayed,
-        `---'       giving a summary of all the keys you can hit to complete
-                    the selection procedure.
-
-                    Example: to select the paragraph in which the anchor lies,
-                    invoke the "inner object selection" shortcut (`<a-i>`),
-                    locate "paragraph" in the information box that pops up and
-    .---,           hit the according key (`p`). The entire two steps sequence
-    | [ |_.         is thus: `<a-i> p`.
-    `---' |`.---,
-          | | ( |   Example: to select everything between the anchor and the
-          | `---'   beginning of the current parenthesis pair, use the selection
-           `.---,   sequence: `[ (`. Note that common objects that use
-            | r |   pairs of opening/closing punctuation signs (brackets,
-            `---'   braces, quotes etc) have an alternative second key that
-                    is displayed in the information menu that you can use to
-                    minimize finger gymnastics. The previous shortcut could
-                    thus also be written: `[ b`.
-
-                    ==[ MOVEMENT SELECTIONS
-
-                    If objects are an easy way to select content-agnostic
-    .---,           data in a buffer, they can also be seen as a way to move
-    | [ |_.         about the buffer. As selecting objects will displace the
-    `---'  `.---,   anchor into a given direction, you can wrap or move around
-            | p |   particular chunks of text without using the conventional
-            `---'   means (e.g., arrow keys or jumps), turning them partially
-                    into movement primitives.
-    .---,
-    | ] |_.         Example: one of the most used object selection combination
-    `---'  `.---,   is the "object end/begin paragraph" one: using `[` or
-            | p |   `]` will displace the anchor into a given direction, and
-            `---'   applying that to the paragraph object allows "jumping"
-                    from one newline separated block of text to another.
-                    The resulting shortcut is thus: `] p` to move forward, or
-                    `[ p` to move backward.
-
-
-                    =[ FILTERING A SELECTION
-
-                    Selecting an entire buffer (`%`) or parts of it (`s`) is a
-                    natural and basic operation in a typical editing session,
-     .---, .---,    however, there are some cases where we need to be able to
-     |alt|+| k |    drop some selections arbitrarily, as opposed to trying
-     `---' `---'    to select the ones we need directly. This concept becomes
-                    very useful when coming up with a regular expression for
-     .---, .---,    the basic selection primitive (`s`) is too tedious (if
-     |alt|+| K |    even possible), that's why the editor provides us with a
-     `---' `---'    "keep matching" and a "keep not matching" operations,
-                    in order to respectively keep exclusively the selections
-                    who match or do not match a given regular expression.
-
-                    Example: when parsing a log file whose lines follow the
-                    usual log pattern (e.g. "[1484383442] ERROR: some data"),
-                    we want to be able to select all the lines individually
-     .---, .---,    (`%`, `<a-s>` to split all the lines), keep those that
-     |alt|+| s |    start with a bracketed time-stamp (`<a-k>^\[`), but
-     `---' `---'    exclude the debug messages (`<a-K>DEBUG`). Of course,
-                    it's possible to come up with a regular expression to
-                    match those simple requirements, but it would take more
-                    work to write it than to organically apply filters on a
-                    general selection, individually.
-
-
-                    =[ SELECTION DUPLICATION
-
-        .---,       Duplicating content can be achieved using a widely
-        | y |       implemented concept: yanking and pasting. Yanking the
-        `---'       current selection (`y`) into the copy register allows the
-        .---,       user to subsequently insert the copied text in the buffer
-        | p |       (`p`).
-        `---'
-        .---,       Note that the default "paste" primitive will insert the
-        | P |       contents of the copy register after the current selection,
-        `---'       if you want copied text to be inserted before the current
-                    selection then you can use the `P` key.
-
-
-                    =[ DELETING / REPLACING SELECTIONS
-
-                    Text replacement is a two-step process in Kakoune, which
-        .---,       involves selecting text to be replaced, and then erasing it
-        | d |       to insert the replacement text. After selections have been
-        `---'       made, you can simply hit the deletion primitive (`d`), then
-        .---,       either enter insert mode to write down the replacement text
-        | c |       (`i`), or stay in command mode to paste the replacement
-        `---'       text stored in the copy register. As deleting and entering
-        .---,       insert mode can be redundant, a primitive that implements
-        | R |       deletion followed by insert mode entrance was implemented:
-        `---'       `c`. You can also directly replace the current selection
-                    with the content of the copy register using a primitive
-                    also implemented for that purpose: `R`.
-
-
-                    =[ UNDO / REDO
-
-                    Mistakes or wrong decisions can happen while editing.
-        .---,       To go back to earlier states of the buffer, you can press
-        | u |       the `u` key several times. On the contrary, pressing `U`
-        `---'       allows traveling forward in the history tree.
-
-
-+=-------------------------------=+ ADVANCED +=-------------------------------=+
-
-                    =[ SPLITTING
-
-                    The selection primitive (`s`) is a powerful tool to select
-                    chunks of data, but sometimes the format of said data isn't
-        .---,       uniform enough to allow creating clear cut selections. In
-        | S |       order to avoid having to write overly complicated regular
-        `---'       expressions that select precisely the wanted text, the
-                    splitting primitive (`S`) allows applying a delimiter to
-                    the current selection, splitting it into separate chunks.
-
-                    Example: selecting the items in a CSV-style list (e.g.,
-                    "1,2,3,4") is as simple as selecting the line, then
-                    splitting it using the comma separator (`S,`). Note that
-                    more advanced splitting is possible, since the delimiter
-                    passed to this primitive is a regular expression.
-
-
-                    =[ ROTATING
-
-                    Often used in conjunction with the splitting primitive
-                    (`S`), the rotation primitive (`<a-)>`) shifts all the
-                    selections clock-wise. Note that a count (described after)
-                    allows the rotation to take place in sub-groups whose size
-     .---, .---,    is given by the count parameter.
-     |alt|+| ) |
-     `---' `---'    Example: in a numbered list where all the numbers are
-                    selected (e.g., `1 2 3 4 5 6 7 8 9 0`), a rotation using
-                    this primitive will shift all the numbers by one selection
-                    forward, while leaving the original multiple selections
-                    untouched (e.g., `0 1 2 3 4 5 6 7 8 9`).
-
-
-                    =[ COUNTS
-
-   .---,            In order to pass a count to a primitive, simply type the
-   |0-9|_.          number out before hitting the primitive key/combination.
-   `---' |`.---,    Counts allow primitives to specialize or extend their
-         | | g |    original functionality by using it as a parameter,
-         | `---'    acting on their side effect.
-         |`.---,
-         | | G |    Example: in order to respectively jump or select up to a
-         | `---'    particular line, pass the line number to the `g` or `G`
-         |`.---,    primitives (e.g., `42g` or `7G`).
-         | | o |
-         | `---'    Example: creating an arbitrary amount of new lines
-          `.---,    above or below the current line and spawning a new selection
-           | O |    for each of them is achieved by passing the number of lines
-           `---'    as a count respectively to the `o` and `O` primitives.
-
-
-                    =[ REGISTERS
-
-                    Similarly to counts, registers influence the behavior of
-   .---,            certain primitives. They are storage structures identified
-   | " |_.          by a single character, and are populated by primitives as a
-   `---'  `.---,    result of a side effect. Although primitives populate a
-           |a-z|    specific register by default, it's possible to modify which
-           `---'    is going to be populated upon execution using the double
-                    quote (`"`) primitive, and subsequently hitting a key that
-        .---,       will serve as an identifier.
-        | * |
-        `---'       Example: the smart search primitive (`*`) uses the current
-                    selection as a search pattern, which will be saved to the
-   .---,            `/` register. In order to use this primitive to execute a
-   | " |_. .---,    temporary search, one could make this primitive save the
-   `---'  `| _ |    pattern to a different register, to preserve the default one,
-           `---'    e.g., `"m*` to save the pattern to the `m` register, or even
-                    `"_*` to save the pattern to a "null" register, which does 
-                    not store anything written to it.
-
-                    ==[ CAPTURE GROUPS
-
-                    Although registers can pass as mere buffer metadata,
-     .---, .---,    they are an integral part of an editing session. The
-     |ctl|+| r |    `<c-r>` key combination allows to insert into the buffer
-     `---' `---'    the value of a register, whose identifier is typed right
-                    after the combination.
-
-.---, .---,         Example: inserting the name of the current buffer in insert
-|ctl|+| r |_.       mode can be achieved using the `%` register, which holds
-`---' `---'  `.---, this information: `<c-r>%`.
-              | % |
-              `---' Other registers that are set automatically are
-                    the numbered registers, which hold the values of the groups
-                    matched in the last search or select operation (`/` and
-.---, .---,         `s` primitives).
-|ctl|+| r |_.
-`---' `---'  `.---, Example: when using the search primitive (`/`) with a
-              |0-9| regular expression containing groups to match a list of
-              `---' first and last names (e.g., `(\w+) (\w+)` on `John Doe`),
-                    issuing `<c-r>1` would insert the first name (`John`),
-                    and `<c-r>2` the last name (`Doe`).
-
-
-                    =[ CUSTOM SELECTIONS
-
-                    Despite the ability to select bits of data using regular
-                    expressions, there are times when using them isn't enough,
-                    and additional manual editing of the selections is
-        .---,       needed. In order to loop through all the selections and
-        | ) |       remove the current one, two primitives are available:
-        `---'       respectively the parenthesis (`)`), and the alt/comma
-                    key combination (`<a-,>`).
-     .---, .---,
-     |alt|+| , |    Example: given a list of three numbers all selected
-     `---' `---'    individually, (e.g., `1 2 3`), deselecting the second
-                    selection would be done by hitting the parenthesis primitive
-                    (`)`) until the according selection is the current one,
-                    then hitting `<a-,>` to end up with only the first
-                    and third number selected.
-
-                    However, being able to trim out some selections out
-        .---,       of a bigger set isn't always convenient, as it doesn't
-        | ^ |       allow more advanced constructs such as combining sets of
-        `---'       multiple-selections that result from different regular
-        .---,       expressions. To allow that, the save mark (`Z`) and append
-        | Z |       mark (`<a-z>`) come in handy, as they respectively save
-        `---'       the current selection to the mark register (`^`), and
-                    show a menu that allows appending the current selection
-.---, .---,         to the mark register upon hitting the `a` key. That way,
-|alt|+| z |_.       it becomes possible to chain and save (append) several
-`---' `---'  `.---, selections made using completely different methods
-              | a | (select, split etc) without being forced to preserve
-              `---' them at all times.
-        .---,
-        | z |       Restoring a mark saved to the mark register using those
-        `---'       primitives can be achieved by using the restore mark
-                    primitive (`z`).
-
-
-                    =[ LEVERAGING SHELL COMMANDS
-
-                    UNIX systems provide with some tools whose purpose is
-                    to interact with raw data, and being a UNIX compliant
-        .---,       aspiring tool itself, Kakoune allows leveraging those
-        | | |       tools to modify a buffer's contents. Upon invoking the pipe
-        `---'       primitive (`|`), an input field pops up which prompts for
-                    a shell command, to which the selections will individually
-                    be sent through the command's standard input.
-
-                    Example: wrapping a selection can be achieved by invoking
-                    the `fold` utility, e.g., `|fold -w80`. You could also want
-                    to see a patch of all the modifications made to the buffer
-                    since it was last saved: `%|diff -u <c-r>% -`. Note that
-                    the `<c-r>%` has to be typed interactively, as it will
-                    insert the name of the buffer into the command.
-
-                    Another equally useful primitive that doesn't depend on
-        .---,       the contents of the current selections is the exclamation
-        | ! |       mark primitive (`!`), which simply insert the output of
-        `---'       the given shell command before each selection.
-
-                    Example: in order to insert the date of the day at the
-                    beginning of the current buffer, one could use `gg`
-                    followed with `!date`.
-
-                    But not all shell-related primitives insert data into
-                    the current buffer, the `$` key is in fact a way to
-        .---,       apply a predicate to all selections, in order to filter
-        | $ |       them out. The command passed to this primitive will be
-        `---'       executed in a new shell using each individual selection for
-                    context, which will either be kept if the command returned
-                    a successful exit code (zero) or dropped otherwise (any
-                    non-zero value).
-
-                    Example: after selecting all the lines in a buffer and
-                    splitting them individually (`%`, `<a-s>`), keeping every
-                    odd-numbered line can be achieved with the following
-                    sequence: `$` `[ $((kak_reg_hash)) -ne 0 ]`.
-
-
-                    =[ REPEATING ACTIONS
-
-                    ==[ PUNCTUAL INTERACTIONS
-
-                    In order to modify text efficiently or insert redundant
-                    bits of data, two primitives are available. The dot `.`
-        .---,       primitive repeats the last change that was made in insert
-        | . |       mode (e.g., writing down text after hitting the insert
-        `---'       primitive `i`). Similarly, repeating the last selection
-                    (e.g., make with the find primitive `f`) can be achieved
-                    using the `<a-.>` primitive.
-
-                    Example: to select a paragraph to append a newline
-     .---, .---,    character to it and cycle through the following paragraphs
-     |alt|+| . |    to repeat the same insertion an arbitrary amount of times,
-     `---' `---'    one would first select the paragraph with `]p`, append a
-                    newline to it `a<ret><esc>`, then repeat both operations
-                    as needed with `<a-.>` and `.` respectively.
-
-                    ==[ COMPLEX CHANGES
-
-                    Transforming successive chunks of formatted data can
-        .---,       be cumbersome when done manually, and lack hindsight
-        | q |       when writing a script for that particular purpose
-        `---'       non-interactively. The middle ground between the two
-        .---,       solutions is to record the modifications made to one
-        | Q |       chunk interactively, and replay the sequence of keys
-        `---'       at will. The sequence in question is a macro: the `Q`
-                    primitive will create a new one (i.e., record all the keys
-.---, .---,         hit henceforth until the escape key `<esc>` is hit), and
-|ctl|+| r |_.       the `q` primitive will replay the keys saved in the macro.
-`---' `---'  `.---,
-              | @ | Notes: macros can easily be translated into a proper
-              `---' script, as they are saved in the `@` register, which you
-                    can insert into a buffer using `<c-r>@`.
+# Kakoune
+
+set verbose mode (good for learning)
+`:set -add global autoinfo normal`
+
+## Movement
+
+### Goto
+
+`10g` - go to line 10
+
+`g` +
+
+`g` - buffer start
+
+`e` - buffer end
+
+`j` - buffer bottom
+
+`t` - window top
+
+`c` - window center
+
+`b` - window bottom
+
+
+`l` - line end
+
+`h` - line begin
+
+`i` - line non blank start
+
+### Align screen relative to cursor (Vim z+)
+
+`v` +
+
+`v` - center vertically
+
+`m` - center horizontally
+
+`t` - top
+
+`b` - bottom
+
+`h`, `j`, `k`, `l` - scroll one char
+
+### Search
+
+`/ <a-/>` - start search forward (backward)
+
+`n <a-n>` - search next search pattern forward (backward)
+
+`N <a-N>` - extend next search pattern forward (backward)
+
+### Selections
+
+`%` - select whole buffer
+
+`s` - select (find) regex in selected text
+
+`<a-S>` - select first and last char of selection(s)
+
+`<a-s>` - split selection on line ends
+
+`S` - split selection on given regex
+
+`x` - select line (`X` - next line below)
+
+`<a-x>` - extend selections to whole lines
+
+`<a-X>` - crop selections to whole lines
+
+`<a-;>` - switch anchor and cursor
+
+`;` - collapse selection to its anchor (one char, effectively reduce selection to one char)
+
+`<a-i>` - select inner object
+
+`<a-a>` - select all object (paragraph, sentence, etc)
+
+`[` - select to beginning of an object; `<a-[` - inner object
+
+`{` - extend to beginning of an object; `<a-{` - inner object
+
+`]` - select to the end of an object; `<a-]` - inner object
+
+`}` - extend to beginning of an object; `<a-}` - inner object
+
+`<a-s>` - split selected text on line ends
+
+`<a-k>` - select lines matching regexp inside selection
+
+`<a-K>` - select lines NOT matching regexp inside selection
+
+`7G` - select to line 7
+
+`<a-h>` - select until beginning of; line like Vim `0`
+
+`<a-l>` - select until end of line; like Vim `$`
+
+`m` - match paranthesis; like Vim's `%`, select parans and content inside
+
+`<a-m>` - match parens backwards (direction)
+
+`M` - get a selection from current cursor to next block end or rather extend to next parans included
+
+`<a-M>` - extend to prev parens
+
+`f` - select to next char included (`<a-f>` - prev char)
+
+`C` - copy selection on next lines (`<a-C>` - previus lines)
+
+`<a-&>` - copy identation
+
+`Z` - save selection in mark register `^`
+
+`z` - restore selections stored in register `^`
+
+`<a-z>` - combine selection from register, confirm by hitting `a` for example
+
+`<a-Z>` - combine selections to register
+
+`<space>` - remove all selections except main  
+
+`<a-space>` - remove main selection
+
+`_` - trim selections
+
+### Text manipulation
+
+`y` - yank
+
+`p` - paste after (`P` before)
+
+`<a-p>` - paste every yanked selection after selected text, keep new (pasted) selection (`<a-P>` before)
+
+`d` - delete
+
+`i` - instert
+
+`c` - delete and inserst
+
+`R` - replace selection with the content of the register
+
+`<a-R>` - replace selected text with yanked text
+
+`u` - undo
+
+`U` - redo
+
+`<a-j>` - join with next line (`<a-J>` include spaces)
+
+`backtick` - convert to lower-case (`<a-backtick>` - swap case)
+
+`~` - convert to upper-case
+
+`o` - insert on new line below (`O` above)
+
+`<a-o>` - add new line below (`<a-O>` above)
+
+## Advanced
+
+`)` - loop through selections (`(` backward)
+
+`<a-)>` - rotate splitted selection clock-wise (`<a-(>` counter clock-wise)
+
+`"m*` - save smart search (*) pattern to register `m` (`_` is a null register)
+
+`<c-r>` - instert into the buffer value stored in the register (`%` - buffer name, etc.); numbers correspond to submatches, like `(\w+)`
+
+`.` - repeat last insert session
+
+`<a-.>` - repeat last selection (for example `]p`); like Vim' `;`
+
+`Q` - start recording macro until `Esc` is hit
+
+`q` - replay the macro (saved in the `@` register)
+
+### Shell
+
+`|` - modify selections by passind to the shell command which will transform them and write back (`<a-|>` will ignore results)
+
+`!` - insert a result of the shell cmd before selections (`<a-!>` - append result)
+
+`$` - apply predicate to selections (0 return value is considered a success); filiter them
+
+### Tips
+
+`|fold -w80` - wrap selection
+
+`!date` - insert date before selection
+
+`$xsel -bi` - copy selection to clipboard. `-bi` stands for `--clipboard --input`
+
+`%|diff -u <c-r>% -` - compare current buffer contents with the version saved to disk
+
+`<a-;>` insert mode -> normal mode (for one cmd) -> back, preseving selections/bindings, modes can be deeply nested (hit Esc more than once if needed)
+
+The couple `u` and `U` lets you move backward and forward in the last branch while their alternative versions `<a-u>` `<a-U>` follow absolute history id which may be located somewhere else in the history tree.
+