Source

slimv / description.txt

---------------------------------------------------------------------------------------------
Script name
---------------------------------------------------------------------------------------------
slimv.vim

---------------------------------------------------------------------------------------------
Summary
---------------------------------------------------------------------------------------------
          1         2         3         4         5         6         7
01234567890123456789012345678901234567890123456789012345678901234567890123456789

SLIME-like Lisp and Clojure REPL inside Vim with Profiling, Hyperspec, Paredit

---------------------------------------------------------------------------------------------
Description
---------------------------------------------------------------------------------------------
Slimv tries to mimic a subset of SLIME's (Superior Lisp Interaction Mode for Emacs) functionality inside Vim on Linux, Windows and Mac OS X. The script defines functions and keybindings to send s-expressions to a console mode Lisp or Clojure REPL (Read-Eval-Print Loop). Slimv runs its own REPL or connects to a running REPL started by a previous Slimv session, the connection is established when the first Slimv command is executed (e.g. an s-expression is evaluated).

The Lisp REPL buffer can also be opened inside Vim as a Vim buffer with syntax highlighting and autoindenting, Lisp commands may be entered in the command line, just as in a regular REPL. The script also has a basic support for Clojure REPL.

Slimv supports the same profiling tool that comes with SLIME. The script also has a Common Lisp Hyperspec lookup feature and it is able to lookup symbols in the Clojure API, as well as in JavaDoc. Symbol name completion is supported via Vim's omni-completion based on the hyperspec symbol database.

Slimv comes with Paredit Mode, which is similar to the functionality of paredit.el in Emacs. Paredit Mode tries to maintain the balanced state of matched characters (parenthesis marks, square brackets, double quotes). Matched characters are inserted and removed in pairs, also when working with a block of text (well, mostly). Slimv also implements many paredit.el s-expression handling functions, like Split/Join/Wrap/Splice. Slurpage and Barfage known from Emacs is also possible but in a different fashion: you don't move the list element in or out of the list, rather you move the opening or closing parenthesis over the element or sub-list.

Check out the screenshot of Slimv having a clisp REPL buffer:
http://img6.imageshack.us/img6/5104/slimvscreenshotx.png

Another screenshot of Slimv running the Clojure Ants demo:
http://img21.imageshack.us/img21/3949/slimvants.png

