Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
matthias-hmb edited this pageOct 2, 2022 ·13 revisions

The Kakoune mode forzsh 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-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-search# switch to vi (kak) modebindkey -v# bindkey - visual# don't use visual keymap - only visual modebindkey -N visual# commonkak-remove-visual() {  test 1 -eq ${REGION_ACTIVE} && zle visual-mode}zle -N kak-remove-visualkak-reset-visual() {  # restart, if already active  zle kak-remove-visual  zle visual-mode}zle -N kak-reset-visualkak-accept-line() {  zle kak-remove-visual  zle accept-line}zle -N kak-accept-line# viinskak-cmd-mode() {  zle vi-cmd-mode  zle kak-reset-visual}zle -N kak-cmd-mode# bindkey - viins# reuse viins keymapbindkey -M viins "^J" kak-accept-linebindkey -M viins "^L" clear-screenbindkey -M viins "^M" kak-accept-linebindkey -M viins "^N" menu-completebindkey -M viins "^P" reverse-menu-completebindkey -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-linekak-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-indentkak-unindent() {  CS=${CURSOR}  BS=${#BUFFER}  BUFFER="${BUFFER#    }"  test "${BS}" = "${#BUFFER}" || CURSOR=$(( ${CS} - 4 ))  zle kak-reset-visual}zle -N kak-unindent# forward direction for selectionkak-mark-point() {  test ${CURSOR} -lt ${MARK} && zle exchange-point-and-mark}zle -N kak-mark-pointkak-repeat-find() {  zle kak-reset-visual  zle vi-repeat-find}zle -N kak-repeat-find# swap casekak-up-case() {  C=${CURSOR}  M=${MARK}  zle vi-up-case  zle kak-reset-visual  MARK=${M}  CURSOR=${C}}zle -N kak-up-casekak-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/pastekak-delete() {  zle vi-delete  zle kak-reset-visual}zle -N kak-deletekak-yank() {  M=${MARK}  zle vi-yank  zle kak-reset-visual  MARK=${M}}zle -N kak-yankkak-add-eol() {  zle kak-remove-visual  zle vi-add-eol}zle -N kak-add-eolkak-insert-bol() {  zle kak-remove-visual  zle vi-insert-bol}zle -N kak-insert-bolkak-insert() {  zle kak-remove-visual  zle vi-insert}zle -N kak-insertkak-add-next() {  zle kak-remove-visual  zle vi-add-next}zle -N kak-add-nextkak-put-before() {  CS=${CURSOR}  zle vi-put-before  zle kak-reset-visual  MARK=${CS}}zle -N kak-put-beforekak-put-after() {  CS=${CURSOR}  zle vi-put-after  zle kak-reset-visual  MARK=$(( ${CS} + 1 ))}zle -N kak-put-after# line beginn/endkak-beginning-of-line() {  zle vi-beginning-of-line  zle kak-reset-visual}zle -N kak-beginning-of-linekak-first-non-blank() {  zle vi-first-non-blank  zle kak-reset-visual}zle -N kak-first-non-blankkak-end-of-line() {  zle vi-end-of-line  zle kak-reset-visual}zle -N kak-end-of-line# cursor charkak-backward-char() {  zle vi-backward-char  zle kak-reset-visual}zle -N kak-backward-charkak-forward-char() {  zle vi-forward-char  zle kak-reset-visual}zle -N kak-forward-char# cursor wordkak-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-wordkak-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-wordkak-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-endkak-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-endkak-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-wordkak-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-wordkak-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-wordkak-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 - vicmdbindkey -N vicmdbindkey -M vicmd -R 0-9 digit-argumentbindkey -M vicmd "^[" vi-cmd-modebindkey -M vicmd "^L" clear-screenbindkey -M vicmd "^M" kak-accept-linebindkey -M vicmd "^J" kak-accept-linebindkey -M vicmd "<" kak-unindentbindkey -M vicmd ">" kak-indentbindkey -M vicmd ";" kak-reset-visualbindkey -M vicmd "\e;" exchange-point-and-markbindkey -M vicmd "\e:" kak-mark-pointbindkey -M vicmd "." vi-repeat-changebindkey -M vicmd "\e." kak-repeat-findbindkey -M vicmd "~" kak-up-casebindkey -M vicmd "\`" kak-down-casebindkey -M vicmd "A" kak-add-eolbindkey -M vicmd "I" kak-insert-bolbindkey -M vicmd "\eJ" vi-joinbindkey -M vicmd "O" vi-open-line-abovebindkey -M vicmd "P" kak-put-beforebindkey -M vicmd "U" redobindkey -M vicmd "X" visual-line-modebindkey -M vicmd "a" kak-add-nextbindkey -M vicmd "c" vi-changebindkey -M vicmd "d" kak-deletebindkey -M vicmd "f" vi-find-next-charbindkey -M vicmd "\ef" vi-find-prev-charbindkey -M vicmd "i" kak-insertbindkey -M vicmd "o" vi-open-line-belowbindkey -M vicmd "p" kak-put-afterbindkey -M vicmd "r" vi-replace-charsbindkey -M vicmd "t" vi-find-next-char-skipbindkey -M vicmd "\et" vi-find-prev-char-skipbindkey -M vicmd "u" undobindkey -M vicmd "x" visual-line-modebindkey -M vicmd "y" kak-yankbindkey -M vicmd "k" kak-up-linebindkey -M vicmd "j" kak-down-linebindkey -M vicmd "H" vi-backward-charbindkey -M vicmd "h" kak-backward-char# cannot distinguish between Alt and Escape#bindkey -M vicmd "\eh" vi-beginning-of-linebindkey -M vicmd "L" vi-forward-charbindkey -M vicmd "l" kak-forward-char#bindkey -M vicmd "\el" vi-end-of-linebindkey -M vicmd "Gh" vi-beginning-of-linebindkey -M vicmd "gh" kak-beginning-of-linebindkey -M vicmd "gi" kak-first-non-blankbindkey -M vicmd "Gl" vi-end-of-linebindkey -M vicmd "gl" kak-end-of-linebindkey -M vicmd "b" kak-backward-wordbindkey -M vicmd "B" vi-backward-wordbindkey -M vicmd "\eb" kak-backward-blank-wordbindkey -M vicmd "\eB" vi-backward-blank-wordbindkey -M vicmd "e" kak-forward-word-endbindkey -M vicmd "E" vi-forward-word-endbindkey -M vicmd "\ee" kak-forward-blank-word-endbindkey -M vicmd "\eE" vi-forward-blank-word-endbindkey -M vicmd "w" kak-forward-wordbindkey -M vicmd "W" kak-sel-forward-wordbindkey -M vicmd "\ew" kak-forward-blank-wordbindkey -M vicmd "\eW" kak-sel-forward-blank-word# edit-command-lineautoload -Uz edit-command-linezle -N edit-command-linekak-edit-command-line() {  zle kak-remove-visual  zle edit-command-line}zle -N kak-edit-command-linebindkey -M vicmd '^V' kak-edit-command-line
Clone this wiki locally

[8]ページ先頭

©2009-2025 Movatter.jp