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