How to set Clojure environment with vim/Emacs

Clojure, is a dynamic programming language which tagets the JVM. It is a dialect of Lisp, and shares with Lisp the code-as-data philosophy and a powerful macro system. Clojure has many features which diferrent with OOP languages like C++.

Here I will introduce you how to set the environment on Linux. Although in the offical site, there is tutorials about this, but it’s not very clair.

I recommend that it’s better to use an editor like VIM or Emacs and a Clojure tool with Terminal. Absolutely, There is the plugins for IDEs like La Clojure with IDEAJ, etc. You can choose whatever you like.

For VIM/Emacs beginner, you’d better to follow vim tutorial first. It will last probably one hour, but worth it! Just go ahead.

Now, you should be sure that you have a machine with Linux(here I use LinuxMint) and network.

1 Install Leiningen

Leiningen is a tool for Clojure, it makes you feel more easier with Clojure.

  • Go to Leiningen, to download the script
  • Open Terminal

    cd Downloads/
    sudo mv lein /usr/local/bin/
    cd /usr/local/bin/
    sudo chmod +x lein
  • Set profiles.clj

    cd ~/.lein && vim profiles.clj
    {:user {:plugins [[cider/cider-nrepl "0.10.0-SNAPSHOT"]]
            :dependencies [[org.clojure/tools.nrepl "0.2.12"]]}}

    use :wq save it

  • To see if success

    lein version
  • Some commands

    Several tasks are available:
    change              Rewrite project.clj by applying a function.
    check               Check syntax and warn on reflection.
    classpath           Print the classpath of the current project.
    clean               Remove all files from project's target-path.
    compile             Compile Clojure source into .class files.
    deploy              Build and deploy jar to remote repository.
    deps                Download all dependencies.
    do                  Higher-order task to perform other tasks in succession.
    help                Display a list of tasks or help for a given task.
    install             Install the current project to the local repository.
    jar                 Package up all the project's files into a jar file.
    javac               Compile Java source files.
    new                 Generate project scaffolding based on a template.
    plugin              DEPRECATED. Please use the :user profile instead.
    pom                 Write a pom.xml file to disk for Maven interoperability.
    release             Perform :release-tasks.
    repl                Start a repl session either with the current project or standalone.
    retest              Run only the test namespaces which failed last time around.
    run                 Run a -main function with optional command-line arguments.
    search              Search remote maven repositories for matching jars.
    show-profiles       List all available profiles or display one if given an argument.
    test                Run the project's tests.
    trampoline          Run a task without nesting the project's JVM inside Leiningen's.
    uberjar             Package up the project files and dependencies into a jar file.
    update-in           Perform arbitrary transformations on your project map.
    upgrade             Upgrade Leiningen to specified version or latest stable.
    vcs                 Interact with the version control system.
    version             Print version for Leiningen and the current JVM.
    with-profile        Apply the given task with the profile(s) specified.
    Run `lein help $TASK` for details.
    Global Options:
      -o             Run a task offline.
      -U             Run a task after forcing update of snapshots.
      -h, --help     Print this help or help for a specific task.
      -v, --version  Print Leiningen's version.
    These aliases are available:
    downgrade, expands to upgrade


1. Install VIM

  • You can install vim from package manager

    sudo apt-get install vim

2. Configure VIM

  • Generally, vim is supported by kinds of plugins which implemented by vimscript. As a beginner, I recommend you to use other people’s vim configuration

  • Here for example, I use the configuration spf13/spf13-vim, you can install it just follow the tutorial

###3. Install vim-fireplace

  • There is many tools to develop Clojures, Here I will introduce a plugin for VIM, called vim-fireplace

  • After you install the spf13/spf13-vim, in your home directory, press CTRL-H, you will see the hidden files

  • Create a new file called .vimrc.bundles.local, and add the following command, and save it

    Bundle 'tpope/vim-fireplace'
  • Open Terminal

     vim +BundleInstall! +BundleClean +q
  • So far, we have done with Clojure environment

3. How to use

  • Open Terminal

    lein repl

    you will get return back the information of host, port, and some others

  • Open vim, new a .clj file, and type some Clojure codes
  • Execute


    fill with port address, and scope, i.e. test.clj just returned you back in the Terminal

  • Stop the cursor in the Clojure function snippet and execute

    : Eval

    thus you can see the result

III. Emacs

1. Install emacs

  • You can install emacs 24.3 in package manager

    sudo apt-get install emacs
  • Or you can go to the offical site to download and install the newer version, but I think 24.3 is enough to use

2. Configuration

  • First, you may need some simple configuration to make your emacs more effective, here I recommand a emacs.d of purcell. His configuration already integrated the environment which we need for clojure.

    git clone ~/.emacs.d
  • Or you can get your own configuration, and install cider according to this doc-tutorial

3. How to use

  • Use emacs to open a clojure file, i.e. test.clj
  • Press C-c M-j to open a REPL session, or M-c cider-jack-in
  • Then you will see a new window of buffer, you can write the clojure code directly
  • In the test.clj, press C-c C-k to compile your file, and you will see the result
  • Or you can go to the end of each statement in the file, press C-c C-e, the result will be shown after your code directly
  • C-c C-o , to clean the information of repl seesion
  • C-c C-d, to check the doc of function
  • C-c M-n, to switch the namespace of repl session

Now, Enjoy your Clojure time!

Share this on