xref: /vim-8.2.3635/runtime/ftplugin/clojure.vim (revision 113cb513)
1fa13eef3SBram Moolenaar" Vim filetype plugin file
2fa13eef3SBram Moolenaar" Language:           Clojure
3*113cb513SBram Moolenaar" Maintainer:         Alex Vear <[email protected]>
4942db23cSBram Moolenaar" Former Maintainers: Sung Pae <[email protected]>
5942db23cSBram Moolenaar"                     Meikel Brandmeyer <[email protected]>
6942db23cSBram Moolenaar" URL:                https://github.com/clojure-vim/clojure.vim
7942db23cSBram Moolenaar" License:            Vim (see :h license)
8*113cb513SBram Moolenaar" Last Change:        2021-10-26
9fa13eef3SBram Moolenaar
10fa13eef3SBram Moolenaarif exists("b:did_ftplugin")
11fa13eef3SBram Moolenaar	finish
12fa13eef3SBram Moolenaarendif
13fa13eef3SBram Moolenaarlet b:did_ftplugin = 1
14fa13eef3SBram Moolenaar
15fa13eef3SBram Moolenaarlet s:cpo_save = &cpo
16fa13eef3SBram Moolenaarset cpo&vim
17fa13eef3SBram Moolenaar
18a6878375SBram Moolenaarlet b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring< lispwords<'
19baca7f70SBram Moolenaar
20*113cb513SBram Moolenaarsetlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$,%,&,\|
21fa13eef3SBram Moolenaar
22fa13eef3SBram Moolenaar" There will be false positives, but this is better than missing the whole set
23fa13eef3SBram Moolenaar" of user-defined def* definitions.
24fa13eef3SBram Moolenaarsetlocal define=\\v[(/]def(ault)@!\\S*
25fa13eef3SBram Moolenaar
2676f3b1adSBram Moolenaar" Remove 't' from 'formatoptions' to avoid auto-wrapping code.
2776f3b1adSBram Moolenaarsetlocal formatoptions-=t
28fa13eef3SBram Moolenaar
29fa13eef3SBram Moolenaar" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
30fa13eef3SBram Moolenaarsetlocal comments=n:;
31fa13eef3SBram Moolenaarsetlocal commentstring=;\ %s
32fa13eef3SBram Moolenaar
33a6878375SBram Moolenaar" Specially indented symbols from clojure.core and clojure.test.
34a6878375SBram Moolenaar"
35a6878375SBram Moolenaar" Clojure symbols are indented in the defn style when they:
36a6878375SBram Moolenaar"
37a6878375SBram Moolenaar"   * Define vars and anonymous functions
38a6878375SBram Moolenaar"   * Create new lexical scopes or scopes with altered environments
39a6878375SBram Moolenaar"   * Create conditional branches from a predicate function or value
40a6878375SBram Moolenaar"
41a6878375SBram Moolenaar" The arglists for these functions are generally in the form of [x & body];
42a6878375SBram Moolenaar" Functions that accept a flat list of forms do not treat the first argument
43a6878375SBram Moolenaar" specially and hence are not indented specially.
44a6878375SBram Moolenaar"
4576f3b1adSBram Moolenaar" -*- LISPWORDS -*-
46*113cb513SBram Moolenaar" Generated from https://github.com/clojure-vim/clojure.vim/blob/62b215f079ce0f3834fd295c7a7f6bd8cc54bcc3/clj/src/vim_clojure_static/generate.clj
4776f3b1adSBram Moolenaarsetlocal 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
48a6878375SBram Moolenaar
49fa13eef3SBram Moolenaar" Provide insert mode completions for special forms and clojure.core. As
50fa13eef3SBram Moolenaar" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
51fa13eef3SBram Moolenaar" 'completefunc' so that the user has some form of completion available when
52fa13eef3SBram Moolenaar" 'omnifunc' is set and no REPL connection exists.
53fa13eef3SBram Moolenaarfor s:setting in ['omnifunc', 'completefunc']
54fa13eef3SBram Moolenaar	if exists('&' . s:setting) && empty(eval('&' . s:setting))
55fa13eef3SBram Moolenaar		execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
56fa13eef3SBram Moolenaar		let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
57fa13eef3SBram Moolenaar	endif
58fa13eef3SBram Moolenaarendfor
59fa13eef3SBram Moolenaar
60fa13eef3SBram Moolenaar" Skip brackets in ignored syntax regions when using the % command
61fa13eef3SBram Moolenaarif exists('loaded_matchit')
62fa13eef3SBram Moolenaar	let b:match_words = &matchpairs
63fa13eef3SBram Moolenaar	let b:match_skip = 's:comment\|string\|regex\|character'
64fa13eef3SBram Moolenaar	let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
65fa13eef3SBram Moolenaarendif
66fa13eef3SBram Moolenaar
67*113cb513SBram Moolenaar" Filter files in the browse dialog
68*113cb513SBram Moolenaarif (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
69fa13eef3SBram Moolenaar	let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
70fa13eef3SBram Moolenaar	                   \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
71fa13eef3SBram Moolenaar	                   \ "Java Source Files (*.java)\t*.java\n" .
72fa13eef3SBram Moolenaar	                   \ "All Files (*.*)\t*.*\n"
73fa13eef3SBram Moolenaar	let b:undo_ftplugin .= ' | unlet! b:browsefilter'
74fa13eef3SBram Moolenaarendif
75fa13eef3SBram Moolenaar
76fa13eef3SBram Moolenaarlet &cpo = s:cpo_save
77fa13eef3SBram Moolenaar
78fa13eef3SBram Moolenaarunlet! s:cpo_save s:setting s:dir
79fa13eef3SBram Moolenaar
80baca7f70SBram Moolenaar" vim:sts=8:sw=8:ts=8:noet
81