Editor support generalized: shared core, language server, Vim and VS Code (from dev eb5baf9cbe59)
doc/edit/ now holds a shared Python implementation of the language's structural layer (klammertext_edit.py) and a dependency-free language server (klammertext_ls.py), with integrations for Emacs, Sublime Text, Vim, and Visual Studio Code. The editor test suite in tst/ covers the core's API and CLI, the language server protocol, the VS Code extension, headless Vim, and Emacs byte-equality. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
63
doc/edit/vim/ftplugin/klammertext.vim
Normal file
63
doc/edit/vim/ftplugin/klammertext.vim
Normal file
@@ -0,0 +1,63 @@
|
||||
" Klammertext filetype plugin: comment format, the structural commands, and
|
||||
" (when Vim has +python3) fast in-process indentation and live delimiter
|
||||
" match highlighting. The implementations are in autoload/klammertext.vim;
|
||||
" the algorithms themselves are the shared Python core
|
||||
" (klammertext_edit.py — see doc/edit/README.md for how it is located).
|
||||
"
|
||||
" Commands (buffer-local):
|
||||
" :[range]KlammertextReindent reindent the range (default: whole buffer)
|
||||
" :KlammertextAlign align the @table enclosing the cursor
|
||||
" :KlammertextJumpToMatch jump between a klammer application's
|
||||
" opening and closing delimiter
|
||||
" :KlammertextCheck unbalanced/mismatched delimiters -> the
|
||||
" location list
|
||||
"
|
||||
" Default mappings (set g:klammertext_no_mappings to define none):
|
||||
" <LocalLeader>i reindent the current line (visual: the selection)
|
||||
" <LocalLeader>a align the enclosing table
|
||||
" <LocalLeader>j jump to the matching delimiter
|
||||
"
|
||||
" Reindentation is EXPLICIT-ONLY: whitespace is content in Klammertext, so
|
||||
" indentkeys is emptied and nothing reformats as a side effect of typing.
|
||||
" With +python3 the ftplugin also sets 'indentexpr', so the = operator
|
||||
" (e.g. ==, gg=G) reindents through the same shared implementation.
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
setlocal commentstring=#\ %s
|
||||
setlocal comments=b:#
|
||||
setlocal indentkeys=
|
||||
|
||||
command! -buffer -range=% KlammertextReindent
|
||||
\ call klammertext#Reindent(<line1>, <line2>)
|
||||
command! -buffer KlammertextAlign call klammertext#AlignTable()
|
||||
command! -buffer KlammertextJumpToMatch call klammertext#JumpToMatch()
|
||||
command! -buffer KlammertextCheck call klammertext#Check()
|
||||
|
||||
if !exists("g:klammertext_no_mappings")
|
||||
nnoremap <buffer> <silent> <LocalLeader>i :.KlammertextReindent<CR>
|
||||
xnoremap <buffer> <silent> <LocalLeader>i :KlammertextReindent<CR>
|
||||
nnoremap <buffer> <silent> <LocalLeader>a :KlammertextAlign<CR>
|
||||
nnoremap <buffer> <silent> <LocalLeader>j :KlammertextJumpToMatch<CR>
|
||||
endif
|
||||
|
||||
let b:undo_ftplugin = "setlocal commentstring< comments< indentkeys<"
|
||||
\ . " | delcommand KlammertextReindent"
|
||||
\ . " | delcommand KlammertextAlign"
|
||||
\ . " | delcommand KlammertextJumpToMatch"
|
||||
\ . " | delcommand KlammertextCheck"
|
||||
|
||||
" With +python3 the shared core runs in-process: 'indentexpr' makes the =
|
||||
" operator work, and the matching delimiter is highlighted live as the
|
||||
" cursor sits on one (the show-paren equivalent; a mismatch shows in red
|
||||
" with a message). Without +python3 the commands above still work — they
|
||||
" shell out to python3 — and Neovim users can get live matching from the
|
||||
" language server instead (see doc/edit/README.md).
|
||||
if has('python3')
|
||||
setlocal indentexpr=klammertext#IndentExpr()
|
||||
let b:undo_ftplugin .= " | setlocal indentexpr<"
|
||||
call klammertext#SetupMatchHighlight()
|
||||
endif
|
||||
Reference in New Issue
Block a user