Need help with vim-clojure-static?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

424 Stars 51 Forks Other 312 Commits 14 Opened issues


Meikel Brandmeyer's excellent Clojure runtime files

Services available


Need anything else?

Contributors list

oooo    ooooooo ooo. .oo.  .oo.
 `88.  .8' `888 `888P"Y88bP"Y88b
  `88..8'   888  888   888   888
   `888'    888  888   888   888
    `8'    o888oo888o o888o o888o

         oooo           o8o
         `888           '"'
 .ooooo.  888  .ooooo. oooooooo  oooo oooo d8b .ooooo.
d88' `"Y8 888 d88' `88b`888`888  `888 `888""8Pd88' `88b
888       888 888   888 888 888   888  888    888ooo888
888   .o8 888 888   888 888 888   888  888    888    .o
`Y8bod8P'o888o`Y8bod8P' 888 `V88V"V8P'd888b   `Y8bod8P'
                    .o. 88P
             .      `Y888P  .   o8o
           .o8            .o8   '"'
  .oooo.o.o888oo .oooo. .o888oooooo  .ooooo.
 d88(  "8  888  `P  )88b  888  `888 d88' `"Y8
 `"Y88b.   888   .oP"888  888   888 888
 o.  )88b  888 .d8(  888  888 . 888 888   .o8
 8""888P'  "888"`Y888""8o "888"o888o`Y8bod8P'

Meikel Brandmeyer's excellent Clojure runtime files, extracted from the VimClojure project for use with alternate Clojure REPL plugins.

These files ship with Vim versions 7.3.803 and later, and are periodically merged into the official Vim repository.


If you are running an old version of Vim or if you would like to keep up with development, you can install this repository like a standard Vim plugin.

If you are unfamiliar with this process, refer to the Pathogen project.

Please make sure that the following options are set in your vimrc to enable all features:

syntax on
filetype plugin indent on


  • Augmentable syntax highlighting for Clojure and ClojureScript buffers.

  • Configurable Clojure-specific indentation.

  • Basic insert mode completion for special forms and public vars in


This is bound to both the

options, which can be invoked with the insert mode mappings


If you install this project as a plugin,

files are recognized as a Clojure filetype, overriding the built-in declaration as

Third Party Extensions

  • Rainbow Parentheses


is highly recommended.

  • Extended Syntax Highlighting

is a fireplace.vim plugin that extends syntax highlighting to local, referred, and aliased vars via

This is a reimplementation of the DynamicHighlighting feature from VimClojure.

Clojure REPL Plugins

If you would like to get more serious about programming in Clojure, consider using an interactive Clojure REPL plugin.

Syntax Options

Syntax highlighting for public vars from

is provided by default, but any symbol can be matched and highlighted by adding it to the
let g:clojure_syntax_keywords = {
    \ 'clojureMacro': ["defproject", "defcustom"],
    \ 'clojureFunc': ["string/join", "string/replace"]
    \ }


in the syntax script for a complete example.

The global version of this variable is intended for users that always wish to have a certain set of symbols highlighted in a certain way, while the buffer-local version is intended for plugin authors who wish to highlight symbols dynamically.

If the buffer flag

is set, vars from
are not highlighted by default. This is useful for highlighting namespaces that have set
(:refer-clojure :only [])

uses these variables to highlight extra vars when connected to a REPL.

Indent Options

Clojure indentation differs somewhat from traditional Lisps, due in part to the use of square and curly brackets, and otherwise by community convention. These conventions are not universally followed, so the Clojure indent script offers a few configurable options, listed below.

If the current vim does not include searchpairpos(), the indent script falls back to normal

indenting, and the following options are ignored.


Set maximum scan distance of searchpairpos(). Larger values trade performance for correctness when dealing with very long forms. A value of 0 will scan without limits.

" Default
let g:clojure_maxlines = 100



option is a list of comma-separated words that mark special forms whose subforms must be indented with two spaces.

For example:

(defn bad []
      "Incorrect indentation")

(defn good [] "Correct indentation")

If you would like to specify

with a pattern instead, you can use the fuzzy indent feature:
" Default
let g:clojure_fuzzy_indent = 1
let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
let g:clojure_fuzzy_indent_blacklist = ['-fn$', '\v^with-%(meta|out-str|loading-context)$']

" Legacy comma-delimited string version; the list format above is " recommended. Note that patterns are implicitly anchored with ^ and $. let g:clojure_fuzzy_indent_patterns = 'with.,def.,let.*'

are lists of patterns that will be matched against the unqualified symbol at the head of a list. This means that a pattern like
will match all these candidates:
, and

Each candidate word is tested for special treatment in this order:

  1. Return true if word is literally in
  2. Return false if word matches a pattern in
  3. Return true if word matches a pattern in
  4. Return false and indent normally otherwise


Some forms in Clojure are indented so that every subform is indented only two spaces, regardless of

. If you have a custom construct that should be indented in this idiosyncratic fashion, you can add your symbols to the default list below.
" Default
let g:clojure_special_indent_words = 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'


Align subsequent lines in multiline strings to the column after the opening quote, instead of the same column.

For example:

(def default
  "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
  eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
  enim ad minim veniam, quis nostrud exercitation ullamco laboris
  nisi ut aliquip ex ea commodo consequat.")

(def aligned "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")

This option is off by default.

" Default
let g:clojure_align_multiline_strings = 0


By default, parenthesized compound forms that look like function calls and whose head subform is on its own line have subsequent subforms indented by two spaces relative to the opening paren:


Setting this option changes this behavior so that all subforms are aligned to the same column, emulating the default behavior of clojure-mode.el:


This option is off by default.

" Default
let g:clojure_align_subforms = 0


Pull requests and patches are strongly encouraged!

A large portion of the syntax file is generated from Clojure code in

. Generation of vim code in this fashion is preferred over hand crafting of the same.

There is an incomplete syntax test suite in

. Any additions and improvements to these tests are highly appreciated.

License and Acknowledgements

Many thanks to Meikel Brandmeyer for his excellent work on making Vim a first class Clojure editor.

Thanks to Tim Pope for advice in #vim.



Modified and relicensed under the Vim License for distribution with Vim:

See LICENSE.txt for more information.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.