# Is there a way to use kakoune with colemak keyboard layout?

**URL:** <https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819>\
**Category:** Help\
**Created:** [July 30, 2021, 10:34pm UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819 "2021-07-30T22:34:36Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![timber](https://discuss.kakoune.com/letter_avatar_proxy/v4/letter/t/5daacb/32.png) [@timber](https://discuss.kakoune.com/u/timber)\
**Post date:** [July 30, 2021, 10:34pm UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/1 "2021-07-30T22:34:36Z")

</div>

colemak disperses hjkl, so it would be difficult to navigate a file with colemak keyboard layout.

---

<div class="post-metadata">

**Author:** ![bravekarma](https://discuss.kakoune.com/letter_avatar_proxy/v4/letter/b/3ec8ea/32.png) [@bravekarma](https://discuss.kakoune.com/u/bravekarma)\
**Post date:** [July 31, 2021, 1:26am UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/2 "2021-07-31T01:26:36Z")

</div>

A few references from here regarding using Kakoune with alternative layouts:

> [@Kakoune for non-qwerty layouts?](https://discuss.kakoune.com/t/kakoune-for-non-qwerty-layouts/403/5):
>
> Thank you all for your answers! To conclude, I decided to use kakoune mostly without remapping because semantic meaning can be useful to learn as pointed out (though often there is no apparent semantic meaning like \<a-;\>, o, \<a-o\>, …). However, there are numerous awkward mapping for bépo (I mean really uncomfortable). I believe most of the \<a-'something'\> mappings for qwerty or maybe dvorak can be done using left hand for alt and right hand for the character, while with bépo it’s the left han…

> [@Switching keyboard layouts in insert mode](https://discuss.kakoune.com/t/switching-keyboard-layouts-in-insert-mode/553):
>
> So, [maybe you know that I’m Russian](https://discuss.kakoune.com/t/do-any-non-english-speakers-use-kakoune/480/3) or maybe not, but I know that on this forum we got several posts about using Kakoune with non qwerty layouts: [[1]](https://discuss.kakoune.com/t/do-any-non-english-speakers-use-kakoune/480) [[2]](https://discuss.kakoune.com/t/kakoune-for-non-qwerty-layouts/403/4), as well as some discussions on Kakoune’s GitHub issue tracker: [[3]](https://github.com/mawww/kakoune/issues/2151). Since for me it’s not a big deal, as I don’t really need non qwerty layout, I don’t notice the problem too much. But sometimes I want to write Russian text in Insert mode, and still be able to use Kakoune commands in normal mode. I could use system-wide layout change, but thi…

> [@Switching between different keyboard layouts](https://discuss.kakoune.com/t/switching-between-different-keyboard-layouts/1786):
>
> I thought I’d show how I handle multiple keyboard layouts in my kakoune configuration in case that’s useful to anyone. On my laptop, I alternate between using the built-in Qwerty keyboard, and an external ortholinear keyboard in Dvorak. On Dvorak, I remap H, T, N, S to H, J, K, L., but I also want an easy way to remove those mappings when I switch to Qwerty. To do that: I create a file with Dvorak-specific bindings at ~/.config/kak/keymaps/dvorak.kak, consisting of only map commands: set-optio…

---

<div class="post-metadata">

**Author:** ![JJK96](https://discuss.kakoune.com/user_avatar/discuss.kakoune.com/jjk96/32/305_2.png) [@JJK96](https://discuss.kakoune.com/u/JJK96)\
**Post date:** [August 1, 2021, 11:25am UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/3 "2021-08-01T11:25:53Z")

</div>

I’ve been using kakoune with colemak for 2 years now. Check out my mappings: [kakoune-config/colemak.kak at master · JJK96/kakoune-config · GitHub](https://github.com/JJK96/kakoune-config/blob/master/autoload/colemak.kak)

---

<div class="post-metadata">

**Author:** ![SeerLite](https://discuss.kakoune.com/user_avatar/discuss.kakoune.com/seerlite/32/1152_2.png) [@SeerLite](https://discuss.kakoune.com/u/SeerLite)\
**Post date:** [August 1, 2021, 3:45pm UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/4 "2021-08-01T15:45:14Z")

</div>

I’ve also been using Kakoune with Colemak-DH for a long time. At first I was using the default bindings to see if I could get used to them. I did, but after a while it started to get really uncomfortable because of the `hjkl`, so a few weeks ago I decided to remap every one of my bindings and even change some of non-`hjkl` bindings too to try to get them as comfortable as possible in every way. Since I was already going out of my way to learn a new more efficient layout like Colemak-DH, might as well learn a new more efficient layout for modal editing. (Yeah, I didn’t have anything better to do)

I made `mnei` (`hnei` on vanilla Colemak, `hjkl` on qwerty) the directional movement keys, and `luy` (`uio` on qwerty) the word movement keys (`bwe`). This makes the right hand responsible for all movement and I find them really intuitive.  
Then I had to cycle some other keys to fit all those changes in. Like e.g. `h` (`m` on both Colemak and qwerty) is my `i` (insert mode) now.  
I’ve been really happy with these changes and my discomfort with `hjkl` is gone.

Only problem after that was, if the default Kakoune bindings made going back to just Vim hard, these mappings made the whole TUI `hjkl` ecosystem harder haha. I’ve been remapping only the programs I use the most to use `mnei` as `hjkl` and then I fall back to a layer on [KMonad](https://github.com/kmonad/kmonad) that maps them to the arrow keys instead. It’s been working good enough for me that way.

I’d post my config but right now it’s a big mess with lots of repeated mappings for all modes. I haven’t gotten around to organizing it yet.

---

<div class="post-metadata">

**Author:** ![distrohop](https://discuss.kakoune.com/user_avatar/discuss.kakoune.com/distrohop/32/1075_2.png) [@distrohop](https://discuss.kakoune.com/u/distrohop)\
**Post date:** [May 6, 2023, 9:14pm UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/5 "2023-05-06T21:14:21Z")

</div>

I’m diving into Colemak-DH; are you still using Kak? How has your config evolved?

---

<div class="post-metadata">

**Author:** ![bravekarma](https://discuss.kakoune.com/letter_avatar_proxy/v4/letter/b/3ec8ea/32.png) [@bravekarma](https://discuss.kakoune.com/u/bravekarma)\
**Post date:** [May 7, 2023, 7:13pm UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/6 "2023-05-07T19:13:18Z")

</div>

I myself also switched to Colemak DH full time recently and the most difficult part was overcoming muscle memory for shell shortcuts and modal editors. Since I use a [programmable ergonomic keyboard](https://discuss.kakoune.com/t/ergonomic-keyboards/891), I have arrow keys mapped to the home row so I started using them instead of hjkl. It required a [few additional shortcuts](https://github.com/caksoylar/dotfiles/commit/81b2fdf893af5e8f4cc036bf497721ace5e02996) but all in all it was a pretty minimal config change.

---

<div class="post-metadata">

**Author:** ![joemaro](https://discuss.kakoune.com/letter_avatar_proxy/v4/letter/j/b487fb/32.png) [@joemaro](https://discuss.kakoune.com/u/joemaro)\
**Post date:** [June 19, 2023, 6:55pm UTC](https://discuss.kakoune.com/t/is-there-a-way-to-use-kakoune-with-colemak-keyboard-layout/1819/7 "2023-06-19T18:55:00Z")

</div>

I’ve been using kakoune for a long time now and have been using colemak way before that …  
here’s my bindings, i use an `e` and `u` for up/down and `n` and `i` for left/right, like the shape of the arrow keys … i love that config and haven’t made any changes for a long time because of how well this works:

> **expand the config**
>
> ```auto
> #MAPPINGS
> #----------------------
> # insert mode
> map global normal s i
> map global normal S I
> 
> #; works as :
> map global normal \; :
> 
> #swap t+a ... i prefer t for insertmode
> map global normal t a
> map global normal T A
> map global normal a t
> map global normal A T
> 
> #comment binding
> map global normal -docstring 'comment line' '#' ':comment-line<ret>'
> 
> #move cursor in insert mode
> map global insert <c-u> <up>
> map global insert <a-u> <up>
> map global insert <a-e> <down>
> map global insert <c-e> <down>
> map global insert <c-l> <left>
> map global insert <c-y> <right>
> map global insert <a-n> <left>
> map global insert <a-i> <right>
> 
> #select command
> map global normal j s
> map global normal J S
> 
> #undo/redo
> map global normal z u
> map global normal Z U
> 
> #cursor movement
> map global normal e j
> map global normal u k
> map global normal i l
> map global normal n h
> #word left/right
> map global normal l b
> map global normal y w
> 
> #scroll half a page up/down
> map global normal <c-e> <c-d>
> 
> #yank (copy paste)
> map global normal C y
> map global normal p P
> map global normal P p
> # map global normal <c-c> y
> 
> # extend cursor downwards
> map global normal <a-y> C
> 
> #search next/prev
> map global normal k n
> map global normal K <a-n>
> map global normal <c-k> N
> map global normal <a-k> <a-N>
> 
> #extend selection by words
> map global normal L B
> map global normal Y E
> 
> #select chars left/right
> map global normal N H
> map global normal I L
> 
> #select line up/down
> #(select to) end/beginning of line
> map global normal U K
> map global normal E J
> map global normal <c-l> <a-h>
> map global normal <c-y> <a-l> 
> 
> #leave insert mode
> map global insert <c-q> <esc>
> map global insert <c-k> <esc>
> 
> #move line up/down
> map global normal <a-u> xdkP
> map global normal <a-e> xdp
> 
> #save with Ctrl-s
> map global normal <c-s> :w<ret>
> map global insert <c-s> <esc>:w<ret>
> #exit with Ctrl-q
> map global normal <c-q> :q<ret>
> map global normal Q :q<ret>
> 
> # case in- and sensitive search
> map -docstring 'case insensitive search' global normal '/' /(?i)
> map -docstring 'case insensitive backward search' global normal '<a-/>' <a-/>(?i)
> map -docstring 'case insensitive extend search' global normal '?' ?(?i)
> map -docstring 'case insensitive backward extend-search' global normal '<a-?>' <a-?>(?i)
> 
> #move stuff left/right
> map global normal <a-n> hd
> map global normal <a-i> i<space><esc>
> 
> ```
