2021-09-15 13:18:02 +02:00
= image:{logo}[K,30,30,link="{website}",title="Kakoune logo by p0nce"] Kakoune image:{cirrus-img}[link="{cirrus-url}"] image:{irc-img}[link="{irc-url}"]
2017-11-01 12:49:13 +01:00
ifdef::env-github,env-browser[:outfilesuffix: .asciidoc]
2015-03-31 20:21:31 +02:00
:logo: https://rawgit.com/mawww/kakoune/master/doc/kakoune_logo.svg
2020-01-01 23:47:41 +01:00
:website: https://kakoune.org
2019-12-15 09:19:02 +01:00
:cirrus-img: https://api.cirrus-ci.com/github/mawww/kakoune.svg
2019-12-10 18:56:58 +01:00
:cirrus-url: https://cirrus-ci.com/github/mawww/kakoune
2017-03-08 07:51:34 +01:00
:irc-img: https://img.shields.io/badge/IRC-%23kakoune-blue.svg
2021-06-13 16:54:19 +02:00
:irc-url: https://web.libera.chat/?channels=kakoune
2015-04-03 19:42:12 +02:00
:icons: font
:toc: right
2017-01-19 22:52:42 +01:00
:pp: ++
2011-11-04 10:09:27 +01:00
2014-07-30 20:14:37 +02:00
TL;DR
-----
2015-10-18 13:42:52 +02:00
{website}
2017-12-27 08:13:11 +01:00
*Modal editor* -- *Faster as in fewer keystrokes* --
2014-10-06 21:23:56 +02:00
*Multiple selections* -- *Orthogonal design*
2014-07-31 01:08:00 +02:00
---------------------------------------------
2020-01-01 23:47:41 +01:00
git clone https://github.com/mawww/kakoune.git
2014-07-30 20:14:37 +02:00
cd kakoune/src
make
./kak
2014-07-31 01:08:00 +02:00
---------------------------------------------
2014-07-30 20:14:37 +02:00
2020-01-01 23:47:41 +01:00
See https://github.com/mawww/golf for Kakoune solutions to vimgolf challenges,
2017-12-27 08:13:11 +01:00
regularly beating the best Vim solution.
2015-01-23 20:14:12 +01:00
2015-06-12 14:38:53 +02:00
See the link:doc/design.asciidoc[design document] for more information on
2022-04-13 04:26:39 +02:00
Kakoune's philosophy and design.
2015-06-12 14:38:53 +02:00
2015-03-31 20:21:31 +02:00
Introduction
------------
2011-11-04 10:09:27 +01:00
2017-12-27 08:13:11 +01:00
Kakoune is a code editor that implements Vi's "keystrokes as a text editing
2022-04-13 04:26:39 +02:00
language" model. As it is also a modal editor, it is somewhat similar to the
2017-12-27 08:13:11 +01:00
Vim editor (after which Kakoune was originally inspired).
2011-11-04 10:09:27 +01:00
2022-04-13 04:26:39 +02:00
Kakoune can operate in two modes: *normal* and *insertion*. In insertion mode,
2011-11-04 10:09:27 +01:00
keys are directly inserted into the current buffer. In normal mode, keys
are used to manipulate the current selection and to enter insertion mode.
2022-04-13 04:26:39 +02:00
Kakoune has a strong focus on interactivity. Most commands provide immediate
and incremental results, while being competitive with Vim in terms of keystroke count.
2014-01-28 14:53:44 +01:00
2020-09-09 20:00:59 +02:00
Kakoune works on selections, which are oriented, inclusive ranges of characters.
Selections have an anchor and a cursor. Most commands move both of
them except when extending selections, where the anchor character stays fixed
and the cursor moves around.
2011-11-04 10:09:27 +01:00
2020-01-01 23:47:41 +01:00
See https://vimeo.com/82711574
2013-12-26 12:59:30 +01:00
2021-06-13 16:54:19 +02:00
Join us on libera IRC `#Kakoune`
2014-01-03 21:17:33 +01:00
2013-12-31 20:40:09 +01:00
Features
2015-04-03 19:42:12 +02:00
~~~~~~~~
2013-12-31 20:40:09 +01:00
2014-03-23 21:35:11 +01:00
* Multiple selections as a central way of interacting
2013-12-31 20:40:09 +01:00
* Powerful selection manipulation primitives
- Select all regex matches in current selections
2014-01-28 14:53:44 +01:00
- Keep selections containing/not containing a match for a given regex
2013-12-31 20:40:09 +01:00
- Split current selections with a regex
- Text objects (paragraph, sentence, nestable blocks)
* Powerful text manipulation primitives
- Align selections
- Rotate selection contents
- Case manipulation
- Indentation
- Piping each selection to external filter
2014-05-12 20:02:15 +02:00
* Client-Server architecture
- Multiple clients on the same editing session
- Use tmux or your X11 window manager to manage windows
2013-12-31 20:40:09 +01:00
* Simple interaction with external programs
2014-01-28 14:53:44 +01:00
* Automatic contextual help
* Automatic as you type completion
2013-12-31 20:40:09 +01:00
* Macros
* Hooks
* Syntax Highlighting
2014-06-16 02:18:11 +02:00
- Supports multiple languages in the same buffer
- Highlight a buffer differently in different windows
2013-12-31 20:40:09 +01:00
2015-05-07 01:34:50 +02:00
Screenshots
2015-05-07 01:36:32 +02:00
~~~~~~~~~~~
2015-05-07 01:34:50 +02:00
2015-06-04 08:52:46 +02:00
[[screenshot-i3]]
2015-05-07 01:34:50 +02:00
.Kakoune in i3
image::doc/screenshot-i3.gif[Kakoune in i3]
[[screenshot-tmux]]
.Kakoune in tmux
image::doc/screenshot-tmux.gif[Kakoune in tmux]
2015-04-03 19:42:12 +02:00
Getting started
---------------
2011-11-04 15:05:05 +01:00
Building
2015-04-03 19:42:12 +02:00
~~~~~~~~
2011-11-04 15:05:05 +01:00
2022-04-13 04:26:39 +02:00
Kakoune's dependencies are:
2011-11-04 15:28:29 +01:00
2022-03-06 00:03:00 +01:00
* A {cpp}20 compliant compiler (GCC >= 10.3 or clang >= 11) along with its
2021-11-25 21:27:10 +01:00
associated {cpp} standard library (libstdc{pp} >= 10 or libc{pp})
2011-11-04 15:05:05 +01:00
2016-12-20 04:17:32 +01:00
To build, just type *make* in the src directory.
2017-11-29 23:04:22 +01:00
To generate man pages, type *make man* in the src directory.
2011-11-04 10:09:27 +01:00
2013-12-31 20:40:09 +01:00
Kakoune can be built on Linux, MacOS, and Cygwin. Due to Kakoune relying heavily
2015-06-04 08:52:46 +02:00
on being in a Unix-like environment, no native Windows version is planned.
2013-12-31 20:40:09 +01:00
2013-12-23 22:41:42 +01:00
Installing
2015-04-03 19:42:12 +02:00
~~~~~~~~~~
2013-12-23 22:41:42 +01:00
2022-04-13 04:26:39 +02:00
In order to install *kak* on your system, rather than running it directly from
2021-07-31 21:00:36 +02:00
its source directory, type *make install*. You can specify the `PREFIX` and
2015-04-03 19:58:26 +02:00
`DESTDIR` if needed.
2013-12-23 22:41:42 +01:00
2015-04-03 19:42:12 +02:00
[TIP]
2018-05-26 11:52:37 +02:00
.Homebrew (macOS) or Linuxbrew
2015-04-03 19:42:12 +02:00
====
2016-12-15 00:47:32 +01:00
---------------------------------
2018-05-23 15:35:47 +02:00
brew install kakoune
2016-12-15 00:47:32 +01:00
---------------------------------
2015-04-03 19:42:12 +02:00
====
2015-03-24 14:56:16 +01:00
2021-02-04 00:10:50 +01:00
[TIP]
.MacPorts (macOS)
====
---------------------------------
sudo port selfupdate
sudo port install kakoune
---------------------------------
====
2015-04-03 19:42:12 +02:00
[TIP]
2017-11-13 17:06:53 +01:00
.Fedora supported versions and Rawhide
2015-04-03 19:42:12 +02:00
====
2019-11-29 07:47:05 +01:00
---------------------------------
dnf install kakoune
---------------------------------
====
2015-03-31 16:29:50 +02:00
2019-12-19 15:24:45 +01:00
[TIP]
.Fedora daily builds
====
Use the https://copr.fedoraproject.org/coprs/jkonecny/kakoune/[copr] repository.
---------------------------------
dnf copr enable jkonecny/kakoune
dnf install kakoune
---------------------------------
====
2019-11-29 07:47:05 +01:00
[TIP]
.RHEL/CentOS 8
====
Kakoune can be found in the https://src.fedoraproject.org/rpms/kakoune/tree/epel8[EPEL8 repositories].
2015-03-24 21:13:27 +01:00
---------------------------------
dnf install kakoune
---------------------------------
2015-04-03 19:42:12 +02:00
====
2015-03-24 21:13:27 +01:00
2015-04-03 19:42:12 +02:00
[TIP]
.Arch Linux
====
2018-05-25 19:10:17 +02:00
Kakoune is found in the https://www.archlinux.org/packages/community/x86_64/kakoune/[repositories].
2016-12-15 23:12:28 +01:00
--------------------------------------------------
2018-05-25 19:10:17 +02:00
pacman -S kakoune
2016-12-15 23:12:28 +01:00
--------------------------------------------------
2015-04-03 19:42:12 +02:00
====
2015-03-30 20:13:04 +02:00
2016-05-11 00:08:56 +02:00
[TIP]
.Gentoo
====
Kakoune is found in portage as
2021-07-03 15:36:38 +02:00
https://packages.gentoo.org/packages/app-editors/kakoune[app-editors/kakoune].
2020-11-10 16:29:39 +01:00
--------------------------------
emerge kakoune
--------------------------------
2021-07-03 15:36:38 +02:00
https://wiki.gentoo.org/wiki/Kakoune[Installation and Gentoo specific documentation] is available.
2016-05-11 00:08:56 +02:00
====
2015-04-03 19:42:12 +02:00
[TIP]
.Exherbo
====
2015-03-25 14:46:41 +01:00
--------------------------------
cave resolve -x repository/mawww
cave resolve -x kakoune
--------------------------------
2015-04-03 19:42:12 +02:00
====
2015-03-25 14:46:41 +01:00
2015-11-13 16:40:00 +01:00
[TIP]
.openSUSE
====
2019-12-19 15:24:45 +01:00
Kakoune can be found in the https://software.opensuse.org/package/kakoune[repositories].
2019-10-01 18:40:52 +02:00
---------------------------
2015-11-13 16:40:00 +01:00
sudo zypper install kakoune
2019-10-01 18:40:52 +02:00
---------------------------
2015-11-13 16:40:00 +01:00
====
2017-08-28 22:20:46 +02:00
[TIP]
.Ubuntu
====
2022-03-20 16:15:16 +01:00
Kakoune can be found in the Ubuntu repositories.
----------------------------
sudo apt install kakoune
----------------------------
If you want to compile from source on 20.04 or earlier, you must force the build to use GCC 10, which is not the default. Also, make sure you have .local/bin in your path so that kak is available after the installation.
2017-08-28 22:20:46 +02:00
2017-11-01 07:15:11 +01:00
----------------------------------------------------------------
2017-08-28 22:20:46 +02:00
git clone https://github.com/mawww/kakoune.git && cd kakoune/src
2022-03-20 16:15:16 +01:00
CXX=g++-10 make
2017-08-28 22:20:46 +02:00
PREFIX=$HOME/.local make install
2017-11-01 07:15:11 +01:00
----------------------------------------------------------------
2017-08-28 22:20:46 +02:00
====
2020-08-06 17:12:45 +02:00
[TIP]
.Debian
====
Kakoune can be found in Debian 9 (Stretch) and later releases.
---------------------------
sudo apt install kakoune
---------------------------
====
2018-04-13 13:16:34 +02:00
[TIP]
.FreeBSD
====
Kakoune is available in the official ports tree as
https://www.freshports.org/editors/kakoune[editors/kakoune].
A binary package is also available and can be installed with
--------------------------------------------------
pkg install kakoune
--------------------------------------------------
====
2019-12-07 21:53:42 +01:00
[TIP]
.OpenBSD
====
2020-06-15 10:18:46 +02:00
Building on OpenBSD 6.7 amd64.
2019-12-07 21:53:42 +01:00
--------------------------------------------------
# pkg_add git gmake
# git clone https://github.com/mawww/kakoune
# cd kakoune
# export CXX=clang++
# gmake install
--------------------------------------------------
2020-06-15 10:18:46 +02:00
Kakoune is available in the 6.7-current port tree as
http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/editors/kakoune/[editors/kakoune]
A binary package is also available for -current snapshot and can be installed with
--------------------------------------------------
# pkg_add kakoune
--------------------------------------------------
2019-12-07 21:53:42 +01:00
Running with support for plugins.
--------------------------------------------------
# pkg_add dash
$ export KAKOUNE_POSIX_SHELL=/usr/local/bin/dash
$ kak
--------------------------------------------------
====
2018-08-11 00:10:19 +02:00
[TIP]
.Solus
====
Kakoune is available in the Solus stable repository.
It can be installed with
---------------------
eopkg install kakoune
---------------------
2018-09-12 16:58:41 +02:00
====
[TIP]
.Void
====
Kakoune is available in the repositories.
It can be installed with
2018-09-13 12:45:43 +02:00
-----------------------
2018-09-12 16:58:41 +02:00
xbps-install -S kakoune
2018-09-13 12:45:43 +02:00
-----------------------
2018-09-12 16:58:41 +02:00
====
[TIP]
.Termux
====
Kakoune is available in the repositories.
It can be installed with
2018-09-13 12:45:43 +02:00
-------------------
2018-09-12 16:58:41 +02:00
pkg install kakoune
2018-09-13 12:45:43 +02:00
-------------------
2018-08-11 00:10:19 +02:00
====
2021-07-31 21:00:36 +02:00
[TIP]
.Nix
====
--------------------------------
nix-env -iA nixpkgs.kakoune
--------------------------------
====
2013-01-07 14:25:19 +01:00
Running
2015-04-03 19:42:12 +02:00
~~~~~~~
2013-01-07 14:25:19 +01:00
2022-04-13 04:26:39 +02:00
Running *kak* launches a new kak session with a client on local terminal.
2019-06-23 08:38:45 +02:00
Run *kak -help* to discover the valid command line flags.
2013-01-07 14:25:19 +01:00
2017-01-05 12:28:22 +01:00
Configuration
^^^^^^^^^^^^^
There are two directories containing Kakoune's scripts:
* `runtime`: located in `../share/kak/` relative to the `kak` binary
contains the system scripts, installed with Kakoune.
2018-09-01 08:17:58 +02:00
* `userconf`: located in `$XDG_CONFIG_HOME/kak/`, which will fallback
to `$HOME/.config/kak/` if `$XDG_CONFIG_HOME` is not set, containing
the user configuration.
2017-01-05 12:28:22 +01:00
2017-01-05 20:30:38 +01:00
Unless `-n` is specified, Kakoune will load its startup script located
2017-01-05 12:28:22 +01:00
at `${runtime}/kakrc` relative to the `kak` binary. This startup script
is responsible for loading the user configuration.
First, Kakoune will search recursively for `.kak` files in the `autoload`
directory. It will first look for an `autoload` directory at
`${userconf}/autoload` and will fallback to `${runtime}/autoload` if
2017-04-21 12:32:47 +02:00
it does not exist.
2017-01-05 12:28:22 +01:00
Once all those files are loaded, Kakoune will try to source
2022-04-13 04:26:39 +02:00
`${runtime}/kakrc.local`, which is expected to contain distribution provided
2017-01-05 12:28:22 +01:00
configuration.
2022-04-13 04:26:39 +02:00
Finally, the user configuration will load from `${userconf}/kakrc`.
2017-01-05 12:28:22 +01:00
NOTE: If you create a user `autoload` directory in `${userconf}/autoload`,
2022-04-13 04:26:39 +02:00
the system one at `${runtime}/autoload` will not load anymore. You can
2017-01-05 12:28:22 +01:00
add a symbolic link to it (or to individual scripts) inside
`${userconf}/autoload` to keep loading system scripts.
2013-12-23 22:41:42 +01:00
2015-04-03 19:42:12 +02:00
Basic Interaction
-----------------
Selections
~~~~~~~~~~
The main concept in Kakoune is the selection. A selection is an inclusive,
2020-05-02 17:36:58 +02:00
directed range of characters. A selection has two ends, the anchor and the
2015-04-03 19:42:12 +02:00
cursor.
There is always at least one selection, and a selection is always at least
2022-09-05 12:22:05 +02:00
one character (in which case the anchor and cursor of the selection are
2015-04-03 19:42:12 +02:00
on the same character).
Normal Mode
~~~~~~~~~~~
In normal mode, keys are not inserted directly inside the buffer, but are editing
2022-04-13 04:26:39 +02:00
commands. These commands provide ways to manipulate either the selections themselves
2015-04-03 19:42:12 +02:00
or the selected text.
Insert Mode
~~~~~~~~~~~
2017-04-21 12:32:47 +02:00
When entering insert mode, keys are now directly inserted before each
selection's cursor. Some additional keys are recognised in insert mode:
2015-11-15 14:25:02 +01:00
* `<esc>`: leave insert mode
* `<backspace>`: delete characters before cursors
* `<del>`: delete characters under cursors
2022-04-13 04:26:39 +02:00
* `<left>, <right>, <up>, <down>`: move cursors in given direction
* `<home>`: move cursors to line beginning
* `<end>`: move cursors to line ending
2015-11-15 14:25:02 +01:00
* `<c-n>`: select next completion candidate
* `<c-p>`: select previous completion candidate
* `<c-x>`: explicit insert completion query, followed by:
- `f`: explicit file completion
- `w`: explicit word completion
- `l`: explicit line completion
* `<c-o>`: disable automatic completion for this insert session
* `<c-r>`: insert contents of the register given by next key
* `<c-v>`: insert next keystroke directly into the buffer,
2022-04-13 04:26:39 +02:00
without interpreting it
2015-11-15 14:25:02 +01:00
2022-04-13 04:26:39 +02:00
* `<c-u>`: commit changes up to now as a single undo group
2015-11-15 14:25:02 +01:00
* `<a-;>`: escape to normal mode for a single command
2015-04-03 19:42:12 +02:00
Movement
~~~~~~~~
2011-11-04 10:09:27 +01:00
2022-04-13 04:26:39 +02:00
See <<Appending>> below for instructions on extending (appending to) the current selection in order to select more text.
2018-12-18 13:27:40 +01:00
2015-06-04 08:52:46 +02:00
* `h`: select the character on the left of selection end
2015-04-03 19:58:26 +02:00
* `j`: select the character below the selection end
* `k`: select the character above the selection end
2015-06-04 08:52:46 +02:00
* `l`: select the character on the right of selection end
2011-11-04 10:09:27 +01:00
2018-12-18 13:28:14 +01:00
* `w`: select the word and following whitespaces on the right of selection end
2015-04-03 19:58:26 +02:00
* `b`: select preceding whitespaces and the word on the left of selection end
* `e`: select preceding whitespaces and the word on the right of selection end
2022-04-13 04:26:39 +02:00
* `<a-[wbe]>`: same as [wbe], but select WORD instead of word
2011-11-04 10:09:27 +01:00
2018-12-18 13:30:29 +01:00
* `f`: select to (including) the next occurrence of the given character
2018-12-18 13:28:14 +01:00
* `t`: select until (excluding) the next occurrence of the given character
2016-12-27 07:56:06 +01:00
* `<a-[ft]>`: same as [ft] but in the other direction
2016-02-02 21:15:47 +01:00
2015-07-15 20:03:53 +02:00
* `m`: select to matching character
* `M`: extend selection to matching character
2022-11-06 10:10:33 +01:00
* `x`: expand selections to contain full lines (including end-of-lines)
2022-11-03 05:56:02 +01:00
* `<a-x>`: trim selections to only contain full lines (not including last
2013-04-16 14:30:11 +02:00
end-of-line)
2011-11-22 15:32:05 +01:00
2015-04-03 19:58:26 +02:00
* `%`: select whole buffer
2011-11-04 10:09:27 +01:00
2016-12-27 07:56:06 +01:00
* `<a-h>`: select to line begin
* `<a-l>`: select to line end
2011-11-04 10:09:27 +01:00
2015-04-03 19:58:26 +02:00
* `/`: search (select next match)
2016-12-27 07:56:06 +01:00
* `<a-/>`: search (select previous match)
2015-04-03 19:58:26 +02:00
* `?`: search (extend to next match)
2016-12-27 07:56:06 +01:00
* `<a-?>`: search (extend to previous match)
2015-04-03 19:58:26 +02:00
* `n`: select next match
* `N`: add a new selection with next match
2016-12-27 07:56:06 +01:00
* `<a-n>`: select previous match
* `<a-N>`: add a new selection with previous match
2013-01-03 14:01:48 +01:00
2017-10-04 12:47:56 +02:00
* `pageup, <c-b>`: scroll one page up
* `pagedown, <c-f>`: scroll one page down
* `<c-u>`: scroll half a page up
* `<c-d>`: scroll half a page down
2012-10-16 18:53:05 +02:00
2018-03-29 14:18:16 +02:00
* `)`: rotate selections (the main selection becomes the next one)
* `(`: rotate selections backwards
2013-10-02 20:10:31 +02:00
2015-04-03 19:58:26 +02:00
* `;`: reduce selections to their cursor
2017-04-21 12:32:47 +02:00
* `<a-;>`: flip the selections' direction
2016-12-27 07:56:06 +01:00
* `<a-:>`: ensure selections are in forward direction (cursor after anchor)
2014-07-05 13:01:12 +02:00
2016-12-27 07:56:06 +01:00
* `<a-.>`: repeat last object or `f`/`t` selection command.
2016-12-14 21:45:15 +01:00
2018-03-29 14:18:16 +02:00
* `_`: trim selections
2014-07-05 13:01:12 +02:00
2014-03-23 21:35:11 +01:00
A word is a sequence of alphanumeric characters or underscore, a WORD is a
sequence of non whitespace characters.
2011-11-04 10:09:27 +01:00
Appending
2015-04-03 19:42:12 +02:00
~~~~~~~~~
2011-11-04 10:09:27 +01:00
2018-12-18 13:27:40 +01:00
For most <<Movement>> commands, using `Shift` extends the current selection
instead of replacing it.
Examples:
* `wWW` selects 3 consecutive words: first `w` selects a word, then `WW` extends the selection two words further.
* `f/F/` selects up to and including the second `/` character forward.
2011-11-04 10:09:27 +01:00
Using Counts
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~
2011-11-04 10:09:27 +01:00
Most selection commands also support counts, which are entered before the
command itself.
2017-04-21 12:32:47 +02:00
For example, `3W` selects 3 consecutive words and `3w` select the third word on
2011-11-04 10:09:27 +01:00
the right of selection end.
2017-02-19 14:18:00 +01:00
Disabling Hooks
~~~~~~~~~~~~~~~
Any normal mode command can be prefixed with `\` which will disable hook execution
for the duration for the command (including the duration of modes the command could
move to, so `\i` will disable hooks for the whole insert session).
As autoindentation is implemented in terms of hooks, this can be used to disable
it when pasting text.
2011-11-04 10:09:27 +01:00
Changes
2015-04-03 19:42:12 +02:00
~~~~~~~
2011-11-04 10:09:27 +01:00
2022-09-10 15:23:50 +02:00
* `i`: enter insert mode before each selection
* `a`: enter insert mode after each selection
* `d`: yank and delete each selection
* `c`: yank and delete each selection and enter insert mode
2015-04-03 19:58:26 +02:00
* `.`: repeat last insert mode change (`i`, `a`, or `c`, including
2014-05-05 19:09:16 +02:00
the inserted text)
2011-11-04 10:09:27 +01:00
2022-09-10 15:23:50 +02:00
* `<a-d>`: delete each selection
* `<a-c>`: delete each selection and enter insert mode
2017-07-11 06:49:29 +02:00
2022-09-10 15:23:50 +02:00
* `I`: enter insert mode at each selection begin line start
* `A`: enter insert mode at each selection end line end
2016-10-24 20:41:05 +02:00
* `o`: enter insert mode in one (or given count) new lines below
2022-09-10 15:23:50 +02:00
each selection end
2016-10-24 20:41:05 +02:00
* `O`: enter insert mode in one (or given count) new lines above
2022-09-10 15:23:50 +02:00
each selection begin
2011-11-04 10:09:27 +01:00
2022-09-10 15:23:50 +02:00
* `<a-o>`: add an empty line below each cursor
* `<a-O>`: add an empty line above each cursor
2017-07-10 11:55:19 +02:00
2015-04-03 19:58:26 +02:00
* `y`: yank selections
2022-09-10 15:23:50 +02:00
* `p`: paste after each selection end
* `P`: paste before each selection begin
* `<a-p>`: paste all after each selection end
* `<a-P>`: paste all before each selection begin
* `R`: replace each selection with yanked text
* `<a-R>`: replace each selection with every yanked text
2014-07-03 01:25:39 +02:00
2015-04-03 19:58:26 +02:00
* `r`: replace each character with the next entered one
2011-11-04 10:09:27 +01:00
2016-12-27 07:56:06 +01:00
* `<a-j>`: join selected lines
* `<a-J>`: join selected lines and select spaces inserted
2013-04-23 18:54:31 +02:00
in place of line breaks
2022-09-05 12:22:05 +02:00
* `<a-_>`: merge contiguous selections together (works across lines as well)
2011-11-22 15:32:05 +01:00
2016-12-27 19:50:55 +01:00
* `<gt> (>)`: indent selected lines
2016-12-27 07:56:06 +01:00
* `<a-gt>`: indent selected lines, including empty lines
2016-12-27 19:50:55 +01:00
* `<lt> (<)`: deindent selected lines
2016-12-27 07:56:06 +01:00
* `<a-lt>`: deindent selected lines, do not remove incomplete
2013-11-14 01:20:49 +01:00
indent (3 leading spaces when indent is 4)
2013-01-03 14:01:48 +01:00
2017-04-21 12:32:47 +02:00
* `|`: pipe each selection through the given external filter program
2022-09-05 12:22:05 +02:00
and replace the selection with its output.
2017-04-21 12:32:47 +02:00
* `<a-|>`: pipe each selection through the given external filter program
2014-12-13 14:17:05 +01:00
and ignore its output
2022-09-10 15:23:50 +02:00
* `!`: insert command output before each selection
* `<a-!>`: append command output after each selection
2011-12-28 20:09:54 +01:00
2015-04-03 19:58:26 +02:00
* `u`: undo last change
2023-06-17 09:30:43 +02:00
* `<c-k>`: move backward in history
2023-11-03 22:30:29 +01:00
* `<a-u>`: undo selection changes
2015-04-03 19:58:26 +02:00
* `U`: redo last change
2023-06-17 10:14:15 +02:00
* `<c-j>`: move forward in history
2023-11-03 22:30:29 +01:00
* `<a-U>`: redo selection changes
2013-01-03 14:01:48 +01:00
2022-09-10 15:23:50 +02:00
* `&`: align selections, align the cursor of selections by inserting
2014-01-28 14:53:44 +01:00
spaces before the first character of the selection
2016-12-27 07:56:06 +01:00
* `<a-&>`: copy indent, copy the indentation of the main selection
2014-01-28 14:53:44 +01:00
(or the count one if a count is given) to all other ones
2015-04-13 14:03:43 +02:00
* ```: to lower case
2015-04-03 19:58:26 +02:00
* `~`: to upper case
2017-11-29 23:04:22 +01:00
* ``<a-`>``: swap case
2013-05-15 18:47:58 +02:00
2022-09-10 15:23:50 +02:00
* `@`: convert selected tabs to spaces, uses the buffer tabstop option or
the count parameter for tabstop.
* `<a-@>`: convert selected spaces to tabs, uses the buffer tabstop option
or the count parameter for tabstop.
2014-03-02 02:04:26 +01:00
2018-03-29 14:18:16 +02:00
* `<a-)>`: rotate selections content, if specified, the count groups
2022-09-05 12:22:05 +02:00
selections, so `3<a-)>` rotate (1, 2, 3) and (4, 5, 6)
2014-03-27 00:42:10 +01:00
independently.
2018-03-29 14:18:16 +02:00
* `<a-(>`: rotate selections content backwards
2013-10-02 20:10:31 +02:00
2013-04-11 21:15:54 +02:00
Goto Commands
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~~
2013-04-11 21:15:54 +02:00
2017-11-07 09:37:16 +01:00
Commands beginning with `g` are used to goto certain position and or buffer.
2015-06-25 20:41:07 +02:00
If a count is given prior to hitting `g`, `g` will jump to the given line.
Using `G` will extend the selection rather than jump.
2017-11-08 15:59:03 +01:00
See <<doc/pages/keys#goto-commands,`:doc keys goto-commands`>>.
2017-11-07 09:37:16 +01:00
2013-04-16 13:54:04 +02:00
View commands
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~~
2013-04-11 21:15:54 +02:00
2017-11-07 09:37:16 +01:00
Commands beginning with `v` permit to center or scroll the current
view. Using `V` will lock view mode until `<esc>` is hit
2013-04-11 21:15:54 +02:00
2017-11-08 15:59:03 +01:00
See <<doc/pages/keys#view-commands,`:doc keys view-commands`>>.
2015-11-05 14:39:29 +01:00
2015-06-25 15:00:50 +02:00
Marks
~~~~~
Current selections position can be saved in a register and restored later on.
2015-08-19 22:16:26 +02:00
2017-11-10 18:06:38 +01:00
See <<doc/pages/keys#marks,`:doc keys marks`>>.
2015-06-25 15:00:50 +02:00
2013-10-02 19:48:50 +02:00
Jump list
2015-04-03 19:42:12 +02:00
~~~~~~~~~
2013-10-02 19:48:50 +02:00
Some commands, like the goto commands, buffer switch or search commands,
2017-11-10 18:06:38 +01:00
push the previous selections to the client's jump list.
2013-10-02 19:48:50 +02:00
2017-11-10 18:06:38 +01:00
See <<doc/pages/keys#jump-list,`:doc keys jump-list`>>.
2013-10-02 19:48:50 +02:00
2011-11-16 15:15:40 +01:00
Multi Selection
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~~~~
2011-11-16 15:15:40 +01:00
Kak was designed from the start to handle multiple selections.
2015-04-03 19:58:26 +02:00
One way to get a multiselection is via the `s` key.
2011-11-16 15:15:40 +01:00
2016-03-05 19:21:29 +01:00
For example, to change all occurrences of word 'roger' to word 'marcel'
2011-11-16 15:15:40 +01:00
in a paragraph, here is what can be done:
2023-01-23 15:09:36 +01:00
* select the paragraph with `x` then enough `J`
2017-04-21 12:32:47 +02:00
* press `s` and enter roger, then enter
* now paragraph selection was replaced with multiselection of each roger in
the paragraph
* press `c` and marcel<esc> to replace rogers with marcels
2011-11-16 15:15:40 +01:00
2015-04-03 19:58:26 +02:00
A multiselection can also be obtained with `S`, which splits the current
2011-11-21 20:35:02 +01:00
selection according to the regex entered. To split a comma separated list,
2015-04-03 19:58:26 +02:00
use `S` then ', *'
2013-02-22 18:37:34 +01:00
2018-07-31 16:58:07 +02:00
The regex syntax supported by Kakoune is the based on the ECMAScript script
syntax and is described at <<doc/pages/regex#,`:doc regex`>>.
2016-02-22 22:22:05 +01:00
2015-04-03 19:58:26 +02:00
`s` and `S` share the search pattern with `/`, and hence entering an empty
2013-02-22 18:37:34 +01:00
pattern uses the last one.
2016-12-27 07:56:06 +01:00
As a convenience, `<a-s>` allows you to split the current selections on
2013-02-22 18:37:34 +01:00
line boundaries.
2011-11-21 20:35:02 +01:00
2022-04-15 00:14:17 +02:00
To clear multiple selections, use `,`. To keep only the nth selection
use `n` followed by `,`, in order to remove a selection, use `<a-,>`.
2012-01-25 22:26:41 +01:00
2016-12-27 07:56:06 +01:00
`<a-k>` allows you to enter a regex and keep only the selections that
2017-04-21 12:32:47 +02:00
contains a match for this regex. Using `<a-K>` you can keep the selections
2013-04-03 19:05:57 +02:00
not containing a match.
2022-10-06 14:28:37 +02:00
`C` duplicates selections on the lines that follow them.
`<a-C>` does the same but on the preceding lines.
2015-02-05 22:25:04 +01:00
2017-04-21 12:32:47 +02:00
`$` allows you to enter a shell command and pipe each selection to it.
2014-05-05 19:00:24 +02:00
Selections whose shell command returns 0 will be kept, other will be dropped.
2012-05-29 13:32:29 +02:00
Object Selection
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~~~~~
2012-05-29 13:32:29 +02:00
2017-11-10 18:06:38 +01:00
Objects are specific portions of text, like sentences, paragraphs, numbers…
Kakoune offers many keys allowing you to select various text objects.
See <<doc/pages/keys#object-selection,`:doc keys object-selection`>>.
2013-10-08 20:38:10 +02:00
2015-04-03 19:42:12 +02:00
Commands
--------
2013-11-14 14:59:32 +01:00
2015-04-03 19:58:26 +02:00
When pressing `:` in normal mode, Kakoune will open a prompt to enter a command.
2013-02-19 19:04:09 +01:00
2015-04-03 19:42:12 +02:00
Commands are used for non editing tasks, such as opening a buffer, writing the
2015-11-15 14:25:02 +01:00
current one, quitting, etc.
2017-11-10 18:06:38 +01:00
See <<doc/pages/keys#prompt-commands,`:doc keys prompt-commands`>>.
2013-04-02 18:46:33 +02:00
2012-08-08 00:11:36 +02:00
Basic Commands
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~~~
2012-08-08 00:11:36 +02:00
2016-04-08 18:00:24 +02:00
Some commands take an exclamation mark (`!`), which can be used to force
2016-03-12 10:13:49 +01:00
the execution of the command (i.e. to quit a modified buffer, the
command `q!` has to be used).
2017-11-10 18:06:38 +01:00
Commands starting with horizontal whitespace (e.g. a space) will not be
saved in the command history.
2017-10-03 23:00:08 +02:00
* `cd [<directory>]`: change the current directory to `<directory>`, or the home directory if unspecified
2016-12-13 19:11:45 +01:00
* `doc <topic>`: display documentation about a topic. The completion list
displays the available topics.
2016-03-12 10:13:49 +01:00
* `e[dit][!] <filename> [<line> [<column>]]`: open buffer on file, go to given
2012-08-08 00:11:36 +02:00
line and column. If file is already opened, just switch to this file.
2017-04-21 12:32:47 +02:00
Use edit! to force reloading.
* `w[rite][!] [<filename>]`: write buffer to <filename> or use its name if
2017-04-19 17:47:07 +02:00
filename is not given. If the file is write-protected, its
permissions are temporarily changed to allow saving the buffer and
restored afterwards when the write! command is used.
2015-04-03 19:58:26 +02:00
* `w[rite]a[ll]`: write all buffers that are associated to a file.
2017-08-23 08:22:23 +02:00
* `q[uit][!] [<exit status>]`: exit Kakoune, use quit! to force quitting even
if there is some unsaved buffers remaining. If specified, the client exit
status will be set to <exit status>.
* `w[a]q[!] [<exit status>]`: write the current buffer (or all buffers when
`waq` is used) and quit. If specified, the client exit status will be set
to <exit status>.
2016-04-29 22:58:04 +02:00
* `kill[!]`: terminate the current session, all the clients as well as the server,
use kill! to ignore unsaved buffers
2015-04-03 19:58:26 +02:00
* `b[uffer] <name>`: switch to buffer <name>
2016-03-12 10:13:49 +01:00
* `b[uffer]n[ext]`: switch to the next buffer
* `b[uffer]p[rev]`: switch to the previous buffer
* `d[el]b[uf][!] [<name>]`: delete the buffer <name>
2015-04-03 19:58:26 +02:00
* `source <filename>`: execute commands in <filename>
2015-07-03 22:14:08 +02:00
* `colorscheme <name>`: load named colorscheme.
2016-12-15 19:39:05 +01:00
* `rename-client <name>`: set current client name
* `rename-buffer <name>`: set current buffer name
* `rename-session <name>`: set current session name
2016-03-12 10:13:49 +01:00
* `echo [options] <text>`: show <text> in status line, with the following options:
** `-markup`: expand the markup strings in <text>
** `-debug`: print the given text to the `\*debug*` buffer
2015-04-03 19:58:26 +02:00
* `nop`: does nothing, but as with every other commands, arguments may be
2016-03-12 10:13:49 +01:00
evaluated. So nop can be used for example to execute a shell command
2022-09-05 12:22:05 +02:00
while being sure that its output will not be interpreted by kak.
2016-03-12 10:13:49 +01:00
`:%sh{ echo echo tchou }` will echo tchou in Kakoune, whereas
`:nop %sh{ echo echo tchou }` will not, but both will execute the
shell command.
2017-10-17 04:02:11 +02:00
* `fail <text>`: raise an error, uses <text> as its description
2012-08-08 00:11:36 +02:00
2016-01-03 22:48:55 +01:00
Multiple commands
~~~~~~~~~~~~~~~~~
Multiple commands can be separated either by new lines or by semicolons,
as such a semicolon must be escaped with `\;` to be considered as a literal
semicolon argument.
2017-11-01 12:49:13 +01:00
String syntax and expansions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2012-08-08 00:11:36 +02:00
2017-11-07 09:37:16 +01:00
Values, options and shell context can be interpolated in strings.
2017-11-01 12:49:13 +01:00
See <<doc/pages/expansions#,`:doc expansions`>>.
2015-09-20 18:40:06 +02:00
2015-07-17 16:54:07 +02:00
Configuration & Autoloading
---------------------------
2015-04-03 19:42:12 +02:00
Kakrc
2015-07-17 16:54:07 +02:00
~~~~~
2015-04-03 19:42:12 +02:00
2015-05-30 15:32:04 +02:00
If not launched with the `-n` switch, Kakoune will source the
2015-07-17 16:54:07 +02:00
`../share/kak/kakrc` file relative to the `kak` binary, which
will source additional files:
2015-05-30 15:32:04 +02:00
If the `$XDG_CONFIG_HOME/kak/autoload` directory exists, load every
`*.kak` files in it, and load recursively any subdirectory.
2017-04-21 12:32:47 +02:00
If it does not exist, falls back to the site wide autoload directory
2015-05-30 15:32:04 +02:00
in `../share/kak/autoload/`.
After that, if it exists, source the `$XDG_CONFIG_HOME/kak/kakrc` file
which should be used for user configuration.
In order to continue autoloading site-wide files with a local autoload
directory, just add a symbolic link to `../share/kak/autoload/` into
your local autoload directory.
2015-04-03 19:42:12 +02:00
2015-07-17 16:54:07 +02:00
Color Schemes
~~~~~~~~~~~~~
Kakoune ships with some color schemes that are installed to
`../share/kak/colors/`. If `$XDG_CONFIG_HOME/kak/colors/` is present
2016-03-05 19:21:29 +01:00
the builtin command `colorscheme` will offer completion for those
2017-04-21 12:32:47 +02:00
color schemes. If a scheme is duplicated in userspace, it will take
2015-07-17 16:54:07 +02:00
precedence.
2013-07-24 23:16:32 +02:00
Options
-------
2017-11-07 09:37:16 +01:00
Kakoune can store named and typed values that can be used both to
customize the core editor behaviour, and to keep data used by extension
scripts.
2017-11-01 12:49:13 +01:00
See <<doc/pages/options#,`:doc options`>>.
2015-04-03 19:42:12 +02:00
Advanced topics
---------------
2017-11-01 12:49:13 +01:00
Faces
2017-11-05 23:06:32 +01:00
~~~~~
2015-08-11 14:44:07 +02:00
2017-11-07 09:37:16 +01:00
Faces describe how characters are displayed on the screen: color, bold, italic...
2017-11-01 12:49:13 +01:00
See <<doc/pages/faces#,`:doc faces`>>.
2015-11-10 21:30:27 +01:00
2017-11-01 12:49:13 +01:00
Registers
~~~~~~~~~
2015-11-10 21:30:27 +01:00
2017-11-07 09:37:16 +01:00
Registers are named lists of text. They are used for various purposes,
like storing the last yanked text, or the captured groups associated with the selections.
2017-11-01 12:49:13 +01:00
See <<doc/pages/registers#,`:doc registers`>>.
2015-11-10 21:30:27 +01:00
2015-04-03 19:42:12 +02:00
Macros
~~~~~~
2015-06-04 08:52:46 +02:00
Kakoune can record and replay a sequence of key presses.
2015-04-03 19:42:12 +02:00
2017-11-10 18:06:38 +01:00
See <<doc/pages/keys#macros,`:doc keys macros`>>.
2015-04-03 19:42:12 +02:00
Search selection
~~~~~~~~~~~~~~~~
2015-04-03 19:58:26 +02:00
Using the `*` key, you can set the search pattern to the current selection.
2017-11-10 18:06:38 +01:00
See <<doc/pages/keys#searching,`:doc keys searching`>>.
2015-04-03 19:42:12 +02:00
2016-02-22 22:22:05 +01:00
Regex syntax
~~~~~~~~~~~~
2017-11-07 09:37:16 +01:00
Kakoune regex syntax is based on the ECMAScript syntax (ECMA-262 standard).
2020-05-02 17:36:58 +02:00
It always runs on Unicode codepoint sequences, not on bytes.
2017-11-07 09:37:16 +01:00
2017-11-01 12:49:13 +01:00
See <<doc/pages/regex#,`:doc regex`>>.
2016-02-22 22:22:05 +01:00
2015-04-03 19:42:12 +02:00
Exec and Eval
~~~~~~~~~~~~~
2017-11-07 09:37:16 +01:00
The `execute-keys` and `evaluate-commands` are useful for scripting
in non interactive contexts.
2017-11-01 12:49:13 +01:00
See <<doc/pages/execeval#,`:doc execeval`>>.
2013-08-04 19:34:08 +02:00
2015-04-03 19:42:12 +02:00
Insert mode completion
~~~~~~~~~~~~~~~~~~~~~~
2018-03-05 08:47:28 +01:00
Kakoune can propose completions while inserting text: filenames, words, lines…
See <<doc/pages/keys#insert-mode-completion,`:doc keys insert-mode-completion`>>.
2015-06-04 08:52:46 +02:00
2015-06-14 18:54:31 +02:00
Escape to normal mode
~~~~~~~~~~~~~~~~~~~~~
From insert mode, pressing `<a-;>` allows you to execute a single normal mode
command. This provides a few advantages:
* The selections are not modified: when leaving insert mode using `<esc>` the
selections can change, for example when insert mode was entered with `a` the
cursor will go back one char. Or if on an end of line the cursor will go back
left (if possible).
* The modes are nested: that means the normal mode can enter prompt (with `:`),
2017-01-31 23:48:24 +01:00
or any other modes (using `:on-key` or `:menu` for example), and these modes
2015-06-14 18:54:31 +02:00
will get back to the insert mode afterwards.
2016-03-05 19:21:29 +01:00
This feature is tailored for scripting/macros, as it provides a more predictable
2015-06-14 18:54:31 +02:00
behaviour than leaving insert mode with `<esc>`, executing normal mode command
and entering back insert mode (with which binding ?)
2018-02-23 14:31:28 +01:00
See <<doc/pages/modes#,`:doc modes`>>.
2011-11-29 23:37:20 +01:00
Highlighters
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~~
2011-11-08 15:30:10 +01:00
2017-11-07 09:37:16 +01:00
Manipulation of the displayed text, such as syntax coloration and wrapping
is done through highlighters.
2017-11-01 12:49:13 +01:00
See <<doc/pages/highlighters#,`:doc highlighters`>>.
2013-12-03 23:20:33 +01:00
2011-11-26 20:19:08 +01:00
Hooks
2015-04-03 19:42:12 +02:00
~~~~~
2011-11-26 20:19:08 +01:00
2017-11-07 09:37:16 +01:00
Commands can be registered to be executed when certain events arise with hooks.
2017-11-01 12:49:13 +01:00
See <<doc/pages/hooks#,`:doc hooks`>>.
2013-03-20 19:10:16 +01:00
2013-10-26 01:51:19 +02:00
Key Mapping
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~
2013-10-26 01:51:19 +02:00
2017-11-07 09:37:16 +01:00
Custom key shortcuts can be registered through mappings.
2017-11-01 12:49:13 +01:00
See <<doc/pages/mapping#,`:doc mapping`>>.
2016-09-19 10:10:41 +02:00
2019-04-19 23:13:23 +02:00
Defining Commands and Aliases
2019-04-20 10:28:41 +02:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2012-08-08 00:11:36 +02:00
2017-11-07 09:37:16 +01:00
New commands can be created using `:define-command`.
2017-11-08 15:59:03 +01:00
See <<doc/pages/commands#declaring-new-commands,`:doc commands declaring-new-commands`>>.
2017-11-07 09:37:16 +01:00
2019-04-19 23:13:23 +02:00
They can be given additional short names depending of the scope with `:alias`.
2012-09-11 13:54:43 +02:00
2019-04-19 23:13:23 +02:00
See <<doc/pages/commands#aliases,`:doc commands aliases`>>.
2014-10-30 00:22:54 +01:00
2019-04-19 23:13:23 +02:00
Some helper commands are available to define composite commands.
2014-10-30 00:22:54 +01:00
2019-04-19 23:13:23 +02:00
See <<doc/pages/commands#helpers,`:doc commands helpers`>>.
2014-10-30 00:22:54 +01:00
2017-11-10 19:50:54 +01:00
FIFO Buffers
2015-04-03 19:42:12 +02:00
~~~~~~~~~~~
2012-09-11 13:54:43 +02:00
2017-11-10 19:50:54 +01:00
FIFO buffers are very useful for running some commands asynchronously while
progressively displaying their result in Kakoune.
2013-01-03 18:57:30 +01:00
2017-11-10 19:50:54 +01:00
See <<doc/pages/buffers#fifo-buffers,`:doc buffers fifo-buffers`>>.
2012-09-12 19:54:46 +02:00
2012-11-09 18:30:24 +01:00
Menus
2015-04-03 19:42:12 +02:00
~~~~~
2012-11-09 18:30:24 +01:00
2016-12-27 07:56:06 +01:00
When a menu is displayed, you can use `j`, `<c-n>` or `<tab>` to select the next
entry, and `k`, `<c-p>` or `<shift-tab>` to select the previous one.
2012-11-09 18:30:24 +01:00
2015-04-13 14:12:13 +02:00
Using the `/` key, you can enter some regex in order to restrict available choices
2012-11-09 18:30:24 +01:00
to the matching ones.
2018-10-06 09:26:49 +02:00
Credits
-------
Thanks to https://github.com/p0nce[p0nce] for designing the
https://github.com/mawww/kakoune/blob/master/doc/kakoune_logo.svg[Kakoune
logo].
And thanks to all the
https://github.com/mawww/kakoune/graphs/contributors[contributors] who help
move the project forward!