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: 27 March 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. 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/guns/vim-clojure-static/blob/vim-release-010/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" 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