mirror of
https://github.com/mawww/kakoune.git
synced 2024-10-05 17:18:00 +03:00
Page:
zsh zle
Pages
Ambiguous Keys
Annotated examples of "Kakoune script"
Avoid the escape key
Bar
Bc
Building
Clang
Community
Ctags
Distinguish between focused and unfocused clients in Tmux
Documenting Plugins
EditorConfig
Eval Exec
Fuzzy finder
Git integration via Tig
Grep
HTML editing
Hacking
Header files
Highlighters
Home
IDE
Implementing user mode
Increment and Decrement
Indentation and Tabulation
Info boxes
Installing Plugins
Integrating Other CLI apps
JSON RPC
Jumplist
Kak daemon helper : 1 session per project
Languages
Line flags
Manipulating dates with Chronic
Migrating from Vim popular plugins
Migrating from Vim
Normal mode commands
OpenBSD
Plugin Managers
Qalculate
Ranger
Readline
Regex
Registers & Clipboard
Registers Clipboard
Reverse search
Running commands at startup
Rust
Selections combinations
Selections
Setting Plugin Options
Shell scripting
Status line
String syntax
TUI
The window scope
Tips for building from source
Undo tree
Wc
Windows tips
Wrapping
Writing Plugins
kak ‐p
macOS tips
zsh zle
13
zsh zle
matthias-hmb edited this page 2022-10-02 13:33:48 +00:00
The Kakoune mode for zsh uses the vi (visual) mode of the zsh to emulate Kakoune select and edit mode.
How to use:
- put the snippet directly into .zshrc
- source it from .zshrc (. /home/user/.zsh/kak.zsh )
- put it in ${FPATH}/kakinit and load it in .zshrc (autoload -U kakinit; kakinit)
Recommendation to change the selection highlighter:
zle_highlight=(region:bg=BACKGROUND_COLOR,fg=COLOR)
more info in zshzle.1 man page
To open the command-line directly in Kakoune for editing, ^V is set in cmd mode (end of snippet):
bindkey -M vicmd '^V' edit-command-line
load the snippet from your ~/.zshrc
# kak mode for zsh
#emulate -L zsh
# use instead of up/down-line-or-history
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
# switch to vi (kak) mode
bindkey -v
# bindkey - visual
# don't use visual keymap - only visual mode
bindkey -N visual
# common
kak-remove-visual() {
test 1 -eq ${REGION_ACTIVE} && zle visual-mode
}
zle -N kak-remove-visual
kak-reset-visual() {
# restart, if already active
zle kak-remove-visual
zle visual-mode
}
zle -N kak-reset-visual
kak-accept-line() {
zle kak-remove-visual
zle accept-line
}
zle -N kak-accept-line
# viins
kak-cmd-mode() {
zle vi-cmd-mode
zle kak-reset-visual
}
zle -N kak-cmd-mode
# bindkey - viins
# reuse viins keymap
bindkey -M viins "^J" kak-accept-line
bindkey -M viins "^L" clear-screen
bindkey -M viins "^M" kak-accept-line
bindkey -M viins "^N" menu-complete
bindkey -M viins "^P" reverse-menu-complete
bindkey -M viins "^[" kak-cmd-mode
# vicmd
# history (search)
kak-down-line() {
# default is just history, not search
#zle down-line-or-history
zle down-line-or-beginning-search
zle vi-end-of-line
zle kak-reset-visual
}
zle -N kak-down-line
kak-up-line() {
# default is just history, not search
#zle up-line-or-history
zle up-line-or-beginning-search
zle vi-end-of-line
zle kak-reset-visual
}
zle -N kak-up-line
# indent (4 spaces)
kak-indent() {
CS=${CURSOR}
BUFFER=" ${BUFFER}"
CURSOR=$(( ${CS} + 4 ))
zle kak-reset-visual
}
zle -N kak-indent
kak-unindent() {
CS=${CURSOR}
BS=${#BUFFER}
BUFFER="${BUFFER# }"
test "${BS}" = "${#BUFFER}" || CURSOR=$(( ${CS} - 4 ))
zle kak-reset-visual
}
zle -N kak-unindent
# forward direction for selection
kak-mark-point() {
test ${CURSOR} -lt ${MARK} && zle exchange-point-and-mark
}
zle -N kak-mark-point
kak-repeat-find() {
zle kak-reset-visual
zle vi-repeat-find
}
zle -N kak-repeat-find
# swap case
kak-up-case() {
C=${CURSOR}
M=${MARK}
zle vi-up-case
zle kak-reset-visual
MARK=${M}
CURSOR=${C}
}
zle -N kak-up-case
kak-down-case() {
C=${CURSOR}
M=${MARK}
zle vi-down-case
zle kak-reset-visual
MARK=${M}
CURSOR=${C}
}
zle -N kak-down-case
# delete/yank/append/insert/paste
kak-delete() {
zle vi-delete
zle kak-reset-visual
}
zle -N kak-delete
kak-yank() {
M=${MARK}
zle vi-yank
zle kak-reset-visual
MARK=${M}
}
zle -N kak-yank
kak-add-eol() {
zle kak-remove-visual
zle vi-add-eol
}
zle -N kak-add-eol
kak-insert-bol() {
zle kak-remove-visual
zle vi-insert-bol
}
zle -N kak-insert-bol
kak-insert() {
zle kak-remove-visual
zle vi-insert
}
zle -N kak-insert
kak-add-next() {
zle kak-remove-visual
zle vi-add-next
}
zle -N kak-add-next
kak-put-before() {
CS=${CURSOR}
zle vi-put-before
zle kak-reset-visual
MARK=${CS}
}
zle -N kak-put-before
kak-put-after() {
CS=${CURSOR}
zle vi-put-after
zle kak-reset-visual
MARK=$(( ${CS} + 1 ))
}
zle -N kak-put-after
# line beginn/end
kak-beginning-of-line() {
zle vi-beginning-of-line
zle kak-reset-visual
}
zle -N kak-beginning-of-line
kak-first-non-blank() {
zle vi-first-non-blank
zle kak-reset-visual
}
zle -N kak-first-non-blank
kak-end-of-line() {
zle vi-end-of-line
zle kak-reset-visual
}
zle -N kak-end-of-line
# cursor char
kak-backward-char() {
zle vi-backward-char
zle kak-reset-visual
}
zle -N kak-backward-char
kak-forward-char() {
zle vi-forward-char
zle kak-reset-visual
}
zle -N kak-forward-char
# cursor word
kak-backward-word() {
if test 1 -lt ${NUMERIC:-0}; then
zle vi-backward-word -n $(( ${NUMERIC} - 1 ))
fi
zle kak-reset-visual
zle vi-backward-word -n 1
CS=${CURSOR}
MS=${MARK}
zle vi-forward-word -n 1
test ${MS} -eq ${CURSOR} && MARK=$(( ${CURSOR} - 1 )) || MARK=${MS}
CURSOR=${CS}
}
zle -N kak-backward-word
kak-backward-blank-word() {
if test 1 -lt ${NUMERIC:-0}; then
zle vi-backward-blank-word -n $(( ${NUMERIC} - 1 ))
fi
zle kak-reset-visual
zle vi-backward-blank-word -n 1
CS=${CURSOR}
MS=${MARK}
zle vi-forward-blank-word -n 1
test ${MS} -eq ${CURSOR} && MARK=$(( ${CURSOR} - 1 )) || MARK=${MS}
CURSOR=${CS}
}
zle -N kak-backward-blank-word
kak-forward-word-end() {
CS=${CURSOR}
if test 1 -lt ${NUMERIC:-0}; then
zle select-in-word -n 1
if test ${CS} -eq ${CURSOR}; then
zle vi-forward-word-end -n $(( ${NUMERIC} - 1 ))
else
test 2 -lt ${NUMERIC} && zle vi-forward-word-end -n $(( ${NUMERIC} -2 ))
fi
CS=${CURSOR}
fi
zle kak-reset-visual
zle select-in-word -n 1
if test ${CS} -eq ${CURSOR}; then
zle kak-reset-visual
zle vi-forward-word-end -n 1
MARK=$(( ${CS} + 1 ))
else
MARK=${CS}
fi
}
zle -N kak-forward-word-end
kak-forward-blank-word-end() {
CS=${CURSOR}
zle vi-forward-blank-word -n 1
test $(( ${CS} + 2 )) -eq ${CURSOR} && CURSOR=$(( ${CS} + 1 )) || CURSOR=${CS}
if test 1 -lt ${NUMERIC:-0}; then
zle vi-forward-blank-word-end -n $(( ${NUMERIC} - 1 ))
CURSOR=$(( ${CURSOR} + 1 ))
fi
zle kak-reset-visual
zle vi-forward-blank-word-end -n 1
}
zle -N kak-forward-blank-word-end
kak-sel-forward-word() {
CS=${CURSOR}
zle vi-forward-word -n 1
test $(( ${CS} + 1 )) = ${CURSOR} && zle vi-forward-word -n 1
if test 1 -lt ${NUMERIC:-0}; then
zle vi-forward-word -n $(( ${NUMERIC} - 1 ))
fi
zle vi-backward-char -n 1
}
zle -N kak-sel-forward-word
kak-sel-forward-blank-word() {
CS=${CURSOR}
zle vi-forward-blank-word -n 1
test $(( ${CS} + 1 )) = ${CURSOR} && zle vi-forward-blank-word -n 1
if test 1 -lt ${NUMERIC:-0}; then
zle vi-forward-blank-word -n $(( ${NUMERIC} - 1 ))
fi
zle vi-backward-char -n 1
}
zle -N kak-sel-forward-blank-word
kak-forward-word() {
CS=${CURSOR}
zle kak-reset-visual
zle vi-forward-word -n 1
CE=${CURSOR}
if test 1 -lt ${NUMERIC:-0}; then
test 2 -lt ${NUMERIC} && zle vi-forward-word -n $(( ${NUMERIC} - 2 ))
zle kak-reset-visual
zle vi-forward-word -n 1
fi
if test $(( ${CS} + 1 )) = ${CE}; then
zle kak-reset-visual
zle vi-forward-word -n 1
fi
zle vi-backward-char -n 1
}
zle -N kak-forward-word
kak-forward-blank-word() {
CS=${CURSOR}
zle kak-reset-visual
zle vi-forward-blank-word -n 1
CE=${CURSOR}
if test 1 -lt ${NUMERIC:-0}; then
test 2 -lt ${NUMERIC} && zle vi-forward-blank-word -n $(( ${NUMERIC} - 2 ))
zle kak-reset-visual
zle vi-forward-blank-word -n 1
fi
if test $(( ${CS} + 1 )) = ${CE}; then
zle kak-reset-visual
zle vi-forward-blank-word -n 1
fi
zle vi-backward-char -n 1
}
zle -N kak-forward-blank-word
# bindkey - vicmd
bindkey -N vicmd
bindkey -M vicmd -R 0-9 digit-argument
bindkey -M vicmd "^[" vi-cmd-mode
bindkey -M vicmd "^L" clear-screen
bindkey -M vicmd "^M" kak-accept-line
bindkey -M vicmd "^J" kak-accept-line
bindkey -M vicmd "<" kak-unindent
bindkey -M vicmd ">" kak-indent
bindkey -M vicmd ";" kak-reset-visual
bindkey -M vicmd "\e;" exchange-point-and-mark
bindkey -M vicmd "\e:" kak-mark-point
bindkey -M vicmd "." vi-repeat-change
bindkey -M vicmd "\e." kak-repeat-find
bindkey -M vicmd "~" kak-up-case
bindkey -M vicmd "\`" kak-down-case
bindkey -M vicmd "A" kak-add-eol
bindkey -M vicmd "I" kak-insert-bol
bindkey -M vicmd "\eJ" vi-join
bindkey -M vicmd "O" vi-open-line-above
bindkey -M vicmd "P" kak-put-before
bindkey -M vicmd "U" redo
bindkey -M vicmd "X" visual-line-mode
bindkey -M vicmd "a" kak-add-next
bindkey -M vicmd "c" vi-change
bindkey -M vicmd "d" kak-delete
bindkey -M vicmd "f" vi-find-next-char
bindkey -M vicmd "\ef" vi-find-prev-char
bindkey -M vicmd "i" kak-insert
bindkey -M vicmd "o" vi-open-line-below
bindkey -M vicmd "p" kak-put-after
bindkey -M vicmd "r" vi-replace-chars
bindkey -M vicmd "t" vi-find-next-char-skip
bindkey -M vicmd "\et" vi-find-prev-char-skip
bindkey -M vicmd "u" undo
bindkey -M vicmd "x" visual-line-mode
bindkey -M vicmd "y" kak-yank
bindkey -M vicmd "k" kak-up-line
bindkey -M vicmd "j" kak-down-line
bindkey -M vicmd "H" vi-backward-char
bindkey -M vicmd "h" kak-backward-char
# cannot distinguish between Alt and Escape
#bindkey -M vicmd "\eh" vi-beginning-of-line
bindkey -M vicmd "L" vi-forward-char
bindkey -M vicmd "l" kak-forward-char
#bindkey -M vicmd "\el" vi-end-of-line
bindkey -M vicmd "Gh" vi-beginning-of-line
bindkey -M vicmd "gh" kak-beginning-of-line
bindkey -M vicmd "gi" kak-first-non-blank
bindkey -M vicmd "Gl" vi-end-of-line
bindkey -M vicmd "gl" kak-end-of-line
bindkey -M vicmd "b" kak-backward-word
bindkey -M vicmd "B" vi-backward-word
bindkey -M vicmd "\eb" kak-backward-blank-word
bindkey -M vicmd "\eB" vi-backward-blank-word
bindkey -M vicmd "e" kak-forward-word-end
bindkey -M vicmd "E" vi-forward-word-end
bindkey -M vicmd "\ee" kak-forward-blank-word-end
bindkey -M vicmd "\eE" vi-forward-blank-word-end
bindkey -M vicmd "w" kak-forward-word
bindkey -M vicmd "W" kak-sel-forward-word
bindkey -M vicmd "\ew" kak-forward-blank-word
bindkey -M vicmd "\eW" kak-sel-forward-blank-word
# edit-command-line
autoload -Uz edit-command-line
zle -N edit-command-line
kak-edit-command-line() {
zle kak-remove-visual
zle edit-command-line
}
zle -N kak-edit-command-line
bindkey -M vicmd '^V' kak-edit-command-line
Wiki Home Page
Onboarding
Keys
- Normal mode commands
- Avoid the escape key
- Implementing user mode (Leader key)
- Kakoune explain
- Kakoune TV
Editing
User Interface
Integration with OS and other tools
- Languages
- IDE
- Bar
- Kak daemon helper : 1 session per project
- Registers & Clipboard
- macOS tips
- Windows tips
- Fuzzy finders
- JSON-RPC UI
- bc
- Qalculate!
- wc
- Shell Scripting
- Manipulating dates with Chronic
- Integrating Other CLI apps