您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. # Manually merge and source plugins
  2. eval %sh{
  3. cat $(find "$kak_config/autosource" -name '*\.kak')
  4. kak-lsp --kakoune -s $kak_session
  5. }
  6. # Initialization
  7. decl -hidden regex curword
  8. decl str termcmd 'kitty -1 sh -c'
  9. set global ui_options ncurses_assistant=none
  10. set global scrolloff 7,7
  11. set global autoreload yes
  12. set global kitty_window_type kitty
  13. set global grepcmd 'rg -iHL --column'
  14. set global modelinefmt '%opt{modeline_git_branch} %val{bufname}
  15. %val{cursor_line}:%val{cursor_char_column} {{mode_info}} {{context_info}}
  16. ◂%val{client}⊙%val{session}▸'
  17. set global connect_source "%val{config}/autosource/splug"
  18. set global connect_shell elvish
  19. set global fzf_implementation sk
  20. set global fzf_file_command fd
  21. set global fzf_highlighter bat
  22. unalias global e edit
  23. alias global e edit-or-dir
  24. alias global bd delete-buffer
  25. alias global bf buffer-first
  26. alias global bl buffer-last
  27. alias global bo buffer-only
  28. alias global bo! buffer-only-force
  29. alias global sw sudo-write
  30. alias global cdb change-directory-current-buffer
  31. alias global f find
  32. alias global c connect-terminal
  33. face global LineNumbersWrapped black
  34. addhl global/ number-lines -hlcursor -separator ' '
  35. addhl global/ column 80 default,rgb:303030
  36. addhl global/ regex '\h+$' 0:default,red
  37. addhl global/ regex \b(TODO|FIXME|XXX|NOTE)\b 0:default+rb
  38. addhl global/ show-matching
  39. addhl global/ wrap -word -indent -marker ''
  40. addhl global/ dynregex '%opt{curword}' 0:+b
  41. # Keybinds
  42. map global normal <space> ,
  43. map global normal -docstring 'remove all sels except main' <backspace> <space>
  44. map global normal -docstring 'remove main sel' <a-backspace> <a-space>
  45. map global normal -docstring 'comment line' '#' ': comment-line<ret>'
  46. map global normal -docstring 'comment block' '<a-#>' ': comment-block<ret>'
  47. map global normal -docstring 'delete to end of line' D <a-l>d
  48. map global normal -docstring 'yank to end of line' Y <a-l>
  49. map global user -docstring 'add phantom selection' f ': phantom-sel-add-selection<ret>'
  50. map global user -docstring 'clear all phantom selections' <a-f> ': phantom-sel-select-all<ret>: phantom-sel-clear<ret>'
  51. map global user -docstring 'next phantom selection' F ': phantom-sel-iterate-next<ret>'
  52. map global user -docstring 'previous phantom selection' <a-F> ': phantom-sel-iterate-prev<ret>'
  53. map global normal -docstring 'select view' <a-%> ': select-view<ret>'
  54. map global view -docstring 'select view' s '<esc>: select-view<ret>'
  55. map global user -docstring 'select selection on each line' s ': keep-selection-each-line<ret>'
  56. map global user -docstring 'drop selection on each line' S ': drop-selection-each-line<ret>'
  57. map global user -docstring 'add mark' m ': mark-word<ret>'
  58. map global user -docstring 'clear marks' M ': mark-clear<ret>'
  59. map global user -docstring 'replace mode' r ': replace<ret>'
  60. map global normal <a-space> ': fzf-mode<ret>'
  61. map global user -docstring 'expand selection' e ': expand<ret>'
  62. map global user -docstring 'expand repeat' E ': expand-repeat<ret>'
  63. map global user -docstring 'buffers…' b ': enter-buffers-mode<ret>'
  64. map global user -docstring 'buffers (lock)…' B ': enter-user-mode -lock buffers<ret>'
  65. map global user -docstring "next error" l ': lint-next-error<ret>'
  66. map global user -docstring "previous error" L ': lint-previous-error<ret>'
  67. declare-user-mode surround
  68. map global user -docstring 'surround mode' <a-s> ': enter-user-mode surround<ret>'
  69. map global surround -docstring 'surround' s ': surround<ret>'
  70. map global surround -docstring 'change' c ': change-surround<ret>'
  71. map global surround -docstring 'delete' d ': delete-surround<ret>'
  72. map global surround -docstring 'select tag' t ': select-surrounding-tag<ret>'
  73. map global surround -docstring 'auto-pairs surround' a ': auto-pairs-surround<ret>'
  74. declare-user-mode anchor
  75. map global normal ';' ': enter-user-mode anchor<ret>'
  76. map global anchor -docstring 'reduce to anchor' a '<a-;>;'
  77. map global anchor -docstring 'reduce to cursor' c ';'
  78. map global anchor -docstring 'flip cursor and anchor' f '<a-;>'
  79. map global anchor -docstring 'ensure anchor after cursor' h '<a-:><a-;>'
  80. map global anchor -docstring 'ensure cursor after anchor' l '<a-:>'
  81. map global anchor -docstring 'select cursor and anchor' s '<a-S>'
  82. declare-user-mode clipboard
  83. map global normal ',' ': enter-user-mode clipboard<ret>'
  84. map global clipboard -docstring 'clip-paste after' p '<a-!>xsel -b -o<ret>'
  85. map global clipboard -docstring 'clip-paste before' P '!xsel -b -o<ret>'
  86. map global clipboard -docstring 'clip-paste replace' R '|xsel -b -o<ret>'
  87. map global clipboard -docstring 'clip-yank' y '<a-|>xclip -i -f -sel c<ret>'
  88. map global clipboard -docstring 'clip-cut -> insert mode' c '<a-|>xclip -i -f -sel c<ret><a-c>'
  89. # Functions
  90. def toggle-highlighter -params .. -docstring 'Toggle highlighter' %{
  91. try %{
  92. addhl window/%arg{@} %arg{@}
  93. echo -markup {green} %arg{@}
  94. } catch %{
  95. rmhl window/%arg{@}
  96. echo -markup {red} %arg{@}
  97. }
  98. }
  99. def lint-on-write -docstring 'Activate linting on buffer write' %{
  100. lint-enable
  101. hook buffer BufWritePost .* lint
  102. }
  103. def format-on-write -docstring 'Format buffer on write' %{
  104. hook buffer BufWritePost .* format
  105. }
  106. def lsp-engage -docstring 'Enable language server' %{
  107. lsp-enable
  108. lsp-auto-hover-enable
  109. map global user -docstring 'Enter lsp user mode' l ': enter-user-mode lsp<ret>'
  110. map global user -docstring 'Lock lsp user mode' L ': enter-user-mode -lock lsp<ret>'
  111. }
  112. def no-tabs -params 0..1 -docstring 'Indent with spaces' %{
  113. eval %sh{ [ -n "$1" ] && printf %s "
  114. set buffer indentwidth $1
  115. set buffer tabstop $1
  116. set buffer softtabstop $1
  117. " }
  118. expandtab
  119. hook buffer InsertKey <space> %{ try %{
  120. exec -draft h<a-i><space><a-k>^\h+<ret>
  121. exec -with-hooks <tab>
  122. } }
  123. }
  124. def clean-trailing-whitespace -docstring 'Remove trailing whitespace' %{
  125. try %{ exec -draft '%s\h+$<ret>d' }
  126. }
  127. # Hooks
  128. hook global WinDisplay .* info-buffers
  129. hook global NormalIdle .* %{ try %{ exec -draft '<a-i>w: palette-status<ret>' } }
  130. hook global BufWritePost .* %{ git show-diff }
  131. hook global BufReload .* %{ git show-diff }
  132. hook global WinCreate .* %{
  133. auto-pairs-enable
  134. search-highlighter-enable
  135. }
  136. hook global BufWritePre .* %{ nop %sh{
  137. mkdir -p "$(dirname "$kak_buffile")"
  138. }}
  139. hook global NormalIdle .* %{
  140. eval -draft %{ try %{
  141. exec <space><a-i>w <a-k>\A\w+\z<ret>
  142. set buffer curword "\b\Q%val{selection}\E\b"
  143. } catch %{
  144. set buffer curword ''
  145. } }
  146. }
  147. # Filetype detection
  148. hook global BufCreate .*srcpkgs/.+/template$ %{
  149. set buffer filetype sh
  150. def xgensum %{ %sh{ xgensum -i "$kak_buffile" } }
  151. }
  152. hook global BufCreate .*/\.?((sx|xinit)(rc)?|profile) %{ set buffer filetype sh }
  153. hook global BufCreate .*\.ino %{ set buffer filetype cpp }
  154. hook global BufCreate .*\.cs %{ addhl window/java }
  155. hook global BufCreate .*\.rasi %{ set buffer filetype css }
  156. # Filetype settings
  157. hook global WinSetOption filetype=sh %{
  158. set buffer lintcmd 'shellcheck -x -fgcc'
  159. lint-on-write
  160. }
  161. hook global WinSetOption filetype=elvish %{
  162. no-tabs 2
  163. }
  164. hook global WinSetOption filetype=(go|rust|python) %{
  165. lsp-engage
  166. set global lsp_server_configuration pyls.plugins.jedi_completion.include_params=false
  167. hook window BufWritePre .* lsp-formatting-sync
  168. }
  169. hook global WinSetOption filetype=nim %{
  170. set buffer gdb_program 'nim-gdb'
  171. set buffer formatcmd "nimpretty ${kak_buffile}"
  172. set buffer makecmd 'nimble build'
  173. # set buffer lintcmd "sh -c 'cp -f $0 $0.nim;nim --stdout --colors:off --hints:off --path:$(dirname ${kak_buffile}) check $0 | sed \"s/(/:/;s/, /:/;s/)/:/\" | sed \":a;N;/\n[buf.nim]/!s/\n//;ta;P;D\"'"
  174. # set buffer lintcmd "sh -c 'nim --stdout --hints:off check $0 | sed \'s/(/:/;s/, /:/;s/)/:/\''"
  175. # lint-on-write
  176. # format-on-write
  177. no-tabs 2
  178. }