1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- " Vim filetype plugin
- " Language: Racket
- " Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
- " Previous Maintainer: Will Langstroth <will@langstroth.com>
- " URL: https://github.com/benknoble/vim-racket
- " Last Change: 2022 Aug 29
- if exists("b:did_ftplugin")
- finish
- endif
- let b:did_ftplugin = 1
- let s:cpo_save = &cpo
- set cpo&vim
- " quick hack to allow adding values
- setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94
- " Enable auto begin new comment line when continuing from an old comment line
- setlocal comments=:;;;;,:;;;,:;;,:;
- setlocal formatoptions+=r
- "setlocal commentstring=;;%s
- setlocal commentstring=#\|\ %s\ \|#
- setlocal formatprg=raco\ fmt
- " Undo our settings when the filetype changes away from Racket
- " (this should be amended if settings/mappings are added above!)
- let b:undo_ftplugin =
- \ "setlocal iskeyword< lispwords< lisp< comments< formatoptions< formatprg<"
- \. " | setlocal commentstring<"
- if !exists("no_plugin_maps") && !exists("no_racket_maps")
- " Simply setting keywordprg like this works:
- " setlocal keywordprg=raco\ docs
- " but then vim says:
- " "press ENTER or type a command to continue"
- " We avoid the annoyance of having to hit enter by remapping K directly.
- function s:RacketDoc(word) abort
- execute 'silent !raco docs --' shellescape(a:word)
- redraw!
- endfunction
- nnoremap <buffer> <Plug>RacketDoc :call <SID>RacketDoc(expand('<cword>'))<CR>
- nmap <buffer> K <Plug>RacketDoc
- " For the visual mode K mapping, it's slightly more convoluted to get the
- " selected text:
- function! s:Racket_visual_doc()
- try
- let l:old_a = @a
- normal! gv"ay
- call system("raco docs '". @a . "'")
- redraw!
- return @a
- finally
- let @a = l:old_a
- endtry
- endfunction
- xnoremap <buffer> <Plug>RacketDoc :call <SID>Racket_visual_doc()<cr>
- xmap <buffer> K <Plug>RacketDoc
- let b:undo_ftplugin .=
- \ " | silent! execute 'nunmap <buffer> K'"
- \. " | silent! execute 'xunmap <buffer> K'"
- endif
- if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
- let b:browsefilter =
- \ "Racket Source Files (*.rkt *.rktl)\t*.rkt;*.rktl\n"
- \. "All Files (*.*)\t*.*\n"
- let b:undo_ftplugin .= " | unlet! b:browsefilter"
- endif
- if exists("loaded_matchit") && !exists("b:match_words")
- let b:match_words = '#|:|#'
- let b:undo_ftplugin .= " | unlet! b:match_words"
- endif
- let &cpo = s:cpo_save
- unlet s:cpo_save
|