And this is the symbol name completion in action (no, the pink background is not done by Slimv, this is Vim's default):
http://img18.imageshack.us/img18/5859/slimvcompl.png

Here follows a list of Slimv commands, any similarity with SLIME's menu is not coincidental. :)
For a more complete description with keybindings see the included documentation.

Edit commands:
    *  Close Form
    *  Complete Symbol
    *  Paredit Toggle

Evaluation commands:
    *  Eval Defun
    *  Eval Last Expression
    *  Pprint Eval Last Expression
    *  Eval Region
    *  Eval Buffer
    *  Interactive Eval
    *  Undefine Function

Debug commands:
    *  Macroexpand-1
    *  Macroexpand
    *  Trace
    *  Untrace
    *  Disassemble
    *  Inspect

Compile commands:
    *  Compile Defun
    *  Compile and Load File
    *  Compile File
    *  Compile Region

Profile commands:
    *  Load Profiler
    *  Profile
    *  Unprofile
    *  Unprofile All
    *  Show Profiled
    *  Profile Report
    *  Profile Reset

Documentation commands:
    *  Describe Symbol
    *  Apropos
    *  Hyperspec
    *  Generate Tags

REPL commands:
    *  Connect to Server
    *  Send Input
    *  Interrupt Lisp Process
    *  Close and Send Input
    *  Previous Input
    *  Next Input

Many Slimv commands operate on s-expressions or symbols, just like in SLIME. Place the cursor at any location inside the s-expression or on the symbol's name then invoke the command. This builds a command specific form and sends it to the running REPL for evaluation.

For more information see the documentation coupled with the script, please refer to section "External Utilities" for other useful Lisp editing tips not covered by Slimv.
 
---------------------------------------------------------------------------------------------
Installation details
---------------------------------------------------------------------------------------------
For the latest development version please visit the Slimv repository:
http://bitbucket.org/kovisoft/slimv/

Extract the zip archive into your vimfiles or runtime directory. The archive contains the following files:
    *  doc/slimv.txt
    *  ftdetect/clojure.vim
    *  ftplugin/metering.lisp
    *  ftplugin/slimv.py
    *  ftplugin/slimv.vim
    *  ftplugin/slimv-clhs.vim
    *  ftplugin/slimv-cljapi.vim
    *  ftplugin/slimv-javadoc.vim
    *  ftplugin/clojure/slimv-clojure.vim
    *  ftplugin/lisp/slimv-lisp.vim
    *  indent/clojure.vim
    *  plugin/paredit.vim
    *  syntax/clojure/slimv-syntax-clojure.vim

Slimv works on Windows, Linux and Mac OS X (via Terminal.app), Cygwin is supported (but needs the Windows Python). The script requires the following programs installed on your system:
    *  Lisp (any console Common Lisp should be OK) or Clojure
    *  Python 2.4 or later
    *  Pywin32 is recommended on Windows
Slimv tries to autodetect your Lisp/Clojure and Python installation directories. If it fails to determine the correct directories, then you need to enter path definitions into your vimrc file:
    let g:slimv_python = 'C:/MyPythonDir/python.exe'
    let g:slimv_lisp = 'C:/MyLispDir/mylisp.exe'

Should the autodetection for Clojure fail, set the Lisp path to the complete Clojure REPL startup command, something like:
    let g:slimv_lisp = '"java -cp /myclojuredir/clojure.jar clojure.main"'

Linux users using terminal emulator other than xterm should define the complete command to run the Slimv client + server. Here follows an example with konsole and clisp:
    let g:slimv_client = 'python ~/.vim/plugin/slimv.py -r "konsole -T Slimv -e @p @s -l clisp -s"'

See the included documentation for more complete installation and customization instructions.

---------------------------------------------------------------------------------------------
Script versions
---------------------------------------------------------------------------------------------

0.7.6: Cursor position is kept during evaluation, most Slimv commands made silent, bugfixes: find defun start when cursor is on a comment, keep newlines in Compile-Region, infinite loop when selecting form in empty buffer, error when opening REPL buffer with g:slimv_repl_split=0, REPL blinking in insert mode when visualbell is on, added the comma to the list of macro prefix characters (thanks to John Obbele), long/short Windows filename problem for REPL buffer. 

0.7.5: Added Cygwin compatibility using the Windows Python (thanks to Jerome Baum), display client error message when eval was not successful, form is passed to client via stdin instead of temp file, bugfixes: automatic reconnection when server closed and reopened, delete and yank also via named registers in paredit.vim, handle double quotes in Compile-Defun and Compile-Region.

0.7.4: Added autodetection for simple 'clojure' command on Linux, removed duplicates from history of commands entered in REPL buffer (those recallable with <Up>), bugfixes: infinite loop during eval when 'in-package' or 'in-ns' was in comment, Lisp prompt identification problems in REPL buffer, input line duplication in SBCL on Linux (assigned "*debug-io*" to stdin), Eval Defun sometimes missed last ")".

0.7.3: Added compatibility with Python 3.x, bugfixes: input lines for REPL were doubled on Linux (thanks to Andrew Hills), however not yet fixed for SBCL, enclose Slimv path in double quotes if contains space, select form when standing on prefix character (e.g. ' or `).

0.7.2: Added autodetection for /usr/local/bin/clojure on Linux, added special characters to Lisp keyword selection (iskeyword), run Vim's original ftplugin/lisp.vim for Clojure filetype, bugfixes: PareditWrap error when g:paredit_shortmaps=1 (thanks to Jon Thacker), buffer selection problems in case of three of more buffers (thanks to Philipp Marek), conflicting keybindings for SlimvGenerateTags, unmap error messages when g:paredit_mode=0.

0.7.1: Added option g:slimv_browser_cmd for opening hyperspec in a custom webbrowser (on behalf of Andreas Salwasser), added paredit handling for d<motion>, c<motion>, p and P commands: keep paren balance when deleting and pasting text, Paredit Toggle function removes and re-adds paredit keybindings, bugfix: D and C deleted till beginning of line if () or [] found, handle escaped \" characters inside string.

0.7.0: Added package/namespace support, new way of refreshing the REPL buffer via autocommands, removed 'RUNNING' mode, cursor stays in the current buffer at evaluation, added option g:slimv_updatetime, removed options related to the old way of refreshing (g:slimv_repl_return and g:slimv_repl_wait), removed debug logging, updated Clojure API to version 1.2, extended keyword definition when selecting symbols, bugfix: defmacro detection problem (again).

0.6.3: Added option to return cursor to the editor window from REPL buffer after evaluating an s-expression, Wrap: if standing on a paren then wrap the whole s-expression, Wrap selection: exit visual mode after command, Bugfixes: inserting double quotes in paredit mode (like "\""), dd in paredit mode when unbalanced form is inside comment, reopen REPL buffer after closing it via ":q", comment and string detection error with noignorecase setting, wrong positioning when moving parenthesis to the right, defmacro detection problem, paredit wrap selection missed last character when 'selection' was not "exclusive".

0.6.2: Added support for Mac OS X via Terminal.app (on behalf of Vlad Hanciuta), added string "clj" as a detector for Clojure (by Vlad Hanciuta), bugfixes: paredit wrap function missed last character when 'selection' was not "exclusive" (thanks to Marcin Fatyga), input was stuck inside SBCL debugger (on behalf of Philipp Marek and Dmitry Petukhov), occasional error messages during REPL buffer update, REPL menu was sometimes missing, occasional command line color problems.

0.6.1: Added Split/Join/Wrap/Splice functions to Paredit Mode, bugfixes: delete commands put erased characters into yank buffer, D does not delete whole line.

0.6.0: Added paredit mode, set wrap for REPL buffer.

0.5.6: Improved REPL buffer response time, added debug log flushing frequency, bugfix: early exit of REPL refresh mode on some machines.

0.5.5: Updated Clojure API to 1.1, expand tilde-prefix to home directory on Linux, autodetect Clojure in the user home directory on Linux. 

0.5.4: Added autodetection for clojure-contrib.jar and Clozure CL, applied lisp_rainbow to Clojure's [], renamed Clojure indent plugin to clojure.vim, switched on lisp indentation for Clojure files. 

0.5.3: Added Interrupt-Lisp-Process command, added mapping for the REPL menu, added special forms to Clojre API lookup, bugfixes: put cursor after the last character in insert mode when refreshing REPL buffer, fixed some Ctrl-C handling problems.

0.5.2: Adapted Clojure API lookup and autodetection to version 1.0, Complete-Symbol moved to separate Edit submenu, added Close-Form command.

0.5.1: Added symbol name completion based on the Hyperspec database.

0.5.0: Major project reorganization: Slimv is now a Lisp and Clojure filetype plugin, added Common Lisp Hyperspec, Clojure API and JavaDoc lookup, separate menu for REPL buffer, menu items work in every Vim mode, fixed mark 's usage bug.

0.4.1: Added profiler support for SBCL, new commands: Show Profiled/Send Input/Close and Send Input/Previous Input/Next Input, highlight error messages.

0.4.0: Added SLIME's profiling tool with support from Slimv, added command to generate tags file, fixed eval problems of large buffers, fixed Compile And Load filename problems with '\' on Windows, recycle old REPL temporary file at next server startup.

0.3.0: REPL buffer enhancements: added syntax highlighting and automatic indentation, it is possible to enter a multi-line command, Ctrl-C is working; server REPL window performance enhancement on Linux.

0.2.2: Fixed REPL input and output mix-up problems, evaluation performance enhancement, corrected some more macroexpand problems. 

0.2.1: Added basic Clojure support, fixed some macroexpand and REPL refresh problems.

0.2.0: Major update: Lisp REPL inside a Vim buffer.

0.1.4: Corrected the delayed display of last line in REPL window on Linux.
       Ctrl+C is propagated to Lisp REPL, so it is possible to interrupt a running program.

0.1.3: Handle DOS and Unix style line endings on Windows, don't write logfile when debug level not set

---------------------------------------------------------------------------------------------
Reddit
---------------------------------------------------------------------------------------------

Hi Reddit! I have just added Paredit Mode to my Slimv (Superior Lisp Interaction Mode for Vim) script. I submitted this to both /r/lisp and /r/Clojure because the script works for these languages. Paredit Mode for Vim is similar to how paredit.el works for Emacs: matched delimiters are added or removed in pairs, so that the balanced state of parens are maintained. It is also possible to use Paredit Mode alone, without the other Slimv functionalities, please find details in the script documentation. I hope you'll find it useful.

Lisp with Vim: a script that tries to mimic a subset of SLIME's functionality.

Lisp and Clojure REPL inside a Vim buffer: Major update to the Slimv script.

Lisp and Clojure REPL inside a Vim buffer: The Slimv script comes now with Profiling and Hyperspec lookup.

Lisp and Clojure REPL inside Vim with profiling and Hyperspec lookup: update to the Slimv script.

---------------------------------------------------------------------------------------------

Issues

- Ctrl+C works in server Lisp window (but only in Lisp implementations that support it, so not in SBCL)

---------------------------------------------------------------------------------------------

File list

doc/slimv.txt
ftdetect/clojure.vim
ftplugin/metering.lisp
ftplugin/slimv.py
ftplugin/slimv.vim
ftplugin/slimv-clhs.vim
ftplugin/slimv-cljapi.vim
ftplugin/slimv-javadoc.vim
ftplugin/clojure/slimv-clojure.vim
ftplugin/lisp/slimv-lisp.vim
indent/clojure.vim
syntax/clojure/slimv-syntax-clojure.vim

vim:wrap:
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.