xref: /vim-8.2.3635/runtime/ftplugin/clojure.vim (revision fa13eef3)
1*fa13eef3SBram Moolenaar" Vim filetype plugin file
2*fa13eef3SBram Moolenaar" Language:     Clojure
3*fa13eef3SBram Moolenaar" Author:       Meikel Brandmeyer <[email protected]>
4*fa13eef3SBram Moolenaar"
5*fa13eef3SBram Moolenaar" Maintainer:   Sung Pae <[email protected]>
6*fa13eef3SBram Moolenaar" URL:          https://github.com/guns/vim-clojure-static
7*fa13eef3SBram Moolenaar" License:      Same as Vim
8*fa13eef3SBram Moolenaar" Last Change:  30 January 2013
9*fa13eef3SBram Moolenaar
10*fa13eef3SBram Moolenaar" Only do this when not done yet for this buffer
11*fa13eef3SBram Moolenaarif exists("b:did_ftplugin")
12*fa13eef3SBram Moolenaar    finish
13*fa13eef3SBram Moolenaarendif
14*fa13eef3SBram Moolenaarlet b:did_ftplugin = 1
15*fa13eef3SBram Moolenaar
16*fa13eef3SBram Moolenaarlet s:cpo_save = &cpo
17*fa13eef3SBram Moolenaarset cpo&vim
18*fa13eef3SBram Moolenaar
19*fa13eef3SBram Moolenaarlet b:undo_ftplugin = 'setlocal define< formatoptions< comments< commentstring<'
20*fa13eef3SBram Moolenaar
21*fa13eef3SBram Moolenaar" There will be false positives, but this is better than missing the whole set
22*fa13eef3SBram Moolenaar" of user-defined def* definitions.
23*fa13eef3SBram Moolenaarsetlocal define=\\v[(/]def(ault)@!\\S*
24*fa13eef3SBram Moolenaar
25*fa13eef3SBram Moolenaar" Remove 't' from 'formatoptions' to avoid auto-wrapping code. The '+=croql'
26*fa13eef3SBram Moolenaar" is standard ftplugin boilerplate, although it is arguably intrusive.
27*fa13eef3SBram Moolenaarsetlocal formatoptions-=t formatoptions+=croql
28*fa13eef3SBram Moolenaar
29*fa13eef3SBram Moolenaar" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
30*fa13eef3SBram Moolenaarsetlocal comments=n:;
31*fa13eef3SBram Moolenaarsetlocal commentstring=;\ %s
32*fa13eef3SBram Moolenaar
33*fa13eef3SBram Moolenaar" Provide insert mode completions for special forms and clojure.core. As
34*fa13eef3SBram Moolenaar" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
35*fa13eef3SBram Moolenaar" 'completefunc' so that the user has some form of completion available when
36*fa13eef3SBram Moolenaar" 'omnifunc' is set and no REPL connection exists.
37*fa13eef3SBram Moolenaarfor s:setting in ['omnifunc', 'completefunc']
38*fa13eef3SBram Moolenaar    if exists('&' . s:setting) && empty(eval('&' . s:setting))
39*fa13eef3SBram Moolenaar        execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
40*fa13eef3SBram Moolenaar        let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
41*fa13eef3SBram Moolenaar    endif
42*fa13eef3SBram Moolenaarendfor
43*fa13eef3SBram Moolenaar
44*fa13eef3SBram Moolenaar" Take all directories of the CLOJURE_SOURCE_DIRS environment variable
45*fa13eef3SBram Moolenaar" and add them to the path option.
46*fa13eef3SBram Moolenaar"
47*fa13eef3SBram Moolenaar" This is a legacy option for VimClojure users.
48*fa13eef3SBram Moolenaarif exists('$CLOJURE_SOURCE_DIRS')
49*fa13eef3SBram Moolenaar    for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':')
50*fa13eef3SBram Moolenaar        let s:dir = fnameescape(s:dir)
51*fa13eef3SBram Moolenaar        " Whitespace escaping for Windows
52*fa13eef3SBram Moolenaar        let s:dir = substitute(s:dir, '\', '\\\\', 'g')
53*fa13eef3SBram Moolenaar        let s:dir = substitute(s:dir, '\ ', '\\ ', 'g')
54*fa13eef3SBram Moolenaar        execute "setlocal path+=" . s:dir . "/**"
55*fa13eef3SBram Moolenaar    endfor
56*fa13eef3SBram Moolenaar    let b:undo_ftplugin .= ' | setlocal path<'
57*fa13eef3SBram Moolenaarendif
58*fa13eef3SBram Moolenaar
59*fa13eef3SBram Moolenaar" Skip brackets in ignored syntax regions when using the % command
60*fa13eef3SBram Moolenaarif exists('loaded_matchit')
61*fa13eef3SBram Moolenaar    let b:match_words = &matchpairs
62*fa13eef3SBram Moolenaar    let b:match_skip = 's:comment\|string\|regex\|character'
63*fa13eef3SBram Moolenaar    let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
64*fa13eef3SBram Moolenaarendif
65*fa13eef3SBram Moolenaar
66*fa13eef3SBram Moolenaar" Win32 can filter files in the browse dialog
67*fa13eef3SBram Moolenaarif has("gui_win32") && !exists("b:browsefilter")
68*fa13eef3SBram Moolenaar    let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
69*fa13eef3SBram Moolenaar                       \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
70*fa13eef3SBram Moolenaar                       \ "Java Source Files (*.java)\t*.java\n" .
71*fa13eef3SBram Moolenaar                       \ "All Files (*.*)\t*.*\n"
72*fa13eef3SBram Moolenaar    let b:undo_ftplugin .= ' | unlet! b:browsefilter'
73*fa13eef3SBram Moolenaarendif
74*fa13eef3SBram Moolenaar
75*fa13eef3SBram Moolenaarlet &cpo = s:cpo_save
76*fa13eef3SBram Moolenaar
77*fa13eef3SBram Moolenaarunlet! s:cpo_save s:setting s:dir
78*fa13eef3SBram Moolenaar
79*fa13eef3SBram Moolenaar" vim:sts=4 sw=4 et:
80