xref: /vim-8.2.3635/runtime/ftplugin/clojure.vim (revision 130cbfc3)
1" Vim filetype plugin file
2" Language:           Clojure
3" Maintainer:         Alex Vear <[email protected]>
4" Former Maintainers: Sung Pae <[email protected]>
5"                     Meikel Brandmeyer <[email protected]>
6" URL:                https://github.com/clojure-vim/clojure.vim
7" License:            Vim (see :h license)
8" Last Change:        2021-02-13
9
10if exists("b:did_ftplugin")
11	finish
12endif
13let b:did_ftplugin = 1
14
15let s:cpo_save = &cpo
16set cpo&vim
17
18let b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring< lispwords<'
19
20setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
21
22" There will be false positives, but this is better than missing the whole set
23" of user-defined def* definitions.
24setlocal define=\\v[(/]def(ault)@!\\S*
25
26" Remove 't' from 'formatoptions' to avoid auto-wrapping code.
27setlocal formatoptions-=t
28
29" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
30setlocal comments=n:;
31setlocal commentstring=;\ %s
32
33" Specially indented symbols from clojure.core and clojure.test.
34"
35" Clojure symbols are indented in the defn style when they:
36"
37"   * Define vars and anonymous functions
38"   * Create new lexical scopes or scopes with altered environments
39"   * Create conditional branches from a predicate function or value
40"
41" The arglists for these functions are generally in the form of [x & body];
42" Functions that accept a flat list of forms do not treat the first argument
43" specially and hence are not indented specially.
44"
45" -*- LISPWORDS -*-
46" Generated from https://github.com/clojure-vim/clojure.vim/blob/f8594e7030cdfb0b7990ac92953c77a08a7220f0/clj/src/vim_clojure_static/generate.clj
47setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,if-some,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,when-some,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test
48
49" Provide insert mode completions for special forms and clojure.core. As
50" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
51" 'completefunc' so that the user has some form of completion available when
52" 'omnifunc' is set and no REPL connection exists.
53for s:setting in ['omnifunc', 'completefunc']
54	if exists('&' . s:setting) && empty(eval('&' . s:setting))
55		execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
56		let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
57	endif
58endfor
59
60" Skip brackets in ignored syntax regions when using the % command
61if exists('loaded_matchit')
62	let b:match_words = &matchpairs
63	let b:match_skip = 's:comment\|string\|regex\|character'
64	let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
65endif
66
67" Win32 can filter files in the browse dialog
68if has("gui_win32") && !exists("b:browsefilter")
69	let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
70	                   \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
71	                   \ "Java Source Files (*.java)\t*.java\n" .
72	                   \ "All Files (*.*)\t*.*\n"
73	let b:undo_ftplugin .= ' | unlet! b:browsefilter'
74endif
75
76let &cpo = s:cpo_save
77
78unlet! s:cpo_save s:setting s:dir
79
80" vim:sts=8:sw=8:ts=8:noet
81