<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="../feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Susam's Vim Pages</title>
  <subtitle>Feed for Susam's Vim Pages</subtitle>
  <link href="https://susam.net/"/>
  <link href="https://susam.net/tag/vim.xml" rel="self"/>
  <id>https://susam.net/tag/vim.xml</id>
  <updated>2019-12-07T00:00:00Z</updated>
  <author><name>Susam Pal</name></author>
  <entry>
    <title>Lisp in Vim</title>
    <link href="https://susam.net/lisp-in-vim.html"/>
    <id>urn:uuid:69973310-28f7-4e32-8531-032efd0b1824</id>
    <updated>2019-12-07T00:00:00Z</updated>
    <content type="html">
<!-- BEGIN HTML -->
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;
  Fifteen years ago, writing Lisp code in Vim was an odd adventure.
  There were no good plugins for Vim that assisted in structured
  editing of Lisp s-expressions or allowed interactive programming by
  embedding a Lisp Read-Eval-Print-Loop (REPL) or a debugger within
  the editor.  The situation has improved a lot since then.  In the
  last ten years, we have seen active development of two Vim plugins
  named &lt;a href=&quot;https://github.com/kovisoft/slimv&quot;&gt;Slimv&lt;/a&gt; and
  &lt;a href=&quot;https://github.com/l04m33/vlime&quot;&gt;Vlime&lt;/a&gt;.  Slimv is over
  10 years old now.  Vlime is more recent and less than 3 years old
  right now.  Both support interactive programming in Lisp.
&lt;/p&gt;
&lt;p&gt;
  I am going to discuss and compare both Slimv and Vlime in this
  article.  I will show how to get started with both plugins and
  introduce some of their basic features.  I will not cover everything
  though.  This is not a tutorial.  For tutorials, see
  the &lt;a href=&quot;#references&quot;&gt;&lt;em&gt;References&lt;/em&gt;&lt;/a&gt; section.
&lt;/p&gt;
&lt;p&gt;
  If you are looking only for a comparison of the two plugins or a
  quick recommendation, jump directly to the
  &lt;a href=&quot;#comparison-of-slimv-and-vlime&quot;&gt;&lt;em&gt;Comparison of Slimv and Vlime&lt;/em&gt;&lt;/a&gt;
  section or the
  &lt;a href=&quot;#quick-recommendation&quot;&gt;&lt;em&gt;Quick Recommendation&lt;/em&gt;&lt;/a&gt;
  section.
&lt;/p&gt;
&lt;h2 id=&quot;contents&quot;&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#background&quot;&gt;Background&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#lisp&quot;&gt;Lisp&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#emacs-slime&quot;&gt;Emacs: SLIME&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#vim-slimv-vlime&quot;&gt;Vim: Slimv/Vlime&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#vim-plugin-management&quot;&gt;Vim Plugin Management&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#software-versions&quot;&gt;Software Versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#get-started&quot;&gt;Get Started&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#get-started-with-slimv-and-sbcl&quot;&gt;Get Started with Slimv and SBCL&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#get-started-with-vlime-and-sbcl&quot;&gt;Get Started with Vlime and SBCL&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#get-started-with-paredit&quot;&gt;Get Started with Paredit&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#use-debugger-and-inspector&quot;&gt;Use Debugger and Inspector&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#use-debugger-and-inspector-with-slimv&quot;&gt;Use Debugger and Inspector with Slimv&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#use-debugger-and-inspector-with-vlime&quot;&gt;Use Debugger and Inspector with Vlime&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#trace-function&quot;&gt;Trace Function&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#trace-function-in-slimv&quot;&gt;Trace Function in Slimv&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#trace-function-in-vlime&quot;&gt;Trace Function in Vlime&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#nifty-features&quot;&gt;Nifty Features&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#evaluate-top-level-form&quot;&gt;Evaluate Top-Level Form&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#rainbow-parentheses&quot;&gt;Rainbow Parentheses&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#argument-list&quot;&gt;Argument List&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#omni-completion&quot;&gt;Omni-Completion&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#describe-symbol&quot;&gt;Describe Symbol&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#expand-macro&quot;&gt;Expand Macro&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#cross-reference&quot;&gt;Cross Reference&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#other-common-lisp-implementations&quot;&gt;Other Common Lisp Implementations&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#use-slimv-with-clisp&quot;&gt;Use Slimv with CLISP&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#use-slimv-with-ecl&quot;&gt;Use Slimv with ECL&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#use-vlime-with-clisp&quot;&gt;Use Vlime with CLISP&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#use-vlime-with-ecl&quot;&gt;Use Vlime with ECL&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#other-lisp-dialects&quot;&gt;Other Lisp Dialects&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#use-slimv-with-mit-gnu-scheme&quot;&gt;Use Slimv with MIT/GNU Scheme&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#use-slimv-with-clojure&quot;&gt;Use Slimv with Clojure&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#comparison-of-slimv-and-vlime&quot;&gt;Comparison of Slimv and Vlime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#quick-recommendation&quot;&gt;Quick Recommendation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#disclosure&quot;&gt;Disclosure&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#references&quot;&gt;References&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;
&lt;p&gt;
  Before we get started with Slimv and Vlime, it would be nice to take
  a brief look at the heritage behind these plugins.  These plugins
  provide Lisp development environments for Vim, so their story begins
  with Lisp.
&lt;/p&gt;
&lt;h3 id=&quot;lisp&quot;&gt;Lisp&lt;/h3&gt;
&lt;p&gt;
  Lisp is a family of programming languages with a distinctive, fully
  parenthesised prefix notation.  It is quite unlike most of the other
  popular programming languages today like C, Python, Ruby, etc.  Its
  homoiconic nature and its powerful macro system that can transform
  arbitrary Lisp expressions make it such a flexible, versatile,
  extensible and introspective language that articles describing Lisp
  often have the word &quot;enlightenment&quot; in them.  For example, see the
  following articles:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;http://www.paulgraham.com/avg.html&quot;&gt;&lt;em&gt;Beating the
    Averages&lt;/em&gt;&lt;/a&gt; (by Paul Graham)
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://www.defmacro.org/ramblings/lisp.html&quot;&gt;&lt;em&gt;The
    Nature of Lisp&lt;/em&gt;&lt;/a&gt; (by Slava Akhmechet)
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://twobithistory.org/2018/10/14/lisp.html&quot;&gt;&lt;em&gt;How
    Lisp Became God&apos;s Own Programming Language&lt;/em&gt;&lt;/a&gt; (by Sinclair
    Target)
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  Lisp has been described in various ways by various eminent
  personalities in the history of computing.  Alan Kay has famously
  described Lisp as:
&lt;/p&gt;
&lt;blockquote&gt;
  The greatest single programming language ever designed.
&lt;/blockquote&gt;
&lt;p&gt;
  John Foderaro has written this about Lisp:
&lt;/p&gt;
&lt;blockquote&gt;
  Lisp is a programmable programming language.
&lt;/blockquote&gt;
&lt;p&gt;
  Eric S. Raymond has expressed the enlightenment one experiences by
  learning Lisp in his famous article titled
  &lt;a href=&quot;http://www.catb.org/~esr/faqs/hacker-howto.html&quot;&gt;&lt;em&gt;How To Become A Hacker&lt;/em&gt;&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt;
  Lisp is worth learning for the profound enlightenment experience you
  will have when you finally get it.  That experience will make you a
  better programmer for the rest of your days, even if you never
  actually use Lisp itself a lot.
&lt;/blockquote&gt;
&lt;p&gt;
  Randall Munroe, the creator of the
  &lt;a href=&quot;https://xkcd.com/&quot;&gt;XKCD&lt;/a&gt; webcomic has dedicated two
  comic strips to Lisp:
&lt;/p&gt;
&lt;figure class=&quot;soft&quot;&gt;
  &lt;img src=&quot;files/blog/xkcd-224-lisp.jpg&quot; alt=&quot;XKCD comic on Lisp&quot;
       title=&quot;Original title text: We lost the documentation on quantum mechanics.  You&apos;ll have to decode the regexes yourself.&quot;&gt;
  &lt;figcaption&gt;
    &lt;em&gt;Lisp&lt;/em&gt; by Randall Munroe
    (Source: &lt;a href=&quot;https://xkcd.com/224/&quot;&gt;https://xkcd.com/224/&lt;/a&gt;)
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;soft&quot;&gt;
  &lt;img src=&quot;files/blog/xkcd-297-lisp-cycles.png&quot; alt=&quot;XKCD comic on Lisp Cycles&quot;
       title=&quot;Original title text: I&apos;ve just received word that the Emperor has dissolved the MIT computer science program permanently.&quot;&gt;
  &lt;figcaption&gt;
    &lt;em&gt;Lisp Cycles&lt;/em&gt; by Randall Munroe
    (Source: &lt;a href=&quot;https://xkcd.com/297/&quot;&gt;https://xkcd.com/297/&lt;/a&gt;)
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
  Developed in 1958 by John McCarthy, Lisp is the second oldest
  programming language in use today.  Only Fortran is older, by one
  year.  Some of the popular Lisp dialects today include Common Lisp,
  Scheme and Clojure.  Most of this article would focus on Common
  Lisp.  Scheme and Clojure would be discussed briefly towards the end
  of this article.
&lt;/p&gt;
&lt;h3 id=&quot;emacs-slime&quot;&gt;Emacs: SLIME&lt;/h3&gt;
&lt;p&gt;
  Many Lisp programmers immediately think of Emacs when they think of
  writing Lisp code.  Emacs is a family of text editors.  An Emacs
  editor itself is typically implemented in a dialect of Lisp.  There
  is an Emacs mode named SLIME that provides excellent support for
  programming in Lisp.  SLIME stands for Superior Lisp Interaction
  Mode for Emacs.  First released in August 2003, SLIME was created by
  Eric Marsden and then later developed further by Luke Gorrie and
  Helmut Eller.  It offers a Read-Eval-Print-Loop (REPL), integrated
  debugging and interactive evaluation of expressions, all available
  right within the editor.  There are several nifty key bindings
  available to compile and evaluate parts or whole of the code in the
  current buffer.
&lt;/p&gt;
&lt;p&gt;
  SLIME works by launching a Swank TCP server.  Swank is a backend
  server program written in Common Lisp that listens on a socket to
  receive SLIME commands from Emacs and execute them.  SLIME is so
  useful that it is considered to be indispensible by many Lisp
  programmers who write Lisp code in Emacs.
&lt;/p&gt;
&lt;h3 id=&quot;vim-slimv-vlime&quot;&gt;Vim: Slimv/Vlime&lt;/h3&gt;
&lt;p&gt;
  Is there anything similar to SLIME for Vim?  Yes, there are two
  popular options:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;
      &lt;strong&gt;Slimv:&lt;/strong&gt; It stands for Superior Lisp Interaction
      Mode for Vim.  It is a Vim plugin created by Tamas Kovacs that
      was first released in January 2009.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      &lt;strong&gt;Vlime:&lt;/strong&gt; It is a Vim plugin created by Kay Z that
      was first released in May 2017.  It is much more recent than
      Slimv.  Vlime is younger than Slimv by eight years.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  Both plugins use a client-server architecture like SLIME does in
  Emacs.  Both plugins rely on Swank server to be started.  In fact,
  Slimv bundles a slightly modified version of Swank with it, so that
  it can launch it and connect to it to send expressions to be
  evaluated.  Vlime does not bundle Swank server with itself but it
  provides a wrapper that automatically downloads Swank server when
  needed.
&lt;/p&gt;
&lt;h2 id=&quot;vim-plugin-management&quot;&gt;Vim Plugin Management&lt;/h2&gt;
&lt;p&gt;
  When I started using Vim fifteen years ago, we used to just download
  a Vim plugin and copy/extract it to &lt;code&gt;~/.vim&lt;/code&gt; directory.
  These days, there are a few plugin management tools for Vim such
  as &lt;a href=&quot;https://github.com/tpope/vim-pathogen&quot;&gt;Pathogen&lt;/a&gt;,
  &lt;a href=&quot;https://github.com/VundleVim/Vundle.Vim&quot;&gt;Vundle&lt;/a&gt;,
  &lt;a href=&quot;https://github.com/junegunn/vim-plug&quot;&gt;vim-plug&lt;/a&gt;, etc.  I
  am not going to use any of them because I don&apos;t know which one of
  them you use and I don&apos;t want to write down steps for each one of
  them.
&lt;/p&gt;
&lt;p&gt;
  In fact, I have never used any Vim plugin manager myself.  Until Vim
  7, I used to create a &lt;code&gt;~/.vim/bundle&lt;/code&gt; directory, then
  copy each plugin to its own directory within it and add the plugin&apos;s
  directory path to Vim&apos;s &lt;code&gt;runtimepath&lt;/code&gt; option.
&lt;/p&gt;
&lt;p&gt;
  Vim 8 has native support for packages which makes installing plugins
  and loading them simpler.  With Vim 8, we can copy each plugin to
  its own directory within &lt;code&gt;~/.vim/pack/plugins/start&lt;/code&gt; and
  they are loaded automatically when Vim starts.  The directory name
  &lt;code&gt;plugins&lt;/code&gt; in this path is only an example.  It could be
  any arbitrary name and Vim would still load the plugins fine.
&lt;/p&gt;
&lt;p&gt;
  In this article, I will use Vim 8&apos;s native support for packages to
  set up Vim plugins.  The only exception to this would be installing
  Vlime.  The top-level directory of Vlime is not the plugin
  directory.  The plugin directory is contained in a subdirectory
  named &lt;code&gt;vim&lt;/code&gt;.  This does not conform to the directory
  structure of plugins in a Vim package.  Therefore, in this article,
  I will set up Vlime in the old fashioned way by copying it
  to &lt;code&gt;~/.vim/bundle&lt;/code&gt; and then adding the path to its plugin
  directory to Vim&apos;s &lt;code&gt;runtimepath&lt;/code&gt; option.
&lt;/p&gt;
&lt;h2 id=&quot;software-versions&quot;&gt;Software Versions&lt;/h2&gt;
&lt;p&gt;
  Since this article involves several layers of software, some of what
  is written here may not hold good in future as these various pieces
  of software change and evolve over time.  Therefore, in this
  section, I will note down the versions of various software tools I
  used while writing this article.  Here they are:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Debian GNU/Linux 10.1 (buster)&lt;/li&gt;
  &lt;li&gt;Vim 8.1&lt;/li&gt;
  &lt;li&gt;
    Slimv (Git repo last updated on 30 Nov 2019 with commit
    &lt;a href=&quot;https://github.com/kovisoft/slimv/commits/47a0070&quot;&gt;47a0070&lt;/a&gt;)
  &lt;/li&gt;
  &lt;li&gt;
    Vlime (Git repo last updated on 16 Oct 2017 with commit
    &lt;a href=&quot;https://github.com/l04m33/vlime/commits/065b95f&quot;&gt;065b95f&lt;/a&gt;)
  &lt;/li&gt;
  &lt;li&gt;
    Paredit (Git repo last updated on 30 Nov 2019 with commit
    &lt;a href=&quot;https://github.com/kovisoft/paredit/commits/d99905a&quot;&gt;d99905a&lt;/a&gt;)
  &lt;/li&gt;
  &lt;li&gt;
    Rainbow Parentheses (Git repo last updated on 29 Oct 2015 with commit
    &lt;a href=&quot;https://github.com/junegunn/rainbow_parentheses.vim/commits/27e7cd7&quot;&gt;27e7cd7&lt;/a&gt;)
  &lt;/li&gt;
  &lt;li&gt;SBCL 1.4.16.debian&lt;/li&gt;
  &lt;li&gt;GNU CLISP 2.49.92&lt;/li&gt;
  &lt;li&gt;ECL 16.1.3&lt;/li&gt;
  &lt;li&gt;MIT/GNU Scheme 9.1.1 on Debian GNU/Linux 9.11 (stretch)&lt;/li&gt;
  &lt;li&gt;Clojure 1.10.1&lt;/li&gt;
  &lt;li&gt;Quicklisp beta (libraries last updated on 30 Nov 2019)&lt;/li&gt;
  &lt;li&gt;tmux 2.8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  You will probably need only a tiny subset of the tools above
  depending on which sections in this article you would follow.  Just
  pick the sections you want to try out and follow the steps written
  in them.  They will walk you through the procedure to install the
  tools applicable to the sections you have picked.  Regardless of
  which sections you pick, I recommend that you definitely go through
  the three &quot;Get Started&quot; subsections below.  These subsections go
  into detail about some of the prerequisites such as support for
  tmux, Paredit, support for Python interface in Vim, etc. that are
  not covered in the other sections.
&lt;/p&gt;
&lt;p&gt;
  The choice of Debian may look like an odd one.  I want the commands
  and steps discussed in this article to be easily reproducible in a
  free and open source operating system.  Debian happens to be my
  favourite.  What works on Debian is easily reproducible on Ubuntu
  and other derivatives, often without any changes to the steps.  I
  believe, it will not be too difficult to translate the steps
  provided for Debian to the steps that would work on another
  operating system.
&lt;/p&gt;
&lt;p&gt;
  Note that Quicklisp (a prerequisite for Vlime) is still beta
  software at the time of writing this article.  The actual steps to
  install Quicklisp may change in future.  Check
  &lt;a href=&quot;https://www.quicklisp.org/&quot;&gt;https://www.quicklisp.org/&lt;/a&gt;
  for the most up-to-date instructions to install Quicklisp.
&lt;/p&gt;
&lt;h2 id=&quot;get-started&quot;&gt;Get Started&lt;/h2&gt;
&lt;h3 id=&quot;get-started-with-slimv-and-sbcl&quot;&gt;Get Started with Slimv and SBCL&lt;/h3&gt;
&lt;p&gt;
  Here are the steps to set up Slimv and use it:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install the tools required to set up a Common Lisp development
      environment with Slimv with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get install vim-nox sbcl tmux git&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      The default Vim in Debian is &lt;code&gt;vim.basic&lt;/code&gt; provided by
      the &lt;code&gt;vim&lt;/code&gt; package which does not have support for
      Python interface.  Slimv is written in Vim script, Lisp and
      Python 3, so it does need a Vim package that has support for
      Python interface.  One such package is &lt;code&gt;vim-nox&lt;/code&gt; that
      provides the &lt;code&gt;vim.nox&lt;/code&gt; command.  Installing it
      automatically updates the &lt;code&gt;vim&lt;/code&gt; command to
      run &lt;code&gt;vim.nox&lt;/code&gt;.  Another such package
      is &lt;code&gt;vim-gtk&lt;/code&gt; which additionally provides GUI support.
      The graphical Vim known as GVim can be launched with
      the &lt;code&gt;gvim&lt;/code&gt; command.  It runs in the desktop
      environment.  For the purpose of this article, I will stick
      to &lt;code&gt;vim-nox&lt;/code&gt; because it is lightweight.  All steps
      meant for Slimv would run equally well on &lt;code&gt;vim-gtk&lt;/code&gt;,
      MacVim and GVim.
    &lt;/p&gt;
    &lt;p&gt;
      Installing tmux is optional.  Slimv can launch Swank server
      automatically if Vim is running within tmux, GNU Screen or a
      desktop environment, so if you are using GNU Screen already, you
      don&apos;t need to install tmux.  Also, if you are running Slimv in a
      desktop environment, you don&apos;t really need to install either
      tmux or GNU Screen, although you could if you would like to see
      Swank running in a separate tmux or GNU Screen window rather
      than a separate terminal window.  In this article, I am going to
      assume that Vim is running within tmux.
    &lt;/p&gt;
    &lt;p&gt;
      If you are going to run Slimv in a terminal without a desktop
      environment, tmux or GNU Screen, Swank server has to be run
      manually.  Point 4 below explains how to do it.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Installing Slimv is pretty simple.  Here is one way to do it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/kovisoft/slimv.git ~/.vim/pack/plugins/start/slimv
vim +&apos;helptags ~/.vim/pack/plugins/start/slimv/doc&apos; +q&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      That is it!  Slimv is set up.  It&apos;s that straightforward.  The
      commands above show how to set up Slimv with just two shell
      commands.  You could also use a Vim plugin manager to install
      Slimv for you but I am not going to cover that here.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      This is an optional step.  Slimv supports starting Swank server
      automatically if you are running Vim in tmux, GNU Screen or a
      desktop environment.  To start tmux, enter this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      If you use GNU screen or a desktop environment, you don&apos;t have
      to run tmux.
    &lt;/p&gt;
    &lt;p&gt;
      If you do not use tmux, GNU Screen or a desktop environment,
      then you must start Swank server manually as explained in the
      next point.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      This step is necessary only if you are not using tmux, GNU
      Screen or a desktop environment.  The following command shows
      how to start Swank server manually:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sbcl --load ~/.vim/pack/plugins/start/slimv/slime/start-swank.lisp&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      If you are using tmux, GNU Screen or a desktop environment,
      Slimv can start Swank server automatically when needed and you
      don&apos;t need to perform this step.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a new Lisp source code file, say, &lt;code&gt;foo.lisp&lt;/code&gt;
      with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;vim foo.lisp&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To connect to Swank server, enter the following command in
      normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt;
    &lt;/p&gt;
    &lt;p&gt;
      If Vim is running within tmux, GNU Screen or desktop
      environment, Slimv would automatically launch Swank server and
      connect to it.
    &lt;/p&gt;
    &lt;p&gt;
      After Slimv connects to Swank successfully, Vim window should
      split into two and the following prompt should appear in the new
      split window:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;CL-USER&amp;gt;&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      This is the integrated REPL.  It is now alive and ready for
      interactive programming.
    &lt;/p&gt;
    &lt;p&gt;
      We assume here that Slimv is using the default Slimv leader
      key &lt;kbd&gt;,&lt;/kbd&gt;.  If you have overridden the Vim leader key,
      then the Slimv leader key might be same as the Vim leader key.
      Enter the command &lt;code&gt;:echo g:slimv_leader&lt;/code&gt; in Vim
      command-line mode to find the leader key being used by Slimv.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type some code into the buffer for the new file.  To do so,
      first type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and type this code:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(format t &quot;hello, world~%&quot;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To evaluate the current expression under the cursor, enter the
      following command in normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;e&lt;/kbd&gt;
    &lt;/p&gt;
    &lt;p&gt;
      Both the current expression and its result should appear in the
      REPL window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      The REPL is interactive.  Type
      &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;w&lt;/kbd&gt;&lt;kbd&gt;w&lt;/kbd&gt; to switch to the REPL
      window.  Then type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and type
      this code:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(+ 1 2)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;enter&lt;/kbd&gt; to evaluate the expression just like you
      would do in a real REPL.  The result should then appear in the
      REPL.
    &lt;/p&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode again.  Use the
      normal mode command
      &lt;kbd&gt;ctrl&lt;/kbd&gt;&amp;nbsp;+&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt; to
      switch between the split windows.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Now that you have got started with Slimv, here is a brief note
      on uninstallation, in case you ever need it.  If Slimv is
      installed as described in point 2 above, enter the following
      command to uninstall it:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;rm -rf ~/.vim/pack/plugins/start/slimv&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  In steps 7 and 9, you may have noticed that as soon as you type an
  opening parenthesis or double quotation mark, a matching closing one
  is automatically inserted.  That is done by the
  &lt;a href=&quot;https://github.com/kovisoft/paredit&quot;&gt;Paredit&lt;/a&gt; plugin
  which is bundled along with Slimv.  Paredit ensures structured
  editing of Lisp s-expressions and keeps all matched characters
  (parentheses, brackets, braces, quotes) balanced.  It also provides
  many new keybindings to edit s-expressions conveniently.  We will
  look into Paredit in a little more detail in
  the &lt;a href=&quot;#get-started-with-paredit&quot;&gt;&lt;em&gt;Get Started with
  Paredit&lt;/em&gt;&lt;/a&gt; subsection later.
&lt;/p&gt;
&lt;h3 id=&quot;get-started-with-vlime-and-sbcl&quot;&gt;Get Started with Vlime and SBCL&lt;/h3&gt;
&lt;p&gt;
  Here are the steps to set up Vlime and use it:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install the tools required to set up a Common Lisp development
      environment with Vlime with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get install vim sbcl git curl&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Note that unlike Slimv, Vlime can work with the default Vim in
      Debian, i.e. &lt;code&gt;vim.basic&lt;/code&gt;.  Vlime does not require Vim
      with Python interface.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install Quicklisp with these commands:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -O https://beta.quicklisp.org/quicklisp.lisp
sbcl --load quicklisp.lisp --eval &apos;(quicklisp-quickstart:install)&apos; --eval &apos;(exit)&apos;
sbcl --load ~/quicklisp/setup.lisp --eval &apos;(ql:add-to-init-file)&apos; --eval &apos;(exit)&apos;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;enter&lt;/kbd&gt; in the end, when prompted, to complete the
      installation.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install Vlime and Paredit with these commands:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/l04m33/vlime.git ~/.vim/bundle/vlime
git clone https://github.com/kovisoft/paredit ~/.vim/pack/plugins/start/paredit
echo &apos;set runtimepath^=~/.vim/bundle/vlime/vim&apos; &amp;gt;&amp;gt; ~/.vimrc
vim +&apos;helptags ~/.vim/bundle/vlime/vim/doc&apos; +&apos;helptags ~/.vim/pack/plugins/start/paredit/doc&apos; +q&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Unlike Slimv, Vlime does not bundle
      &lt;a href=&quot;https://github.com/kovisoft/paredit&quot;&gt;Paredit&lt;/a&gt; along
      with itself.  As explained in the previous section, it helps us
      with structured editing of Lisp s-expressions.
    &lt;/p&gt;
    &lt;p&gt;
      I recommend that you install Paredit but in case you choose not
      to, ensure that loading of filetype plugins is enabled by
      entering the &lt;code&gt;:filetype&lt;/code&gt; command in command-line
      mode.  The output should contain &lt;code&gt;plugin:ON&lt;/code&gt;.  If it
      is off, add the command &lt;code&gt;filetype plugin on&lt;/code&gt;
      to &lt;code&gt;~/.vimrc&lt;/code&gt; to ensure that this is always on.
      Vlime won&apos;t work without this being enabled.  If you install
      Paredit, you don&apos;t have to bother about this because Paredit
      takes care of enabling this by default.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a new Lisp source code file, say, &lt;code&gt;foo.lisp&lt;/code&gt;
      with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;vim foo.lisp&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To start Vlime server (a wrapper around Swank server) and
      connect to it automatically, enter the following command in
      normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;
    &lt;/p&gt;
    &lt;p&gt;
      We assume here that Vim &lt;code&gt;&amp;lt;LocalLeader&amp;gt;&lt;/code&gt; is left
      to its default, i.e. backslash.  If it is mapped to some other
      key combination, then that must be used instead of backslash in
      the above command.
    &lt;/p&gt;
    &lt;p&gt;
      The first time this command is run after installing Vlime, it
      installs Swank server using Quicklisp.  Therefore, it can take a
      while for Vlime server to start the first time this command is
      run.  On subsequent use of these commands, it would start faster
      because it would be already installed.
    &lt;/p&gt;
    &lt;p&gt;
      The console output from Vlime server is displayed in a split
      window.  After Vlime successfully connects to Swank, the
      following message is displayed at the bottom:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;Vlime Connection 1 established.&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      After the above message appears, it is okay to close the split
      window for Vlime server by entering this command in Vim
      command-line mode:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;:q&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Vlime server would continue to run in background.  The following
      command can be used in normal mode to view the console output of
      Vlime server anytime it is required:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;&lt;kbd&gt;v&lt;/kbd&gt;
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type some code into the buffer for the new file.  To do so,
      first type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and type this code:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(format t &quot;hello, world~%&quot;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.
    &lt;/p&gt;
  &lt;li&gt;
    &lt;p&gt;
      To evaluate, the current expression under the cursor, enter the
      following command in normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt;
    &lt;/p&gt;
    &lt;p&gt;
      Both the current expression and its result should appear in the
      REPL window.
    &lt;/p&gt;
    &lt;p&gt;
      Unlike Slimv, the REPL window of Vlime is &lt;em&gt;not&lt;/em&gt;
      interactive.  Its &lt;code&gt;nomodifiable&lt;/code&gt; option is set, so we
      cannot type code directly into the REPL window.  This can be a
      bit of a problem if we want to type arbitrary expressions into
      the REPL and execute them.  To mitigate this shortcoming to some
      extent, Vlime provides an alternative way to evaluate the
      current expression known as the interaction mode.  This is
      explained in the next point.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enable interaction mode by entering this command in normal mode:
    &lt;/p&gt;
    &lt;p&gt;&lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;i&lt;/kbd&gt;&lt;/p&gt;
    &lt;p&gt;
      The same command disables interaction mode, i.e. this command
      toggles the state of interaction mode between on and off.  When
      interaction mode is on, evaluate an expression under the cursor
      by simply pressing &lt;kbd&gt;enter&lt;/kbd&gt; in normal mode.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Now that you have got started with Vlime, here is a brief note
      on uninstallation, in case you ever need it.  If Quicklisp and
      Vlime are installed as described in the points 2 and 3 above,
      run these commands to uninstall them:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -rf ~/quicklisp ~/.vim/bundle/vlime ~/.vim/pack/plugins/start/paredit
sed -i.bkp &apos;/runtimepath.*vlime/d&apos; ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Optionally, remove &lt;code&gt;~/.sblrc&lt;/code&gt; or edit it to remove
      the code pertaining to loading
      &lt;code&gt;quicklisp/setup.lisp&lt;/code&gt;.
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;get-started-with-paredit&quot;&gt;Get Started with Paredit&lt;/h3&gt;
&lt;p&gt;
  You have already got started with Paredit when you wrote Lisp code
  while following one of the previous two subsections.  The moment you
  typed an opening parenthesis, Paredit inserted a closing one for you
  automatically.  Paredit keeps all matched characters such as
  parentheses, double quotes, etc. balanced when you edit code.  Here
  is a very brief exercise to quickly get started with some of the
  very basic features of Paredit:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a new Lisp source code file, say, &lt;code&gt;foo.lisp&lt;/code&gt;
      with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;vim foo.lisp&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and then type only this:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(defun square (x&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      At this point, Paredit should have inserted the two closing
      parentheses automatically.  The code should look like this:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(defun square (x&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      The cursor should be situated just after the parameter
      &lt;code&gt;x&lt;/code&gt;.  The block above shows where the cursor should
      be.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      While you are still in insert mode, type the first closing
      parenthesis.  Yes, type it even if the closing parenthesis is
      already present.  The cursor should now skip over the first
      closing parenthesis like this:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(defun square (x)&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Of course, there was no need to type the closing parenthesis
      because it was already present but typing it out to skip over it
      is more efficient than escaping to normal mode, then moving over
      it and then entering insert mode again.  This is, in fact, a
      very nifty feature of Paredit.  We can enter code with the same
      keystrokes as we would without Paredit.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      You should still be in insert mode.  Type &lt;kbd&gt;enter&lt;/kbd&gt; to
      create a new line below.  Now one of two things is going to
      happen.  If electric return is disabled, then a newline is
      inserted as expected like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x))
  &lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      If electric return is enabled, two newlines are inserted to
      create an empty line in between:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  &lt;span class=&quot;cursor&quot;&gt; &lt;/span&gt;
  )&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      In both cases, indentation of two spaces is inserted
      automatically.  The new empty line inserted by electric return
      allows linewise editing of the code to be entered in this empty
      line.
    &lt;/p&gt;
    &lt;p&gt;
      The electric return feature is enabled by default in both
      Paredit and Slimv.  It works by Paredit remapping the &quot;enter&quot;
      key (&lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt;) in insert mode to a function that
      inserts electric return.  Slimv needs to remap the &quot;enter&quot; key
      to present the argument list of the current function but it
      takes care of performing an electric return before showing the
      argument list.  Vlime, however, forgets to perform electric
      return before showing the argument list, so this feature does
      not work in Vlime.
    &lt;/p&gt;
    &lt;p&gt;
      For now, we will continue with the assumption that electric
      return is enabled and working fine.  If it is disabled or if it
      is not working for you, ignore the steps that discuss electric
      return.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Now, type only this:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(* x x&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Again, Paredit would have inserted the closing parenthesis
      automatically.  The code should look like this now:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;
  )&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Now, type one more closing parenthesis to advance past the
      automatically inserted closing parenthesis like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x)&lt;span class=&quot;cursor&quot;&gt; &lt;/span&gt;
  )&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Then type another closing parenthesis.  Paredit would now pick
      the lone closing parenthesis that is present in its own line and
      move it at the end of the current line like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x))&lt;span class=&quot;cursor&quot;&gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      This behaviour of consuming the extra newline inserted by an
      electric return on typing a closing parenthesis helps the code
      to conform to the popular Lisp coding convention of putting all
      the consecutive closing parentheses next to each other in the
      same line.  In other words, typing closing parentheses
      re-gathers electric returns when applicable.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Let us see what happens if we try to delete the opening
      parenthesis around the product function (the &lt;code&gt;*&lt;/code&gt;
      function).  Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.  Then
      enter &lt;kbd&gt;h&lt;/kbd&gt; in normal mode to move the cursor one place
      left so that the cursor is placed on the parenthesis just after
      the last &lt;code&gt;x&lt;/code&gt; in the code like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;x&lt;/kbd&gt; to delete the closing parenthesis the cursor
      is on.  Nothing gets deleted!  Instead the cursor just skips
      over the parenthesis like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x)&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Paredit refuses to delete the closing parenthesis because it
      encloses a non-empty list.  It would have deleted the closing
      parenthesis along with the opening one if the list were empty.
      This is Paredit trying to ensure that the s-expressions remain
      valid while editing.
    &lt;/p&gt;
    &lt;p&gt;
      Note that in this step, &lt;kbd&gt;h&lt;/kbd&gt; is a regular Vim motion
      command.  In Vim, by default, &lt;kbd&gt;x&lt;/kbd&gt; deletes the character
      under the cursor, but when Paredit is enabled, it remaps this
      command to behave the way it did in this step to ensure that the
      parentheses remain balanced.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Let us now try to delete the current line.  Type
      &lt;kbd&gt;d&lt;/kbd&gt;&lt;kbd&gt;d&lt;/kbd&gt; to do so.  The result looks like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  &lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Note how the closing parenthesis has been left intact to keep
      the parentheses balanced.  Again, Paredit has remapped the
      &lt;kbd&gt;d&lt;/kbd&gt;&lt;kbd&gt;d&lt;/kbd&gt; command to produce this behaviour.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Now type &lt;kbd&gt;d&lt;/kbd&gt;&lt;kbd&gt;a&lt;/kbd&gt;&lt;kbd&gt;(&lt;/kbd&gt; to delete the
      entire &lt;code&gt;defun&lt;/code&gt; expression.  The buffer should look
      empty now.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and type out the
      following code:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(list (* 10 20) (+ 30 40))&lt;span class=&quot;cursor&quot;&gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.
      Type &lt;kbd&gt;h&lt;/kbd&gt;&lt;kbd&gt;(&lt;/kbd&gt;&lt;kbd&gt;h&lt;/kbd&gt;&lt;kbd&gt;h&lt;/kbd&gt; to place
      the cursor on the closing parenthesis of the first expression.
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(list (* 10 20&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt; (+ 30 40))&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Now type &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;&amp;gt;&lt;/kbd&gt;.  The closing parenthesis
      of the first expression moves right to &lt;em&gt;slurp&lt;/em&gt; the next
      expression.  The buffer looks like this:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(list (* 10 20 (+ 30 40)&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      We assume here that Paredit is using the default Paredit leader
      key &lt;kbd&gt;,&lt;/kbd&gt;.  If you have overridden the Vim leader key,
      then the Paredit leader key might be same as the Vim leader key.
      Enter the command &lt;code&gt;:echo g:paredit_leader&lt;/code&gt; in Vim
      command-line mode to find the leader key being used by Paredit.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Now type &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;&amp;lt;&lt;/kbd&gt;.  The closing parenthesis
      of the outer expression moves left to &lt;em&gt;barf&lt;/em&gt; the inner
      expression out.  The buffer looks like this again:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(list (* 10 20&lt;span class=&quot;cursor&quot;&gt;)&lt;/span&gt; (+ 30 40))&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      While the cursor is on a parenthesis, the normal mode
      commands &lt;code&gt;,&amp;lt;&lt;/code&gt; or &lt;code&gt;,&amp;gt;&lt;/code&gt; can be used in
      this manner to move the parenthesis left or right respectively,
      thereby slurping or barfing expressions.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  That was a very brief overview of what Paredit can do.  There is a
  lot more to Paredit than what is described above.  Paredit has a
  rich set of keybindings to make editing s-expressions very
  convenient.  Enter &lt;code&gt;:help paredit-keys&lt;/code&gt; in command-line
  mode to see the list of the keybindings.
&lt;/p&gt;
&lt;p&gt;
  I think it is a good idea to read the entire Paredit documentation.
  Enter &lt;code&gt;:help paredit&lt;/code&gt; to do so.  It is about 500 lines
  long and takes about 30 to 40 minutes to read.  The time spent
  reading this documentation is worth it because it makes editing Lisp
  code very pleasant and productive.
&lt;/p&gt;
&lt;h2 id=&quot;use-debugger-and-inspector&quot;&gt;Use Debugger and Inspector&lt;/h2&gt;
&lt;p&gt;
  After getting started with Slimv or Vlime, the very next thing you
  might want to know is how to work with the debugger.  The debugger
  window comes up whenever an error or an unhandled condition occurs.
  It might look quite scary to a beginner, so it is a good idea to
  become comfortable with it as soon as possible.  Fortunately, both
  Slimv and Vlime provide excellent key-bindings to inspect the error
  or dismiss it to return to the source code buffer quickly and
  easily.
&lt;/p&gt;
&lt;h3 id=&quot;use-debugger-and-inspector-with-slimv&quot;&gt;Use Debugger and Inspector with Slimv&lt;/h3&gt;
&lt;p&gt;
  The following steps trigger an error and then show how to work with
  the debugger in Slimv:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x))

(square &quot;foo&quot;)&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;b&lt;/kbd&gt; to evaluate the buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      As soon as the defective form &lt;code&gt;(square &quot;foo&quot;)&lt;/code&gt; gets
      evaluated, an error occurs.  The error, possible restarts and
      the backtrace is displayed in a new split window for SLDB.  SLDB
      stands for Slime Debugger.  Here is an example of what may
      appear in the SLDB window:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;The value
  &quot;foo&quot;
is not of type
  NUMBER
when binding SB-KERNEL::X
   [Condition of type TYPE-ERROR]

Restarts:
  0: [RETRY] Retry SLIME REPL evaluation request.
  1: [*ABORT] Return to SLIME&apos;s top level.
  2: [ABORT] abort thread (#&amp;lt;THREAD &quot;repl-thread&quot; RUNNING {1003274E23}&amp;gt;)

Backtrace:
  0: (SB-KERNEL:TWO-ARG-* &quot;foo&quot; &quot;foo&quot;) [external]
  1: (SQUARE &quot;foo&quot;)
  2: (SB-DEBUG::TRACE-CALL #&amp;lt;SB-DEBUG::TRACE-INFO SQUARE&amp;gt; #&amp;lt;FUNCTION SQUARE&amp;gt; &quot;foo&quot;)
  3: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SQUARE &quot;foo&quot;) #&amp;lt;NULL-LEXENV&amp;gt;)
  4: (EVAL (SQUARE &quot;foo&quot;))
  5: (SWANK::EVAL-REGION &quot;(defun square (x) ..)
  6: ((LAMBDA NIL :IN SWANK-REPL::REPL-EVAL))
  ...&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      The ellipsis in the end is added by me to denote that the actual
      output has been truncated in this article for the sake of
      brevity.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      In the SLDB window, move the cursor to the second line of
      backtrace, i.e. on the following line:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;  1: (SQUARE &quot;foo&quot;)&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;enter&lt;/kbd&gt;.  This line should now unfold to show
      the following details:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;  1: (SQUARE &quot;foo&quot;)
      in &quot;(SB-INT:NAMED-LAMBDA SQUARE-----------------------------------
    Locals:
      X = &quot;foo&quot;&lt;/samp&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Move the cursor to the line that begins with &lt;code&gt;in&lt;/code&gt;,
      i.e. on this line:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;      in &quot;(SB-INT:NAMED-LAMBDA SQUARE-----------------------------------&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;enter&lt;/kbd&gt;.  Some information about its source
      code should appear like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;  1: (SQUARE &quot;foo&quot;)
      in &quot;(SB-INT:NAMED-LAMBDA SQUARE
    (X)
  (BLOCK SQUARE (#:***HERE*** (* X X))))&quot; byte 1
    Locals:
      X = &quot;foo&quot;&lt;/samp&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Move the cursor to the following line:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;      X = &quot;foo&quot;&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;i&lt;/kbd&gt; to inspect this variable.  A
      prompt would appear to confirm the variable name.  Type
      &lt;kbd&gt;enter&lt;/kbd&gt; to confirm.  An inspector window should now
      appear with more details about this variable.  This window should
      look like this:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;Inspecting #&amp;lt;(SIMPLE-ARRAY CHARACTER (3)) {100478AFAF}&amp;gt;
--------------------
Press &amp;lt;F1&amp;gt; for Help

Dimensions: (3)
Element type: CHARACTER
Total size: 3
Adjustable: NIL
Fill pointer: NIL
Contents:
0: #\f
1: #\o
2: #\o


[&amp;lt;&amp;lt;] Exit Inspector&lt;/samp&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;enter&lt;/kbd&gt; to inspect any object under the cursor and
      drill down further.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;backspace&lt;/kbd&gt; in normal mode to return to the
      previous object.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;q&lt;/kbd&gt; in normal mode to quit the
      inspector.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Finally, move the cursor to the following line in the SLDB
      window:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;  1: [*ABORT] Return to SLIME&apos;s top level.&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;enter&lt;/kbd&gt; to execute this restart.
      Alternatively, enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;a&lt;/kbd&gt; in normal mode to
      select the abort restart and quit to the previous level or
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;q&lt;/kbd&gt; to quit to top level.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  Most of the times when an error occurs, I quickly take a look at the
  stack trace to realise that I have made a silly mistake and enter
  the &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;q&lt;/kbd&gt; command to abort and quit to top level.
  This can be quite convenient because it allows returning from
  debugging to coding very quickly with only two keystrokes.
&lt;/p&gt;
&lt;h3 id=&quot;use-debugger-and-inspector-with-vlime&quot;&gt;Use Debugger and Inspector with Vlime&lt;/h3&gt;
&lt;p&gt;
  The following steps trigger an error and then show how to work with
  the debugger in Vlime:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x))

(square &quot;foo&quot;)&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Save the file, connect to Vlime server and enter
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;o&lt;/kbd&gt;&lt;kbd&gt;f&lt;/kbd&gt; in normal mode to compile
      the entire buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      As soon as the defective form &lt;code&gt;(square &quot;foo&quot;)&lt;/code&gt; gets
      evaluated, an error occurs.  The error, possible restarts and
      the backtrace is displayed in a new split window for SLDB.  SLDB
      stands for Slime Debugger.  Here is an example of what may
      appear in the SLDB window:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;Thread: 1; Level: 1

The value
  &quot;foo&quot;
is not of type
  NUMBER
when binding SB-KERNEL::X
   [Condition of type TYPE-ERROR]

Restarts:
  0. *ABORT - Return to SLIME&apos;s top level.
  1.  ABORT - abort thread (#&amp;lt;THREAD &quot;worker&quot; RUNNING {10045D6F83}&amp;gt;)

Frames:
  0.  (SB-KERNEL:TWO-ARG-* &quot;foo&quot; &quot;foo&quot;) [external]
  1.  (SQUARE &quot;foo&quot;)
  2.  (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM #&amp;lt;SB-SYS:FD-STREAM for &quot;file /home/susam/foo.fasl&quot; {10045E76A3}&amp;gt; :TABLE #(41 #&amp;lt;PACKAGE &quot;SB-IMPL&quot;&amp;gt; SB-IMPL::%DEFUN #&amp;lt;PACKAGE &quot;COMMON-LISP-USER&quot;&amp;gt;..
  3.  (SB-FASL::LOAD-AS-FASL #&amp;lt;SB-SYS:FD-STREAM for &quot;file /home/susam/foo.fasl&quot; {10045E76A3}&amp;gt; NIL NIL)
  4.  ((FLET SB-FASL::THUNK :IN LOAD))
  5.  (SB-FASL::CALL-WITH-LOAD-BINDINGS #&amp;lt;CLOSURE (FLET SB-FASL::THUNK :IN LOAD) {7F7B9B0B60BB}&amp;gt; #&amp;lt;SB-SYS:FD-STREAM for &quot;file /home/susam/foo.fasl&quot; {10045E76A3}&amp;gt;)
  ...&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      The ellipsis in the end is added by me to denote that the actual
      output has been truncated in this article for the sake of
      brevity.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      In the SLDB window, move the cursor to the second line of
      backtrace, i.e. on the following line:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;  1.  (SQUARE &quot;foo&quot;)&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;d&lt;/kbd&gt;.  A new split window should appear with
      the following details about this frame:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;Frame: 1 (Restartable)

Locals:
  X: &quot;foo&quot;

Location:
  File: /home/susam/foo.lisp
  Position: 20
  Snippet:
    (* x x))

    (square &quot;foo&quot;)&lt;/samp&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
	&lt;p&gt;
      While the cursor is on the same line as mentioned in the
      previous point, type &lt;kbd&gt;i&lt;/kbd&gt; to bring up the inspector
      window for this frame.
	&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      In the inspector window, type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode.
      Enter the following variable name in insert mode:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;x&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.  Then type
      &lt;kbd&gt;enter&lt;/kbd&gt;.  The following details about the variable
      &lt;code&gt;x&lt;/code&gt; should now appear in the inspector window:
    &lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;#&amp;lt;(SIMPLE-ARRAY CHARACTER (3)) {1004617ABF}&amp;gt;
============================================

Dimensions: (3)
Element type: CHARACTER
Total size: 3
Adjustable: NIL
Fill pointer: NIL
Contents:
0: #\f
1: #\o
2: #\o&lt;/samp&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;enter&lt;/kbd&gt; to inspect any object under the cursor and
      drill down further.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;p&lt;/kbd&gt; to return to the previous object.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter the regular Vim command &lt;code&gt;:q&lt;/code&gt; in command-line
      mode to quit the inspector window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Finally, move the cursor to the following line in the SLDB
      window:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;  1: [*ABORT] Return to SLIME&apos;s top level.&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then type &lt;kbd&gt;enter&lt;/kbd&gt; to execute this restart.
      Alternatively, we can enter &lt;kbd&gt;a&lt;/kbd&gt; in normal mode to
      select the abort restart to return to the previous level.  At
      this time, there is no command to return to SLIME&apos;s top level.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;trace-function&quot;&gt;Trace Function&lt;/h2&gt;
&lt;h3 id=&quot;trace-function-in-slimv&quot;&gt;Trace Function in Slimv&lt;/h3&gt;
&lt;p&gt;
  The following steps show how to get started with tracing functions
  in Slimv:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x))

(square (square 2))&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;b&lt;/kbd&gt; in normal mode to evaluate the
      entire buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Place the cursor on the function name, i.e. on
      &lt;code&gt;square&lt;/code&gt; and enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;t&lt;/kbd&gt; in normal
      mode to toggle tracing for this function.  A prompt appears to
      confirm the function name.  Type &lt;kbd&gt;enter&lt;/kbd&gt; to confirm.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      While the cursor is on the last expression, enter
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;d&lt;/kbd&gt; in normal mode to evaluate the top-level
      form.  The following output appears in the REPL buffer.
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(square (square 2))
  0: (SQUARE 2)
  0: SQUARE returned 4
  0: (SQUARE 4)
  0: SQUARE returned 16
16&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      This output contains information about each call to the traced
      function, arguments passed to it and the return values.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;trace-function-in-vlime&quot;&gt;Trace Function in Vlime&lt;/h3&gt;
&lt;p&gt;
  It takes a little more work to start tracing functions in Vlime.
  The following steps show how to do it:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Add the following statement to &lt;code&gt;~/.vimrc&lt;/code&gt;:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let g:vlime_contribs = [&apos;SWANK-ASDF&apos;, &apos;SWANK-PACKAGE-FU&apos;,
                      \ &apos;SWANK-PRESENTATIONS&apos;, &apos;SWANK-FANCY-INSPECTOR&apos;,
                      \ &apos;SWANK-C-P-C&apos;, &apos;SWANK-ARGLISTS&apos;, &apos;SWANK-REPL&apos;,
                      \ &apos;SWANK-FUZZY&apos;, &apos;SWANK-TRACE-DIALOG&apos;]&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      The above variable defines the list of Swank contrib modules to
      load while initialising a Vlime connection.  All modules
      mentioned above except the last one are loaded by default.  The
      &lt;code&gt;SWANK-TRACE-DIALOG&lt;/code&gt; module is not loaded by default
      but this module is necessary for tracing functions, so in order
      to load it, we define this variable to load this module in
      addition to all the other modules that are loaded by default.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x))

(square (square 2))&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Save the file, connect to Vlime server and enter
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;o&lt;/kbd&gt;&lt;kbd&gt;f&lt;/kbd&gt; in normal mode to compile
      the entire buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;T&lt;/kbd&gt;&lt;kbd&gt;D&lt;/kbd&gt; in normal mode to
      show the trace dialog in a split window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter &lt;kbd&gt;ctrl&lt;/kbd&gt;&amp;nbsp;+&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;
      in normal mode to go back to the source code window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Place the cursor on the function name, i.e. on
      &lt;code&gt;square&lt;/code&gt; and enter
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;T&lt;/kbd&gt;&lt;kbd&gt;T&lt;/kbd&gt; in normal mode to toggle
      tracing for this function.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      While the cursor is on the last expression, enter
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt;&lt;kbd&gt;t&lt;/kbd&gt; in normal mode to evaluate
      the top-level form.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter &lt;kbd&gt;ctrl&lt;/kbd&gt;&amp;nbsp;+&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;
      in normal mode twice to go to the trace window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Under &lt;code&gt;Trace Entries&lt;/code&gt;, place the cursor on
      &lt;code&gt;[refresh]&lt;/code&gt; and type &lt;kbd&gt;enter&lt;/kbd&gt;.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Then place the cursor on &lt;code&gt;[fetch next batch]&lt;/code&gt; and
      type &lt;kbd&gt;enter&lt;/kbd&gt;.  Two results should appear for the two
      &lt;code&gt;square&lt;/code&gt; calls that were made due to step 7.  The trace
      information would be folded under each call.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Move the cursor to each fold line and enter
      &lt;kbd&gt;z&lt;/kbd&gt;&lt;kbd&gt;o&lt;/kbd&gt; in normal mode to open the fold.  After
      opening both the folds, the following result should be visible:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;0 - COMMON-LISP-USER::SQUARE
    &amp;gt; 2
    &amp;lt; 4
1 - COMMON-LISP-USER::SQUARE
    &amp;gt; 4
    &amp;lt; 16
    16&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      The lines starting with &lt;code&gt;&amp;gt;&lt;/code&gt; show the arguments and
      the ones starting with &lt;code&gt;&amp;lt;&lt;/code&gt; show the return values.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;nifty-features&quot;&gt;Nifty Features&lt;/h2&gt;
&lt;p&gt;
  In this section, we will go over some of the nifty features that
  these plugins offer.  Not all features will be covered here.  I have
  chosen only a few features for the discussion here that I felt would
  be useful to beginners and at the same time also demonstrate the
  versatility of these plugins.
&lt;/p&gt;
&lt;h3 id=&quot;evaluate-top-level-form&quot;&gt;Evaluate Top-Level Form&lt;/h3&gt;
&lt;p&gt;
  In the previous sections, we saw how to evaluate the current
  expression under the cursor.  In this section, we will see how to
  evaluate the top-level expression around the current cursor
  position.  Let us do a small exercise to see this:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(+ 1 (* 2 (/ 6 &lt;span class=&quot;cursor&quot;&gt;2&lt;/span&gt;)))&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      With Slimv or Vlime connected to Swank, let us do a quick recap
      of how to evaluate the current expression.
    &lt;/p&gt;
    &lt;p&gt;
      With Slimv, enter the normal mode
      command &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;e&lt;/kbd&gt; to evaluate the current
      expression.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, enter the normal mode command
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt; to evaluate the current
      expression.
    &lt;/p&gt;
    &lt;p&gt;
      The current expression, i.e. &lt;code&gt;(/ 6 2)&lt;/code&gt; should get
      evaluated and the result &lt;code&gt;3&lt;/code&gt; should appear in the
      REPL buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Let us now see how to evaluate the top-level expression.
    &lt;/p&gt;
    &lt;p&gt;
      With Slimv, enter the normal mode
      command &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;d&lt;/kbd&gt; to evaluate the top-level
      expression.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, enter the normal mode command
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt;&lt;kbd&gt;t&lt;/kbd&gt; to evaluate the top-level
      expression.
    &lt;/p&gt;
    &lt;p&gt;
      The top-level expression should get evaluated and the result
      &lt;code&gt;7&lt;/code&gt; should appear in the REPL buffer.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;rainbow-parentheses&quot;&gt;Rainbow Parentheses&lt;/h3&gt;
&lt;p&gt;
  Rainbow parentheses make it easy to see matching parentheses by
  colouring different levels of parentheses with different colours.
  Matching parentheses have the same colour.  To enable this feature
  in Slimv, add this command to &lt;code&gt;~/.vimrc&lt;/code&gt;:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let g:lisp_rainbow=1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
  This feature is not available in Vlime.  But there are several Vim
  plugins that support rainbow parentheses.  Here are the steps to
  install one such plugin that is quite popular:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/junegunn/rainbow_parentheses.vim.git ~/.vim/pack/plugins/start/rainbow_parentheses
echo &apos;autocmd FileType lisp,scheme,clojure RainbowParentheses&apos; &amp;gt;&amp;gt; ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
  In case you ever want to uninstall it, enter these commands:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -rf ~/.vim/pack/plugins/start/rainbow_parentheses
sed -i.bkp &apos;/autocmd.*RainbowParentheses/d&apos; ~/.vimrc&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;argument-list&quot;&gt;Argument List&lt;/h3&gt;
&lt;p&gt;
  You must have seen this feature already while trying out the
  sections earlier.  While editing a Lisp source file, after typing a
  function name, as soon as a space is typed or the enter key is
  typed, the argument list for the function appears to serve as a
  reference.  In Slimv, the argument list appears in the status line
  at the bottom.  In Vlime, the argument list appears in a split
  window at the top.
&lt;/p&gt;
&lt;h3 id=&quot;omni-completion&quot;&gt;Omni-Completion&lt;/h3&gt;
&lt;p&gt;
  Type a function name partially, e.g. &lt;code&gt;form&lt;/code&gt; and type
  &lt;kbd&gt;tab&lt;/kbd&gt; while still in insert mode.  The omni-completion menu
  should appear with the list of completions if there are multiple
  choices.  Type &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;n&lt;/kbd&gt; to select the next choice
  and &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;p&lt;/kbd&gt; to select the previous choice.
  Selecting a choice also immediately inserts that choice in the
  buffer.  This works in both Slimv and Vlime.  In Slimv, we can also
  type &lt;kbd&gt;tab&lt;/kbd&gt; to select the next choice.
&lt;/p&gt;
&lt;p&gt;
  By default, omni-completion is fuzzy.  For example,
  type &lt;code&gt;wl&lt;/code&gt; and type &lt;kbd&gt;tab&lt;/kbd&gt; and omni-complete
  should insert &lt;code&gt;write-line&lt;/code&gt; automatically as well as show
  other matching choices.
&lt;/p&gt;
&lt;h3 id=&quot;describe-symbol&quot;&gt;Describe Symbol&lt;/h3&gt;
&lt;p&gt;
  With Slimv, enter the normal mode command &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;s&lt;/kbd&gt;
  to describe the symbol under the cursor.  This brings up the
  documentation of the symbol in the Vim message area.  This feature
  works while editing Common Lisp and Clojure source files but not
  while editing Scheme source file.  This feature is not supported for
  Scheme at this time.  See
  the &lt;a href=&quot;#other-lisp-dialects&quot;&gt;&lt;em&gt;Other Lisp Dialects&lt;/em&gt;&lt;/a&gt;
  section for details on how to set up Slimv with Clojure and MIT/GNU
  Scheme.
&lt;/p&gt;
&lt;p&gt;
  With Vlime, enter &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;d&lt;/kbd&gt;&lt;kbd&gt;a&lt;/kbd&gt; in normal
  mode to describe the symbol under the cursor.  This brings up the
  documentation of the symbol in a split window.
&lt;/p&gt;
&lt;h3 id=&quot;expand-macro&quot;&gt;Expand Macro&lt;/h3&gt;
&lt;p&gt;
  Here is an excercise that shows how to expand macros interactively
  while editing a Lisp source file:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defmacro calc (a op b)
  (list op a b))

(defmacro square (x)
  (list &apos;calc x &apos;* x))

(square 2)&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      With Slimv, enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;b&lt;/kbd&gt; in normal mode to
      evaluate the entire buffer.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, save the file, connect to Vlime server and type
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;o&lt;/kbd&gt;&lt;kbd&gt;f&lt;/kbd&gt; in normal mode to compile the
      entire buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      With Slimv, while the cursor is on the last expression, enter
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;1&lt;/kbd&gt; in normal mode to expand the macro form
      once.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, enter &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;m&lt;/kbd&gt;&lt;kbd&gt;1&lt;/kbd&gt; in normal
      mode to do the same thing.
    &lt;/p&gt;
    &lt;p&gt;
      The following expansion should appear as the result:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(CALC 2 * 2)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Slimv displays the expansion in the REPL buffer whereas Vlime
      displays it in a new split window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      With Slimv, enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;m&lt;/kbd&gt; in normal mode to
      recursively expand the current expression until it is no longer
      a macro.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, enter &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;m&lt;/kbd&gt;&lt;kbd&gt;a&lt;/kbd&gt; in normal
      mode to do the same thing.
    &lt;/p&gt;
    &lt;p&gt;
      The following expansion should appear as the result:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(* 2 2)&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;cross-reference&quot;&gt;Cross Reference&lt;/h3&gt;
&lt;p&gt;
  Here is an exercise that shows how to use the cross-reference
  commands in Slimv and Vlime:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a file with Vim, say &lt;code&gt;foo.lisp&lt;/code&gt; and enter the
      following code into it:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun square (x)
  (* x x))

(defun square-of-sum (x y)
  (square (+ x y)))

(defun sum-of-squares (x y)
  (+ (square x) (square y)))

(square-of-sum 2 3)
(sum-of-squares 2 3)&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      With Slimv, enter &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;b&lt;/kbd&gt; in normal mode to
      evaluate the entire buffer.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, save the file, connect to Vlime server and type
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;o&lt;/kbd&gt;&lt;kbd&gt;f&lt;/kbd&gt; in normal mode to compile the
      entire buffer.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      With Slimv, place the cursor on any occurrence of the symbol
      &lt;code&gt;square&lt;/code&gt; and enter
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;x&lt;/kbd&gt;&lt;kbd&gt;l&lt;/kbd&gt; in normal mode.  A prompt
      would appear to confirm the symbol name.  Type &lt;kbd&gt;enter&lt;/kbd&gt;
      to confirm.  The list of all callers should now appear in the
      REPL buffer.
    &lt;/p&gt;
    &lt;p&gt;
      With Vlime, place the cursor on any occurrence of the symbol
      &lt;code&gt;square&lt;/code&gt; and enter &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;x&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt;
      in normal mode to list all callers of the function.  The output
      appears in a split window containing the cross reference (xref)
      buffer.  Type &lt;kbd&gt;enter&lt;/kbd&gt; on any item in the xref buffer and
      Vlime will take you directly to the referenced location.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;other-common-lisp-implementations&quot;&gt;Other Common Lisp Implementations&lt;/h2&gt;
&lt;p&gt;
  The previous sections used SBCL as the implementation of Common
  Lisp.  How well do Slimv and Vlime work with other Common Lisp
  implementations?
&lt;/p&gt;
&lt;p&gt;
  I have found that both plugins are pretty well tested with SBCL.
  However, they may not be so well tested with other implementations.
  Due to the lack of sufficient testing with Common Lisp
  implementations other than SBCL, certain errors may occur while
  using other implementations.  Sometimes it is possible to work
  around these errors and sometimes it isn&apos;t.  We will see an example
  of this in an upcoming section when we try to start Swank server
  automatically using Vlime and CLISP.
&lt;/p&gt;
&lt;p&gt;
  For this section, I choose CLISP and Embeddable Common-Lisp (ECL) as
  two other implementations of Common Lisp that will be used with
  Slimv and Vlime.  After following the upcoming subsections, you
  should get the hang of how to make Slimv or Vlime work with other
  implementations of Common Lisp.
&lt;/p&gt;
&lt;h3 id=&quot;use-slimv-with-clisp&quot;&gt;Use Slimv with CLISP&lt;/h3&gt;
&lt;p&gt;
  If you have read and tried the steps in the
  &lt;a href=&quot;#get-started-with-slimv-and-sbcl&quot;&gt;&lt;em&gt;Get Started with
  Slimv and SBCL&lt;/em&gt;&lt;/a&gt; section, it is going to be quite easy to use
  Slimv with CLISP.  The steps are similar with a few minor
  modifications.  They are explained below:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Uninstall SBCL and install CLISP with these commands:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get remove sbcl
sudo apt-get install clisp&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To start Swank server manually, enter this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;clisp ~/.vim/pack/plugins/start/slimv/slime/start-swank.lisp&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then edit a Lisp source file and enter the normal command
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt; to connect to it and bring up the REPL
      window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To start Swank automatically from Slimv, there is nothing more
      to be done.  Just edit a Lisp source file and enter the normal
      mode command &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt;.  While running in GNU
      Screen, tmux or a desktop environment, Slimv can automatically
      detect CLISP and start Swank server with it.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  In general, to start Swank server manually with another Common Lisp
  implementation, we need to figure out how to load
  &lt;code&gt;start-swank.lisp&lt;/code&gt; with it.
&lt;/p&gt;
&lt;h3 id=&quot;use-slimv-with-ecl&quot;&gt;Use Slimv with ECL&lt;/h3&gt;
&lt;p&gt;
  The steps to use Slimv with Embeddable Common-Lisp (ECL) are very
  similar too.  Once again, only if we need to start Swank server
  manually, we need to figure out the command to do so.  Otherwise,
  there is no other difference.  Here are the steps:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Ensure that SBCL and CLISP are uninstalled and ECL is installed.
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get remove sbcl clisp
sudo apt-get install ecl&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To start Swank server manually, enter this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;ecl --load ~/.vim/pack/plugins/start/slimv/slime/start-swank.lisp&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Then edit a Lisp source file and enter the normal command
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt; to connect to it and bring up the REPL
      window.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To start Swank automatically from Slimv, there is nothing more
      to be done.  Just edit a Lisp source file and enter the normal
      mode command &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt;.  While running in GNU
      Screen, tmux or a desktop environment, Slimv can automatically
      detect CLISP and start Swank server with it.
    &lt;/p&gt;
    &lt;p&gt;
      There is a possible timeout issue to be aware of though.  ECL
      can take a minute or two to compile the code it loads the first
      time Swank server is started.  However, Slimv has a default
      timeout period of 20 seconds, so Slimv may fail with the
      following error message:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;SWANK server is not running.  Press ENTER to continue.&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      If this happens, just wait for ECL to complete compiling Swank
      server.  Once it starts Swank server, enter the normal mode
      command &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt; again and it should connect
      immediately.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;use-vlime-with-clisp&quot;&gt;Use Vlime with CLISP&lt;/h3&gt;
&lt;p&gt;
  This subsection assumes that you have already read and tried the
  &lt;a href=&quot;#get-started-with-vlime-and-sbcl&quot;&gt;&lt;em&gt;Get Started with
  Vlime and SBCL&lt;/em&gt;&lt;/a&gt; section, so you are familiar with Vlime
  basics.  Now we will see what more it takes to use Vlime with CLISP
  in the steps below:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Let us assume we want to start afresh with CLISP, i.e. we do not
      have previous artefacts created by SBCL.  To clean up old
      artefacts, enter these commands:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -rf ~/.sbclrc ~/quicklisp
sudo apt-get remove sbcl&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install CLISP with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get install clisp&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install Quicklisp using CLISP with these commands:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;curl -O https://beta.quicklisp.org/quicklisp.lisp
clisp -i quicklisp.lisp -x &apos;(quicklisp-quickstart:install)&apos;
clisp -i ~/quicklisp/setup.lisp -x &apos;(ql:add-to-init-file)&apos;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;enter&lt;/kbd&gt; in the end, when prompted, to complete the
      installation.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Add the following code to &lt;code&gt;~/.vimrc&lt;/code&gt;:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let g:vlime_cl_impl = &apos;clisp&apos;
function! VlimeBuildServerCommandFor_clisp(vlime_loader, vlime_eval)
    return [&apos;clisp&apos;, &apos;-i&apos;, a:vlime_loader,
                   \ &apos;-x&apos;, a:vlime_eval,
                   \ &apos;-repl&apos;]
endfunction&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Unlike Slimv, automatic start of Swank server with Common Lisp
      implementations other than SBCL are not supported out of the
      box, so the above Vim script tells Vlime how to start Swank
      server with CLISP.  The &lt;code&gt;-repl&lt;/code&gt; option is used to
      work around an issue that is explained in the next point.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Vlime is now ready to be used with CLISP.  Just edit a Lisp
      source file and enter the normal mode command
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt; to start Swank server and
      connect to it automatically.
    &lt;/p&gt;
    &lt;p&gt;
      You may see the following error in the SLIME debugger
      (&lt;code&gt;sldb&lt;/code&gt;) split window:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;SOCKET-STATUS on #1=#&amp;lt;INPUT STRING-INPUT-STREAM&amp;gt; is illegal&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      Despite the above error, the following message should appear at
      the bottom:
    &lt;/p&gt;
    &lt;pre&gt;&lt;samp&gt;Vlime Connection 1 established.&lt;/samp&gt;&lt;/pre&gt;
    &lt;p&gt;
      If the above message occurs, you can ignore this error, close
      the debugger window as well as the console output window and
      continue to use Vlime normally.
    &lt;/p&gt;
    &lt;p&gt;
      The &lt;code&gt;-repl&lt;/code&gt; option used in the previous step ensures
      that the REPL starts despite this error.  Without it, this step
      would not have succeeded.  This is what I meant when I said
      earlier that we may need to work around certain errors while
      using these plugins with a Common Lisp implementation other than
      SBCL.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;use-vlime-with-ecl&quot;&gt;Use Vlime with ECL&lt;/h3&gt;
&lt;p&gt;
  Here are the steps to use Vlime with ECL:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Let us assume we want to start afresh with ECL, i.e. we do not
      have previous artefacts created by SBCL or ECL.  To clean up old
      artefacts, enter these commands:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -rf ~/.sbclrc ~/.clisprc.lisp ~/quicklisp
sudo apt-get remove sbcl clisp&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install ECL with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get install ecl&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install Quicklisp using ECL with these commands:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;curl -O https://beta.quicklisp.org/quicklisp.lisp
ecl --load quicklisp.lisp --eval &apos;(quicklisp-quickstart:install)&apos; --eval &apos;(quit)&apos;
ecl --load ~/quicklisp/setup.lisp --eval &apos;(ql:add-to-init-file)&apos; --eval &apos;(quit)&apos;&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;enter&lt;/kbd&gt; in the end, when prompted, to complete the
      installation.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Add the following code to &lt;code&gt;~/.vimrc&lt;/code&gt;:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let g:vlime_cl_impl = &apos;ecl&apos;
function! VlimeBuildServerCommandFor_ecl(vlime_loader, vlime_eval)
    return [&apos;ecl&apos;, &apos;--load&apos;, a:vlime_loader,
                 \ &apos;--eval&apos;, a:vlime_eval]
endfunction&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Edit a Lisp source file and enter the normal mode command
      &lt;kbd&gt;\&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt; to start Swank server and
      connect to it automatically.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;other-lisp-dialects&quot;&gt;Other Lisp Dialects&lt;/h2&gt;
&lt;p&gt;
  So far, we have seen how to use Slimv or Vlime with a Common Lisp
  implementation.  Now let us see how well these plugins work with
  other Lisp dialects.  Vlime does not support other Lisp dialects.
  It supports Common Lisp only.  Slimv supports two other popular
  dialects of Lisp: Scheme and Clojure.  In the next two subsections,
  we see how
&lt;/p&gt;
&lt;h3 id=&quot;use-slimv-with-mit-gnu-scheme&quot;&gt;Use Slimv with MIT/GNU Scheme&lt;/h3&gt;
&lt;p&gt;
  Slimv is documented to work with MIT/GNU Scheme on Linux only.
  Enter
  &lt;code&gt;:help slimv-installation&lt;/code&gt; in Vim to read more about it.
  It says the following under the &quot;Prerequisites&quot; section.
&lt;/p&gt;
&lt;blockquote&gt;
  Lisp or Clojure or MIT/GNU Scheme (Linux only) installed.
&lt;/blockquote&gt;
&lt;p&gt;
  Further, the Swank loader script for MIT/GNU Scheme named
  &lt;code&gt;swank-mit-scheme.scm&lt;/code&gt; says the following in its source code
  comments:
&lt;/p&gt;
&lt;blockquote&gt;
  You need MIT/GNU Scheme 9.2
&lt;/blockquote&gt;
&lt;p&gt;
  At the time of writing this article, I have confirmed that both
  these requirements indeed need to be met to use Slimv with MIT/GNU
  Scheme.  Here are the steps to use Slimv with MIT/GNU Scheme:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Install MIT/GNU Scheme with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;sudo apt-get mit-scheme&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Ensure that &lt;code&gt;vim-nox&lt;/code&gt;, tmux and Slimv are installed
      as explained in the
      &lt;a href=&quot;#get-started-with-slimv-and-sbcl&quot;&gt;&lt;em&gt;Get Started with
      Slimv and SBCL&lt;/em&gt;&lt;/a&gt; subsection earlier.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      This is an optional step.  To start Swank server automatically
      from Slimv, run Vim in tmux, GNU Screen or a desktop
      environment.  In this article, we use tmux, so start tmux with
      this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      This step is necessary only if you are not using tmux, GNU
      Screen or a desktop environment.  In such a case, enter this
      command to start Swank server manually:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;scheme --load ~/.vim/pack/plugins/start/slimv/slime/contrib/swank-mit-scheme.scm&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a new Scheme source code file, say, &lt;code&gt;foo.scm&lt;/code&gt;
      with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;vim foo.scm&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To connect to Swank server, enter the following command in Vim
      normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt;
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type some code into the buffer for the new file.  To do so,
      first type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and type this code:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;(display &quot;hello, world\n&quot;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.  To evaluate, the
      current expression under the cursor, enter the following command
      in normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;e&lt;/kbd&gt;
    &lt;/p&gt;
    &lt;p&gt;
      Both the current expression and its result should appear in the
      REPL window.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  I have confirmed that the steps above work fine with MIT/GNU Scheme
  9.1.1 on Debian GNU/Linux 9.11 (stretch).  Like I mentioned before,
  Slimv requires Linux to work with MIT/GNU Scheme.  For example,
  trying to start Swank server with MIT/GNU Scheme 9.2 on macOS High
  Sierra 10.13.6 fails with this error:
&lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;; /usr/local/Cellar/mit-scheme/9.2_2/lib/mit-scheme-c/include/config.h:879:10:
fatal error: &apos;sys/types.h&apos; file not found&lt;/samp&gt;&lt;/pre&gt;
&lt;p&gt;
  Further, the version of MIT/GNU Scheme really needs to be 9.x.  For
  example, when I try to start Swank with MIT/GNU Scheme 10.1.5 on
  Debian GNU/Linux 10.1 (buster), the following error occurs:
&lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;;The object #[package 12 (user)], passed as an argument to -&amp;gt;environment, is not an environment.&lt;/samp&gt;&lt;/pre&gt;
&lt;h3 id=&quot;use-slimv-with-clojure&quot;&gt;Use Slimv with Clojure&lt;/h3&gt;
&lt;p&gt;
  Slimv works fine with Clojure too.  However, it may have some
  trouble locating Clojure on the system if we attempt to start Swank
  server automatically with Clojure.  That is because where and how
  Clojure is installed varies from operating system to operating
  system and also depends on the installation procedure chosen to set
  up Clojure.
&lt;/p&gt;
&lt;p&gt;
  On Unix-like systems, Slimv looks for JAR files that match the glob
  pattern &lt;code&gt;clojure*.jar&lt;/code&gt; at paths that match the glob
  pattern &lt;code&gt;/usr/local/bin/*clojure*&lt;/code&gt;
  and &lt;code&gt;~/*clojure&lt;/code&gt;, in that order.  On Windows, it looks
  for the JAR files at directory paths that match the glob
  pattern &lt;code&gt;C:\*clojure*&lt;/code&gt; and &lt;code&gt;C:\*clojure*\lib&lt;/code&gt;.
  Additionally, Slimv also looks for the JAR files at the paths
  mentioned in the &lt;code&gt;PATH&lt;/code&gt; environment variable.  There are
  a few more strategies too to locate Clojure but we will not get into
  that here.
&lt;/p&gt;
&lt;p&gt;
  In this section, I will show how to build Clojure from source with
  Maven and install it at &lt;code&gt;~/clojure/clojure.jar&lt;/code&gt;, a path
  Slimv can easily find, so installing it here would mean that the
  steps below would work everywhere regardless of the operating
  system.  If you are on Windows, install Clojure
  at &lt;code&gt;C:\clojure\clojure.jar&lt;/code&gt; instead.
&lt;/p&gt;
&lt;p&gt;
  Here are the steps to install Clojure at
  &lt;code&gt;~/clojure/clojure.jar&lt;/code&gt; and use it with Slimv:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;
      Choose one of the two sets of commands below to install Maven:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# On Debian, Ubuntu, etc.
sudo apt-get install maven

# On macOS
brew install openjdk maven
export JAVA_HOME=/usr/local/opt/openjdk
export PATH=&quot;$JAVA_HOME/bin:$PATH&quot;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Enter these commands to install Clojure:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/clojure/clojure.git ~/clojure
git -C ~/clojure checkout clojure-1.10.1
mvn -f ~/clojure/pom.xml -Plocal -Dmaven.test.skip=true package&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Ensure that &lt;code&gt;vim-nox&lt;/code&gt;, tmux and Slimv are installed
      as explained in
      the &lt;a href=&quot;#get-started-with-slimv-and-sbcl&quot;&gt;&lt;em&gt;Get Started
      with Slimv and SBCL&lt;/em&gt;&lt;/a&gt; subsection earlier.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      This is an optional step.  To start Swank server automatically
      from Slimv, run Vim in tmux, GNU Screen or a desktop
      environment.  In this article, we use tmux, so start tmux with
      this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      This step is necessary only if you are not using tmux, GNU
      Screen or a desktop environment.  In such a case, enter these
      commands to start Swank server manually:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SWANK_DIR=~/.vim/pack/plugins/start/slimv/swank-clojure
java -cp &quot;$HOME/clojure/clojure.jar:$SWANK_DIR&quot; clojure.main -i &quot;$SWANK_DIR/swank/swank.clj&quot; -e &apos;(swank.swank/start-repl)&apos; -r&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Create a new Clojure source code file, say, &lt;code&gt;foo.clj&lt;/code&gt;
      with this command:
    &lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;vim foo.clj&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      To connect to Swank server, enter the following command in Vim
      normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;c&lt;/kbd&gt;
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;
      Type some code into the buffer for the new file.  To do so,
      first type &lt;kbd&gt;i&lt;/kbd&gt; to enter insert mode and type this code:
    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(println &quot;hello, world&quot;)&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;
      Type &lt;kbd&gt;esc&lt;/kbd&gt; to return to normal mode.  To evaluate, the
      current expression under the cursor, enter the following command
      in normal mode:
    &lt;/p&gt;
    &lt;p&gt;
      &lt;kbd&gt;,&lt;/kbd&gt;&lt;kbd&gt;e&lt;/kbd&gt;
    &lt;/p&gt;
    &lt;p&gt;
      Both the current expression and its result should appear in the
      REPL window.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;comparison-of-slimv-and-vlime&quot;&gt;Comparison of Slimv and Vlime&lt;/h2&gt;
&lt;p&gt;
  Finally, let me provide a comparison of both Slimv and Vlime side by
  side.  This comparison table below is not exhaustive.  There are
  more differences between the tools than what is mentioned below.
&lt;/p&gt;
&lt;table class=&quot;grid top&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Slimv&lt;/th&gt;
      &lt;th&gt;Vlime&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;width: 50%&quot;&gt;
        &lt;p&gt;
          Slimv&apos;s directory structure conforms to the directory
          structure of plugins in a Vim package as well as the default
          directory structure expected by popular Vim plugin managers,
          so installing Slimv is quite straightforward.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td style=&quot;width: 50%&quot;&gt;
        &lt;p&gt;
          Vlime&apos;s directory structure does not conform to the
          directory structure of plugins in a Vim package or the
          default directory structure expected by popular Vim plugin
          managers.  As a result, Vim&apos;s native support for packages
          cannot be used to install Vlime.  Installing it via a plugin
          manager requires fiddling with
          Vim&apos;s &lt;code&gt;runtimepath&lt;/code&gt; option in order to load it
          successfully.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;width: 50%&quot;&gt;
        &lt;p&gt;
          Slimv requires a Vim package that is compiled with support
          for Python interface.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td style=&quot;width: 50%&quot;&gt;
        &lt;p&gt;
          Vlime does not have this requirement.  It can work with
          basic Vim that does not have Python interface.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv requires Vim to be running within tmux, GNU Screen or
          a desktop environment to be able to start Swank server
          automatically.  If you have none of these, Swank server
          needs to be started manually.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime does not require tmux, GNU Screen or a desktop
          environment in order to start Vlime server automatically.
          It can start Vlime server on its own.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv does not require Quicklisp to install Swank.  Slimv
          bundles the Swank server code with itself.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime requires Quicklisp to be installed.  It relies on
          Quicklisp to install Swank the first time it is needed.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv bundles Paredit with itself.  Installing Slimv also
          provides Paredit.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime does not bundle Paredit with itself.  Paredit needs to
          be installed separately.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          The buffer for REPL is interactive in Slimv.  We can type
          code directly into the REPL window and type &lt;kbd&gt;enter&lt;/kbd&gt;
          to execute it.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          The buffer for REPL is not interactive in Vlime.  Its
          &lt;code&gt;nomodifiable&lt;/code&gt; option is set, so we cannot type
          code directly into the REPL window.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Paredit electric returns work fine with Slimv.  Slimv remaps
          the &quot;enter&quot; key to show argument list of the current
          function after inserting electric returns.  It takes care of
          preserving the electric return functionality of Paredit.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Paredit electric returns do not work fine with Vlime.  Vlime
          remaps the &quot;enter&quot; key to show argument list of the current
          function without inserting electric returns.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv shows argument list of a function, symbol description,
          etc. in the status line or message area at the bottom.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime shows argument list of a function, symbol description,
          etc. in separate split windows.  These are extra windows to
          skip over while cycling between windows with the normal mode
          &lt;kbd&gt;ctrl&lt;/kbd&gt;&amp;nbsp;+&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;&amp;nbsp;&lt;kbd&gt;w&lt;/kbd&gt;
          command which could feel inconvenient.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv shows trace results, macro expansion, cross reference,
          etc. in the REPL buffer.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime shows resultions of trace results, macro expansion,
          cross reference, etc. in split windows.  These are extra
          windows to skip over while cycling between windows.  This
          could feel inconvenient.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv supports programming in Common Lisp, MIT/GNU Scheme
          and Clojure.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime supports programming in Common Lisp only.  It does not
          support Scheme or Clojure.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv supports rainbow parentheses by adding
          &lt;code&gt;let g:lisp_rainbow=1&lt;/code&gt; to &lt;code&gt;~/.vimrc&lt;/code&gt;.
          With this feature, parentheses at different levels have
          different colours and matching parentheses have the same
          colour.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime does not have rainbow parentheses.  However, this is
          not a major problem because there are several independent
          plugins available that provide rainbow parentheses.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;p&gt;
          Slimv cross-reference commands do not help us to jump
          directly to a function listed in the results.
        &lt;/p&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;p&gt;
          Vlime cross-reference commands create a xref buffer that
          allows us to jump directly to a function listed in the
          results by moving the cursor to the function name in the
          xref buffer and typing &lt;code&gt;enter&lt;/code&gt;.
        &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;quick-recommendation&quot;&gt;Quick Recommendation&lt;/h2&gt;
&lt;p&gt;
  If you are looking for a quick recommendation on which plugin to
  use, I am going to recommend Slimv.  It has been around for much
  longer.  It supports a wider variety of Lisp implementations.  I
  find its default key bindings more convenient.  A truly interactive
  REPL buffer is also a bonus.  Also, Slimv supports Scheme and
  Clojure whereas Vlime does not.  Having said that, I think it is a
  good idea to try out both the plugins on your own and then find out
  which one suits you more.
&lt;/p&gt;
&lt;h2 id=&quot;disclosure&quot;&gt;Disclosure&lt;/h2&gt;
&lt;p&gt;
  Four bugs were harmed while writing this article!
&lt;/p&gt;
&lt;p&gt;
  While writing this article, I found the following four bugs in Slimv
  which were then promptly squashed:
  &lt;a href=&quot;https://github.com/kovisoft/slimv/pull/87&quot;&gt;#87&lt;/a&gt;,
  &lt;a href=&quot;https://github.com/kovisoft/slimv/pull/88&quot;&gt;#88&lt;/a&gt;,
  &lt;a href=&quot;https://github.com/kovisoft/slimv/pull/89&quot;&gt;#89&lt;/a&gt; and
  &lt;a href=&quot;https://github.com/kovisoft/slimv/pull/90&quot;&gt;#90&lt;/a&gt;.
&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://web.archive.org/web/20160303225220/http://osdir.com/ml/lisp.cmucl.devel/2003-08/msg00302.html&quot;&gt;Couple of Emacs hacks&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://groups.google.com/forum/#!topic/vim_announce/EKTuhjF3ET0&quot;&gt;Vim 8.0 Released&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://kovisoft.github.io/slimv-tutorial/tutorial.html&quot;&gt;Slimv Tutorial&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://github.com/l04m33/vlime/blob/master/vim/doc/vlime-tutor.txt&quot;&gt;A Tutorial for Vlime&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
<!-- ### -->
&lt;p&gt;
  &lt;a href="https://susam.net/lisp-in-vim.html"&gt;Read on website&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/lisp.html&quot;&gt;#lisp&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/programming.html&quot;&gt;#programming&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/vim.html&quot;&gt;#vim&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/technology.html&quot;&gt;#technology&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/how-to.html&quot;&gt;#how-to&lt;/a&gt;
&lt;/p&gt;
<!-- END HTML -->
    </content>
  </entry>
  <entry>
    <title>Vim Sudo Write Trick</title>
    <link href="https://susam.net/vim-sudo-write-trick.html"/>
    <id>urn:uuid:69a7c1b8-0ecd-4660-8585-9b97d711dd44</id>
    <updated>2005-08-25T00:00:00Z</updated>
    <content type="html">
<!-- BEGIN HTML -->
&lt;h2 id=&quot;trick&quot;&gt;The Trick&lt;/h2&gt;
&lt;p&gt;
  You open a file, edit it and save it only to get the E45 error
  message that says:
&lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;E45: &apos;readonly&apos; option is set (add ! to override)&lt;/samp&gt;&lt;/pre&gt;
&lt;p&gt;
  You now realise that only root can edit the file.  What do you?
  Start over?  No, instead try this:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:w !sudo tee &quot;%&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
  I learnt this trick recently from the comment section
  of &lt;a href=&quot;https://web.archive.org/web/20051120054527/http://www.vim.org/tips/tip.php?tip_id=975&quot;&gt;Tip
  #975&lt;/a&gt; on the Vim Tips website.
&lt;/p&gt;
&lt;h2 id=&quot;explanation&quot;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;
  How does the &lt;code&gt;:w !sudo tee &quot;%&quot;&lt;/code&gt; trick work?  Let us look
  at the command part-by-part:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code&gt;:w !{cmd}&lt;/code&gt;&lt;/p&gt;
    &lt;p&gt;
      Execute &lt;code&gt;{cmd}&lt;/code&gt; with all lines in buffer as standard
      input.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code&gt;&quot;%&quot;&lt;/code&gt;&lt;/p&gt;
    &lt;p&gt;
      The &lt;code&gt;%&lt;/code&gt; is replaced with the current filename.  The
      quotes around it keeps the filename as a single argument even if
      it contains whitespace.
    &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code&gt;tee {file}&lt;/code&gt;&lt;/p&gt;
    &lt;p&gt;
      The &lt;code&gt;tee&lt;/code&gt; command is a Unix command (not a Vim
      command).  It copies standard input to standard output
      and &lt;code&gt;{file}&lt;/code&gt;.
    &lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;more&quot;&gt;More Information&lt;/h2&gt;
&lt;p&gt;
  For more information on this command, enter the following commands
  in Vim:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:help :w_c
:help current-file
:help :_%&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
  Also, enter the following command in shell:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;man tee&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
  I hope this was fun!
&lt;/p&gt;
<!-- ### -->
&lt;p&gt;
  &lt;a href="https://susam.net/vim-sudo-write-trick.html"&gt;Read on website&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/vim.html&quot;&gt;#vim&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/unix.html&quot;&gt;#unix&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/technology.html&quot;&gt;#technology&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/how-to.html&quot;&gt;#how-to&lt;/a&gt;
&lt;/p&gt;
<!-- END HTML -->
    </content>
  </entry>
</feed>
