xref: /vim-8.2.3635/runtime/ftplugin/clojure.vim (revision a6878375)
1" Vim filetype plugin file
2" Language:	Clojure
3" Author:	Meikel Brandmeyer <[email protected]>
4"
5" Maintainer:	Sung Pae <[email protected]>
6" URL:		https://github.com/guns/vim-clojure-static
7" License:	Same as Vim
8" Last Change:	16 February 2014
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. The '+=croql'
27" is standard ftplugin boilerplate, although it is arguably intrusive.
28setlocal formatoptions-=t formatoptions+=croql
29
30" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
31setlocal comments=n:;
32setlocal commentstring=;\ %s
33
34" Specially indented symbols from clojure.core and clojure.test.
35"
36" Clojure symbols are indented in the defn style when they:
37"
38"   * Define vars and anonymous functions
39"   * Create new lexical scopes or scopes with altered environments
40"   * Create conditional branches from a predicate function or value
41"
42" The arglists for these functions are generally in the form of [x & body];
43" Functions that accept a flat list of forms do not treat the first argument
44" specially and hence are not indented specially.
45"
46" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-009/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,doall,dorun,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,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" Take all directories of the CLOJURE_SOURCE_DIRS environment variable
61" and add them to the path option.
62"
63" This is a legacy option for VimClojure users.
64if exists('$CLOJURE_SOURCE_DIRS')
65	for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':')
66		let s:dir = fnameescape(s:dir)
67		" Whitespace escaping for Windows
68		let s:dir = substitute(s:dir, '\', '\\\\', 'g')
69		let s:dir = substitute(s:dir, '\ ', '\\ ', 'g')
70		execute "setlocal path+=" . s:dir . "/**"
71	endfor
72	let b:undo_ftplugin .= ' | setlocal path<'
73endif
74
75" Skip brackets in ignored syntax regions when using the % command
76if exists('loaded_matchit')
77	let b:match_words = &matchpairs
78	let b:match_skip = 's:comment\|string\|regex\|character'
79	let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
80endif
81
82" Win32 can filter files in the browse dialog
83if has("gui_win32") && !exists("b:browsefilter")
84	let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
85			   \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
86			   \ "Java Source Files (*.java)\t*.java\n" .
87			   \ "All Files (*.*)\t*.*\n"
88	let b:undo_ftplugin .= ' | unlet! b:browsefilter'
89endif
90
91let &cpo = s:cpo_save
92
93unlet! s:cpo_save s:setting s:dir
94
95" vim:sts=8:sw=8:ts=8:noet
96