diff options
Diffstat (limited to 'vim/bundle/slimv/doc')
-rw-r--r-- | vim/bundle/slimv/doc/paredit.txt | 461 | ||||
-rw-r--r-- | vim/bundle/slimv/doc/slimv.txt | 2171 |
2 files changed, 2632 insertions, 0 deletions
diff --git a/vim/bundle/slimv/doc/paredit.txt b/vim/bundle/slimv/doc/paredit.txt new file mode 100644 index 0000000..b740a11 --- /dev/null +++ b/vim/bundle/slimv/doc/paredit.txt @@ -0,0 +1,461 @@ +*paredit.txt* Paredit Last Change: 13 Dec 2016 + +Paredit Mode for Vim *paredit* *slimv-paredit* + Version 0.9.13 + +The paredit.vim plugin performs structured editing of s-expressions used in +the Lisp, Clojure, Scheme programming languages. It may come as part of Slimv +but it is also distributed separately as a standalone plugin. + +|paredit-mode| Paredit mode +|paredit-keys| Paredit keybindings +|paredit-options| Paredit options + +=============================================================================== +PAREDIT MODE *paredit-mode* + +Paredit mode is a special editing mode that keeps all matched characters +(parentheses, square and curly braces, double quotes) balanced, i.e. all opening +characters have a matching closing character. Most text entering and erasing +commands try to maintain the balanced state, so no single matched character is +added or deleted, they are entered or removed in pairs. +The function takes care of strings and comments, so no parenthesis and square +bracket balancing is performed inside a string or comment. +Please note that [] and {} pairs are not balanced for Lisp filetypes, only +for Clojure and Scheme. + +The idea is taken from the paredit mode of Emacs, but not all paredit.el +editing functions are implemented or behave exactly the same way as they do +in Emacs. + +When you enter a '(' then a matching ')' is automatically inserted. +If needed, spaces before and/or after the '()' pair are added. + +When you press ')' in insert mode then there's no need to insert a closing +parenthesis mark (it is already there), so the cursor is simply advanced past +the next closing parenthesis (then the next outer closing parenthesis, etc.). +The result of this is however that when entering text with paredit mode +you can use the same keystrokes as without paredit mode and you get the same +result. Of course you can choose to not enter the closing parenthesis (as +required without paredit mode), because it is already there. + +When you are trying to delete a ')' alone then it is not possible, the cursor +is simply moved inside the list, where all regular characters can be deleted. +When the list is finally empty: '()', then the deletion of the opening '(' +makes both parentheses erased at once, so the balanced state is maintained. + +All the above holds for [...] and "..." character pairs. + +When you are deleting multiple characters at once, e.g. deleting a whole line, +or deleting till the end of the line, etc, then the deletion logic of a single +character is iterated. This means that the whole line or the characters till +the end of the line, etc are not necessarily deleted all. Depending on the +number of open/close parentheses, square or curly braces, double quotes some +of them might be kept in order to maintain the balanced state. +For example if you press D in Normal mode to delete till the end of line +between the a and b parameters of the following Clojure function definition: + +(defn myfunc [a b c] (+ a b c)) + ^--- press D here + +then the closing ] as well as the last closing ) will not be deleted, because +in the list you have an ( and a [ to be matched, so the result will be: + +(defn myfunc [a]) + +If you are deleting multiple lines, then the above process is performed for +all lines involved. If a line was not completely cleared, then it is joined +with the next line and the process continues. + + +Of course not all Vim commands are compatible with the paredit mode (e.g. +you can yank and paste unbalanced code snippet, or comment out an asymmetrical +part of the code), and there is also the possibility to edit the source code +with paredit mode switched off or with another editor to make it unbalanced. +When paredit mode detects that the underlying code is not balanced, then the +paredit functionality is suspended until the top level form balance is fixed. +As soon as all parens are matched, the paredit mode is automatically resumed. +Paredit needs "syntax on" to identify the syntax elements of the underlying +code, so if syntax is switched off, then paredit will not be suspended inside +comments or strings. + + +Slurpage and Barfage known from Emacs is also possible but in a different +fashion: you don't move the symbols but move the opening or closing parenthesis +over the symbol or a sub-list. This way you can move any symbol or sub-list +into or out of the current list. It is not possible to move the parenthesis +over its pair, so for example if you move the opening parenthesis to the right, +then it will stop at the matched closing parenthesis. + + +Paredit mode is set by default for .lisp, .cl, .clj, cljs, .scm and .rkt files, +but it is possible to switch it off by putting the following statement in the +.vimrc file: + + let g:paredit_mode = 0 + +You can enable paredit mode for other file types as well. Here is how to set +it for Arc files in your .vimrc (assuming you have a filetype 'arc' defined): + + au FileType arc call PareditInitBuffer() + +Paredit is part of Slimv, but it is also distributed separately as a standalone +plugin. If you indend to use the SWANK client and/or Slimv's indentation and +syntax functions, then please install the Slimv plugin. Otherwise you may want +to install the Paredit plugin thus omitting other unnecessary files. + + +=============================================================================== +PAREDIT KEYBINDINGS *paredit-keys* + +Here follows a list of paredit keybindings: + + +Insert Mode: + + ( Inserts '()' and moves the cursor inside. Also adds leading + or trailing spaces when needed. + Inserts '(' when inside comment or string. + + ) Moves the cursor to the next closing parenthesis mark of + the current list. When pressed again then moves to the next + outer closing parenthesis, etc, until the closing of the + top level form is reached. + Inserts ')' when inside comment or string. + If |g:paredit_electric_return| is on then it also re-gathers + electric returns when appropriate. + + [ Inserts '[]' and moves the cursor inside. Also adds leading + or trailing spaces when needed. + Inserts '[' when inside comment or string. + + ] Moves the cursor to the next closing square bracket of the + current list. When pressed again then moves to the next + outer closing square bracket, etc, until the closing of the + top level form is reached. + Inserts ']' when inside comment or string. + If |g:paredit_electric_return| is on then it also re-gathers + electric returns when appropriate. + + { Inserts '{}' and moves the cursor inside. Also adds leading + or trailing spaces when needed. + Inserts '{' when inside comment or string. + + } Moves the cursor to the next closing curly brace of the + current list. When pressed again then moves to the next + outer closing curly brace, etc, until the closing of the + top level form is reached. + Inserts '}' when inside comment or string. + If |g:paredit_electric_return| is on then it also re-gathers + electric returns when appropriate. + + " When outside of string, inserts '""' and moves the cursor + inside. When inside string then moves to the closing '"'. + Inserts '"' when inside comment. Also insert '"' when inside + string and preceded by a '\'. + + <BS> When about to delete a (, ), [, ], or " and there are other + characters inside, then just skip it to the left. When + about to delete the opening part of the matched character + with nothing inside, then the whole empty list is removed. + + <Del> When about to delete a (, ), [, ], or " and there are other + characters inside, then just skip it to the right. When + about to delete the closing part of the matched character + with nothing inside, then the whole empty list is removed. + + <Enter> If |g:paredit_electric_return| is on then insert an + "electric return", i.e. create an empty line by inserting + two newline characters. + + +Normal Mode: + + ( Finds opening '(' of the current list. Can be pressed + repeatedly until the opening of the top level form reached. + + ) Finds closing ')' of the current list. Can be pressed + repeatedly until the closing of the top level form reached. + + [[ Go to the start of current/previous defun. + + ]] Go to the start of next defun. + + <Leader>< If standing on a delimiter (parenthesis or square bracket) + then moves it to the left by slurping or barfing the + s-expression to the left, depending on the direction of the + delimiter: + Pressing '<' when standing on a ')' makes the s-expression + to the left of the ')' going out of the current list. + Pressing '<' when standing on a '(' makes the s-expression + to the left of the '(' coming into the current list. + For example pressing <Leader>< at position marked with |: + (aaa bbb|) ---> (aaa|) bbb + aaa |(bbb) ---> |(aaa bbb) + + <Leader>> If standing on a delimiter (parenthesis or square bracket) + then moves it to the right by slurping or barfing the + s-expression to the right, depending on the direction of the + delimiter: + Pressing '>' when standing on a '(' makes the s-expression + to the right of the '(' going out of the current list. + Pressing '>' when standing on a ')' makes the s-expression + to the right of the ')' coming into the current list. + For example pressing <Leader>< at position marked with |: + (aaa|) bbb ---> (aaa bbb|) + |(aaa bbb) ---> aaa |(bbb) + + <Leader>J Join two subsequent lists or strings. The first one must end + before the cursor, the second one must start after the + cursor position. + For example pressing <Leader>J at position marked with |: + (aaa)| (bbb) ---> (aaa |bbb) + "aaa"| "bbb" ---> "aaa |bbb" + + <Leader>O Split ("Open") current list or string at the cursor position. + Opposite of Join. Key O is selected because for the original + Vim mapping J and O are also kind of opposites. + For example pressing <Leader>O at position marked with |: + (aaa |bbb) ---> (aaa) |(bbb) + "aaa|bbb" ---> "aaa" |"bbb" + + <Leader>W Wrap the current symbol in a pair of parentheses. The cursor + <Leader>w( is then positioned on the opening parenthesis, as wrapping + is usually done because one wants to call a function with + the symbol as parameter, so by pressing "a" one can enter + the function name right after the newly inserted "(". + For example pressing <Leader>W at position marked with |: + (aaa b|bb ccc) ---> (aaa |(bbb) ccc) + + <Leader>w[ Wrap the current symbol in a pair of square brackets, + similarly to <Leader>W. + For example pressing <Leader>w[ at position marked with |: + (aaa b|bb ccc) ---> (aaa |[bbb] ccc) + + <Leader>w{ Wrap the current symbol in a pair of curly braces, + similarly to <Leader>W. + For example pressing <Leader>w{ at position marked with |: + (aaa b|bb ccc) ---> (aaa |{bbb} ccc) + + <Leader>w" Wrap the current symbol in a pair of double quotes, + similarly to <Leader>W. + For example pressing <Leader>w" at position marked with |: + (aaa b|bb ccc) ---> (aaa "bbb|" ccc) + + <Leader>S Splice the current list into the containing list, i.e. + remove the opening and closing parens. Opposite of wrap. + For example pressing <Leader>S at position marked with |: + (aaa (b|bb ccc) ddd) ---> (aaa |bbb ccc ddd) + + <Leader><Up> Splice the current list into the containing list by deleting + everything backward from the cursor position up to the + opening paren. + For example pressing <Leader><Up> at position marked with |: + (aaa (bbb |ccc) ddd) ---> (aaa |ccc ddd) + + <Leader><Down> Splice the current list into the containing list by deleting + everything forward from the cursor position up to the + closing paren. + For example pressing <Leader><Down> at position marked with |: + (aaa (bbb| ccc) ddd) ---> (aaa |bbb ddd) + + <Leader>I Raise the current symbol, i.e. replace the current list with + the current symbol by deleting everything else (except the + symbol) in the list, including the enclosing pair of parens. + For example pressing <Leader>I at position marked with |: + (aaa (b|bb ccc) ddd) ---> (aaa |bbb ddd) + + x or <Del> When about to delete a (, ), [, ], or " and there are other + characters inside, then just skip it to the right. When + about to delete the closing part of the matched character + with nothing inside, then the whole empty list is removed. + When preceded by a <count> value then delete this many + characters. + + X When about to delete a (, ), [, ], or " and there are other + characters inside, then just skip it to the left. When + about to delete the opening part of the matched character + with nothing inside, then the whole empty list is removed. + + D Keep deleting characters towards the end of line, + maintaining the balanced state, i.e. keep the number of + opening and closing parens the same. + + C Same as 'D' but go to insert mode at the end. + + s Same as 'x' but go to insert mode at the end. + + dd Delete whole line by keeping the balanced state, i.e. + keep the number of opening and closing parens the same. + When preceded by a <count> value then delete this many + lines. + + cc Same as 'dd' but go to insert mode at the end. + + d{motion} Delete text till {motion}. Keeps text balanced, so if the + surrounded text contains unpaired matched characters then + they are not removed. + + c{motion} Delete text till {motion} and start insert mode. Keeps text + balanced just like d{motion}. + + p Put the text after the cursor with all unbalanced matched + characters removed. + + P Put the text before the cursor with all unbalanced matched + characters removed. + + +Visual Mode: + + ( Finds opening '(' of the current list and selects the whole + list. Can be pressed repeatedly until the top level form + selected. + + ) Finds closing ')' of the current list and selects the whole + list. Can be pressed repeatedly until the top level form + selected. + + d Delete the current visual selection. Keeps text balanced, + x so the the selection contains unpaired matched characters + <Del> then they are not removed. + + c Delete the current visual selection and start insert mode. + Keeps text balanced just like the 'd' command. + + <Leader>W Wrap the current visual selection in a pair of parentheses. + <Leader>w( The visual selection is kept. + + <Leader>w[ Wrap the current visual selection in a pair of square + brackets. The visual selection is kept. + + <Leader>w{ Wrap the current visual selection in a pair of curly braces. + The visual selection is kept. + + <Leader>w" Wrap the current visual selection in a pair of double + quotes. The visual selection is kept. + + +Please note that if variable |g:paredit_shortmaps| is nonzero then the +following normal mode mappings don't get a <Leader> prefix, they are mapped +to existing (but infrequently used) Vim functions and instead the original Vim +functions are mapped with the <Leader> prefix: + + <, >, J, O, W, S + + +Vim has many built-in mappings for manipulating s-expressions. Here follows a +list of useful commands, these are not defined by paredit.vim, they are +available even when paredit mode is switched off. + + % Find the matching pair of the parenthesis the cursor is + standing on. + + d% Delete till the matching parenthesis. Normally it is used + when the cursor is standing on a parenthesis (works with + square or curly braces as well). If not standing on a + parenthesis then deletes left till the first opening paren, + so this command may also be used to delete an s-expression + that is right before the cursor. + + daw Delete a word. Can be used to delete a list element, the + cursor may be placed anywhere in the element. + + da( Delete the innermost s-expression. The cursor may be placed + anywhere inside the s-expression. + + di( Same as da( but does not delete the enclosing parens. + + +Davide Taviani made a cheetsheet for Paredit, which can be accessed here: +https://github.com/StudyFlow/paredit.vim-cheatsheet + +=============================================================================== +PAREDIT OPTIONS *paredit-options* + +|g:paredit_disable_clojure| If defined, paredit is disabled for clojure files. + +|g:paredit_disable_hy| If defined, paredit is disabled for hy files. + +|g:paredit_disable_lisp| If defined, paredit is disabled for lisp files. + +|g:paredit_disable_scheme| If defined, paredit is disabled for scheme files. + +|g:paredit_disable_shen| If defined, paredit is disabled for shen files. + +|g:paredit_electric_return| If nonzero, electric return feature is enabled. + +|g:paredit_smartjump| If nonzero, '(' and ')' also target square brackets + and curly braces when editing Clojure or Scheme. + +|g:paredit_leader| Custom <Leader> setting for Paredit. + +|g:paredit_matchlines| Number of lines to look backward and forward + when checking if the current form is balanced. + +|g:paredit_mode| If nonzero, paredit mode is switched on. + +|g:paredit_shortmaps| If nonzero, paredit is remapping some one-letter + Vim commands that are not frequently used. + + + *g:paredit_disable_clojure* + *g:paredit_disable_lisp* + *g:paredit_disable_scheme* + *g:paredit_disable_shen* +If defined then paredit is disabled for the given file type. Useful to use +a different plugin for a specific file type, but keep using paredit for the +others. + + *g:paredit_electric_return* +If nonzero then "electric return" feature is enabled. This means that when an +<Enter> is pressed before a closing paren in insert mode, paredit will actually +insert two newlines creating an empty line. The extra newline is consumed at +pressing the next closing paren. This feature allows linewise editing of the +subform entered in the next (empty) line. +In other words <Enter> "opens" parenthetical expressions while editing, ')' +"closes" them. +Please note that electric return is disabled for the REPL buffer if Slimv +option |g:slimv_repl_simple_eval| is nonzero. In this case <Enter> is used +to send the command line to the swank server for evaluation. + +Please find a video demonstration of the electric return feature here: +http://img8.imageshack.us/img8/9479/openparen.gif + + *g:paredit_smartjump* +If nonzero, this option changes the behavior of '(' and ')' in normal and visual +modes when editing Clojure or Scheme. Rather than jumping to nearest open or close +parenthesis, instead the cursor will jump to the nearest '(', '[', or '{' if +you press '(', and it will jump to the nearest ')', ']', or '}' if you press +')'. This option makes it much easier to navigate nested Clojure data +structures. It does nothing if the filetype is not clojure or Scheme. + + *g:paredit_leader* +This option allows a custom <Leader> setting for the Paredit keybindings. +By default it has the same value as |mapleader|. If neither g:paredit_leader +nor mapleader are defined then the default <Leader> is "," in Paredit. +Example: + let g:paredit_leader = '\' +If this is set in the .vimrc then Wrap will be mapped to \W instead of ,W. + +There is a separate |g:slimv_leader| option for the general Slimv keybindings. + + *g:paredit_matchlines* +Number of lines to look backward and forward when checking if the current +top level form is balanced in paredit mode. Default is 100. + + *g:paredit_mode* +If nonzero then paredit mode is switched on, i.e. the plugin tries to keep the +balanced state of parens. This is the default behaviour. + + *g:paredit_shortmaps* +If nonzero, paredit is remapping some one-letter normal mode Vim commands that +are not frequently used. These are <, >, J, O, W, S. The original function of +these maps then can be reached via <Leader> (which is the "," character +by default in Paredit). +Otherwise these paredit functions can be reached via <Leader> maintaining the +original functions of these keys. + + +=============================================================================== +vim:tw=80:et:wrap:ft=help:norl: diff --git a/vim/bundle/slimv/doc/slimv.txt b/vim/bundle/slimv/doc/slimv.txt new file mode 100644 index 0000000..5ad493f --- /dev/null +++ b/vim/bundle/slimv/doc/slimv.txt @@ -0,0 +1,2171 @@ +*slimv.txt* Slimv Last Change: 02 Oct 2016 + +Slimv *slimv* + Version 0.9.13 + +The Superior Lisp Interaction Mode for Vim. +This plugin is aimed to help Lisp development by interfacing between Vim and +the Lisp REPL, similarly to Emacs/SLIME. +Slimv is actually a SWANK (TCP server for Emacs) client. +Slimv works on Windows, Linux, and Mac OS X, however the newly introduced +Paredit mode is operating system independent. Please visit |paredit.txt| for +additional information on Paredit mode. + +|slimv-installation| Installation +|slimv-configuration| Configuration +|slimv-swank| SWANK Features implemented in Slimv +|slimv-repl| Lisp REPL inside Vim +|slimv-clojure| Clojure support +|slimv-scheme| Scheme support +|slimv-package| Package and Namespace handling +|slimv-hyperspec| Hyperspec Lookup and Completion +|slimv-paredit| Paredit mode +|slimv-external| External utilities +|slimv-faq| Frequently Asked Questions +|slimv-changelog| Change Log +|slimv-issues| Known Issues +|slimv-todo| Todo +|slimv-credits| Credits + +For Vim version 7.0 and above. +This plugin is only available if 'compatible' is not set. + +{Vi does not have any of this} + +=============================================================================== +INSTALLATION *slimv-installation* + +Prerequisites: + + Required components: + - Vim 7.0 or newer installed with Python feature enabled. + This can be verified by the :ver command, look for the +python string. + It is recommended to have also the +balloon_eval feature for displaying + symbol descriptions in tooltip. + - Python 2.4 or later installed. + Must be the same Python version that was Vim compiled against. + This can also be verified by the :ver command, look for the + -DDYNAMIC_PYTHON_DLL=\"pythonXX\" string, where XX is the required + Python version. + - Lisp or Clojure or MIT Scheme (Linux only) installed. + Any Lisp implementation is OK that has SLIME support. + + Optional components: + - "Exuberant ctags" for tags file generation (if not bundled with Vim + already). See |slimv-ctags|. + - Slimv also contains SLIME (in fact the SWANK server part of SLIME) and + Swank Clojure. If you intend to use your own version of SLIME, then you + need to have your own SWANK server installed. + For example Clojure users might consider installing Leiningen and run the + SWANK server via 'lein swank', or use Cake via 'cake swank'. + +To install the script: + + - Install all required components described above. + - Download slimv.zip. + - Extract the zip archive into your vimfiles or runtime directory. + See Vim help file |usr_05.txt| for details on adding a plugin. + The archive contains the following files: + + doc/paredit.txt + doc/slimv.txt + ftdetect/clojure.vim + ftplugin/iterm.applescript + ftplugin/slimv.vim + ftplugin/slimv-clhs.vim + ftplugin/slimv-cljapi.vim + ftplugin/slimv-javadoc.vim + ftplugin/swank.py + ftplugin/clojure/slimv-clojure.vim + ftplugin/lisp/slimv-lisp.vim + ftplugin/r/slimv-r.vim + ftplugin/scheme/slimv-scheme.vim + indent/clojure.vim + indent/lisp.vim + indent/scheme.vim + plugin/paredit.vim + slime/* + swank-clojure/* + syntax/clojure/slimv-syntax-clojure.vim + syntax/lisp/slimv-syntax-lisp.vim + syntax/scheme/slimv-syntax-scheme.vim + + You might already have an ftdetect/clojure.vim file if you already use + another Clojure filetype plugin. In this case just keep the original file. + + - Start Vim or goto an existing instance of Vim. + - Execute the following command: +> + :helptags <your runtime directory>/doc + + (e.g :helptags $VIMRUNTIME/doc) +< + This will generate all the help tags for any file located in the doc + directory. + - Enter path definitions into your vimrc (if the default values are not + valid for your Vim/Lisp installation). + See |slimv-configuration| below on how to do this. + + +Uninstallation: + + - Exit all Vim instances and exit from the SWANK server. + - Delete the files that were copied to the vimfiles directory during + installation (see list of files above). + + +=============================================================================== +CONFIGURATION *slimv-configuration* + +|slimv-options| Options +|slimv-keyboard| Keyboard mappings + +------------------------------------------------------------------------------- + *slimv-options* + +The list below contains an alphabetical collection of Slimv options. +Below that list follows the detailed explanation on each option. +For the Paredit options please visit |paredit-options|. +For the Swank options plese visit |swank-configuration|. + +|g:scheme_builtin_swank| Enable MIT scheme's built-in swank server. + +|g:slimv_balloon| Specifies if tooltips are on. + +|g:slimv_browser_cmd| If nonempty, this command is used to open the + Common Lisp Hyperspec. + +|g:slimv_browser_cmd_suffix| Optional suffix for |g:slimv_browser_cmd| + +|g:slimv_clhs_root| Base URL for the Common Lisp Hyperspec. + +|g:slimv_clhs_user_db| User defined extension for Slimv's built-in + Common Lisp Hyperspec symbol database. + +|g:slimv_clhs_user_root| Base URL for the user defined CLHS extension. + +|g:slimv_cljapi_root| Base URL for the Clojure API. + +|g:slimv_cljapi_user_db| User defined extension for Slimv's built-in + Clojure API symbol database. + +|g:slimv_cljapi_user_root| Base URL for the user defined Clojure API + extension. + +|g:slimv_ctags| OS command to generate tags file. + +|g:slimv_disable_clojure| Disable Slimv for Clojure files. + +|g:slimv_disable_lisp| Disable Slimv for Lisp files. + +|g:slimv_disable_scheme| Disable Slimv for Scheme files. + +|g:slimv_echolines| Echo only this number of lines from the form + being evaluated. + +|g:slimv_impl| The Lisp implementation. Defaults to 'clisp'. + +|g:slimv_indent_keylists| Enable special indentation for keyword lists. + +|g:slimv_indent_maxlines| Maximum number of lines searched backwards for + indenting special forms + +|g:slimv_inspect_name| Name of the Inspect buffer. + +|g:slimv_javadoc_root| Base URL for the JavaDoc. + +|g:slimv_keybindings| Predefined Slimv keybindings. Possible values: + 1 = set #1, 2 = set #2, other = no keybindings + +|g:slimv_leader| Custom <Leader> setting for Slimv. + +|g:slimv_lisp| Path for the Lisp interpreter. + +|g:slimv_menu| If nonzero, Slimv menu is added to the Vim menu. + +|g:slimv_package| If nonzero, Slimv package/namespace handling is + switched on. + +|g:slimv_preferred| Name of the preferred lisp implementation. + +|g:slimv_python_version| If defined, determines Python version to use, + when 3 use :python3 and friends, otherwise + :python or :python3 is used as available. + +|g:slimv_repl_max_len| Maximum number of lines in the REPL buffer. + +|g:slimv_repl_name| Name of the REPL buffer. + +|g:slimv_repl_simple_eval| <CR> evaluates form in the REPL buffer. + +|g:slimv_repl_split| Open the Lisp REPL buffer in a split window + or in a separate buffer. + +|g:slimv_repl_syntax| Enable syntax coloring for the REPL buffer. + +|g:slimv_repl_wrap| Set wrap mode for the REPL buffer. + +|g:slimv_simple_compl| Use simple completion instead of fuzzy completion. + +|g:slimv_sldb_name| Name of the SLDB buffer. + +|g:slimv_sldb_wrap| Set wrap mode for the SLDB buffer. + +|g:slimv_swank_clojure| Command used to start the Clojure SWANK server. + +|g:slimv_swank_cmd| Command used to start the Lisp SWANK server. + +|g:slimv_swank_scheme| Command used to start the Scheme SWANK server. + +|g:slimv_tags_file| Name of tags file used by Slimv. + +|g:slimv_threads_name| Name of the Threads buffer. + +|g:slimv_timeout| Timeout defined for starting up or connecting + to the SWANK server. + +|g:slimv_unmap_cr| Do not add special insert mode mapping for <CR>. + +|g:slimv_unmap_tab| Do not add special insert mode mapping for <Tab>. + +|g:slimv_unmap_space| Do not add special insert mode mapping for <Space>. + +|g:slimv_updatetime| Alternative value for 'updatetime' during REPL + refresh. + +|g:swank_block_size| SWANK connection output buffer size. + +|g:swank_host| Host name or IP address of the SWANK server. + +|g:swank_port| Port number of the SWANK server. + + +Note: Most options require to restart the Vim session when modified. + +Slimv tries to autodetect the Lisp installation directory, however the +algorithm is not very sophisticated. +If the installation directories are put in the path, then the autodetection +should find them (this is usually the case on Linux). Otherwise (on Windows) +some frequently used directories are searched under C:\ and C:\Program Files. +For a minimum, Slimv needs to know the path of the existing Lisp installation, +so if autodetection does not work for you, then set the following global +variables in your vimrc. + +Note: On Windows use the / (slash) character instead of \ (backslash) as the + directory separator to avoid any incidental character escaping problems + while the paths are beeing passed between the Slimv processes. + On Linux this is not an issue. + + *g:slimv_lisp* +This is the installation path of the Lisp interpreter. +Example: + let g:slimv_lisp = 'C:/MyLispDir/mylisp.exe' + + *g:slimv_impl* +This is the Lisp implementation used. Slimv tries to autodetect it at script +startup. If the autodetection fails, set this to the actual Lisp +implementation. +Example: + let g:slimv_impl = 'sbcl' + + *g:slimv_preferred* +Name of the preferred lisp implementation. The autodetection mechanism tries to +choose this one if possible, i.e. if installed and found in the path or in the +standard installation directories. +It's typical use is when there are multiple lisps present in the system and +the autodetection chooses an undesired implementation. + +Valid choices are for lisp: + 'sbcl', 'clisp', 'cmu', 'ecl', 'allegro', 'lispworks', 'clozure' +For Scheme: + 'mit' + +Example: + let g:slimv_preferred = 'clisp' +This means that Slimv will use clisp even if both sbcl and clisp are installed +and the autodetection would choose sbcl. + + *g:slimv_disable_clojure* + *g:slimv_disable_lisp* + *g:slimv_disable_scheme* +If any of these options are set then the Slimv will not be loaded and enabled +for the corresponding filetype. + +Example: +You want to use Slimv for Lisp but don't want to use it for Scheme: + let g:slimv_disable_scheme = 1 + + *g:slimv_swank_cmd* + *g:slimv_swank_clojure* + *g:slimv_swank_scheme* +Slimv tries to autodetect your Lisp/SWANK installation. +If the location for the SWANK server is not identified by the script, or you +want to use a different command for starting the SWANK server, then you may +want to customize the g:slimv_swank_cmd (general) and g:slimv_swank_clojure +(Clojure specific) and g:slimv_swank_scheme (Scheme specific) options in your +.vimrc file. +Enter a Vim command here that spawns a detached process that runs the SWANK +server of your choice. It is important to use a Vim command here that returns +immediately and does not wait for the termination of the detached process, +so begin the command with !start on Windows...: + + let g:slimv_swank_cmd = '!start "c:\Program Files\Lisp Cabinet\bin\ccl\wx86cl.exe" -l "c:\Program Files\Lisp Cabinet\site\lisp\slime\start-swank.lisp"' + let g:slimv_swank_clojure = '!start "c:\clojurebox\swank-clojure\src\start-swank.bat"' + +...and end the command with an & on Linux: + + let g:slimv_swank_cmd = '! xterm -e sbcl --load /usr/share/common-lisp/source/slime/start-swank.lisp &' + let g:slimv_swank_clojure = '! xterm -e lein swank &' + +On OS X the following or similar command may be used (but sometimes the above +Linux xterm command also works): + + let g:slimv_swank_cmd = '!osascript -e "tell application \"Terminal\" to do script \"sbcl --load ~/.vim/slime/start-swank.lisp\""' + let g:slimv_swank_clojure = '!osascript -e "tell application \"Terminal\" to do script \"cake swank\""' + +These are examples only, the Lisp command and the path to the SWANK server +may need to be changed in the command depending on the actual configuration. + +It is also possible to run the SWANK server manually prior running Vim. +Slimv detects if a SWANK server is running and connects to it at the first +evaluation request. + +Note: It is recommended to pass + :dont-close t +for the swank:create-server function call in the SWANK startup procedure. +This makes a permanent SWANK server that listens continuously. Otherwise +each time the SWANK connection is lost, the SWANK server needs to be +restarted again. +Example startup script: + +(load (merge-pathnames "swank-loader.lisp" *load-truename*)) + +(swank-loader:init :delete nil + :reload nil + :load-contribs nil) + +(swank:create-server :port 4005 + :coding-system "iso-latin-1-unix" + :dont-close t) + + + *g:swank_block_size* +By default the SWANK server connection output buffer size is 4 or 8 kbytes. +All the data sent by the SWANK server is divided into this size blocks, so +if the SWANK server is sending large amount of data then this may result in +high number of data blocks sent, which may slow down Slimv. For greater +performance you may want to increase the block size, e.g. to 64 kbytes: + let g:swank_block_size = 65536 + + *g:swank_host* +Host name or IP address of the SWANK server. Default value is 'localhost'. +The SWANK server may run on a remote machine, but currently only unencrypted +plain socket communication is supported, no SSH or whatsoever. + +Please note that if the SWANK server is on a remote machine then Slimv is +unable to start it, so you need to run the SWANK server manually. +Actually there is a workaround for this on Linux: run Vim inside a GNU screen +session. Slimv will autodetect this and modify the Swank command so that the +Swank server is run inside a newly opened virtual terminal in screen. +Slimv also autodetects an existing tmux session, so you can use tmux instead +of GNU screen for the same purpose. + + *g:swank_port* +The SWANK server is connected to port 4005 by default. This can be changed +using the g:swank_port option. + + *g:scheme_builtin_swank* + +Since version 9.1.1 MIT scheme has a built-in swank server that can replace +contrib/swank-mit-scheme.scm coming with Slime. This option enables the +built-in swank server. +Please be aware that this is still experimental, so it is not enabled by +default. Using it may result in strange errors, but in other areas it also +may be superior to swank-mit-scheme.scm and it is actively maintained. + + *g:slimv_timeout* +There is a 20 second timeout defined for starting up or connecting to the +SWANK server. This timeout can be changed via the g:slimv_timeout option. +Please note that the very first startup of the SWANK server may take more time +than the subsequent startups, so it is not recommended to make this timeout +too low. + + *g:slimv_ctags* +It is possible to generate tags file from within Vim. By default Slimv assumes +that ctags.exe is stored somewhere along with the standard Vim path designated +by $vim or $vimruntime. The command for generating tags file is then +automatically built at script startup. +If ctags.exe is stored somewhere else, or the default ctags options are +unsatisfactory, then override this option with the desired command. +The default ctags command is: + "ctags.exe -a --language-force=lisp *.lisp *.clj" + + *g:slimv_tags_file* +The Find-Definition function gets location information from the SWANK server. +Slimv uses a dedicated tags file for Find-Definitions. By default this is a +temporary file but the filename can be overridden via this option. If this +variable is set to the empty string ('') then the whole Find-Definitions +function is disabled. + + *g:slimv_keybindings* +Defines the keybinding set used by Slimv. +Value 0 means no keybinding at all. +Value 1 defines the short keybinding with one-key bindings (after <Leader>). + Example: Eval-Defun is mapped to ,d +Value 2 defines the easy keybinding with two-key bindings (after <Leader>). + Example: Eval-Defun is mapped to ,ed +Other values mean no predefined keybinding is wanted. +<Leader> is set to "," by default in Slimv. + + *g:slimv_unmap_cr* + *g:slimv_unmap_tab* + *g:slimv_unmap_space* +If nonzero then Slimv does not add special insert mode mapping for the +<CR>/<Tab>/<Space> keys in the editor buffer. This might come in handy when +additional scripts are installed for Vim together with Slimv and there is a +collision in the mappings for these keys. Of course in this case the related +Slimv functions will not work when pressing those keys. + +Note: in case Paredit is used then the |g:paredit_electric_return| option shall +also be set to 0 in order to completely disable mappings for <CR>. + + *g:slimv_leader* +This option allows a custom <Leader> setting for the Slimv keybindings. +By default it has the same value as |mapleader|, except when |mapleader| is +<Space> which <Leader> is currently not supported by Slimv. +If neither g:slimv_leader nor |mapleader| are defined or |mapleader| is <Space> +then the default <Leader> is "," in Slimv. +Example: + let g:slimv_leader = '\' +If this is set in the .vimrc then Eval-Defun will be mapped to \d instead of ,d. + +There is a separate |g:paredit_leader| option for the Paredit keybindings. + + *g:slimv_menu* +If nonzero then the Slimv menu is added to the end of the global menu. +Also the Slimv menu can be shown by pressing <Leader>, (defaults to ,,). + + *g:slimv_browser_cmd* +Specifies the command to start the browser in order to display the Common Lisp +Hyperspec or the Clojure API. If the command contains spaces then enclose the +whole string in double quotes or escape the spaces with a backslash. +This option is empty by default, which means that the command associated with +the .html extension (on Windows) or xdg-open (on Linux) is used to start the +browser. If xdg-open is not installed then the Python webbrowser package is +used to identify the default browser on Linux. + + *g:slimv_browser_cmd_suffix* +When using option |g:slimv_browser_cmd| the Hyperspec page URL is appended to +the browser command. However sometimes it might be needed to add a suffix +at the end of the browser command. +Slimv automatically adds the "&" suffix in order to fork the browser and +return control immediately to Vim. If you don't want to fork the browser +then set |g:slimv_browser_cmd_suffix| to "". Also use this option if you want +to have extra parameters or commands in the browser command after the URL, +but in this case remember to add the "&" when forking is needed. + + *g:slimv_repl_name* +Name of the REPL buffer. Default is 'REPL'. Space and some other special +characters need to be escaped (e.g. 'Slimv\ REPL', '\#REPL\#'). +Not all special characters are allowed, e.g. '*' does not work in Windows. + + *g:slimv_sldb_name* +Name of the SLDB buffer. Default is 'SLDB'. Space and some other special +characters need to be escaped (e.g. 'Slimv\ Debugger', '\#SLDB\#'). +Not all special characters are allowed, e.g. '*' does not work in Windows. + + *g:slimv_inspect_name* +Name of the Inspect buffer. Default is 'INSPECT'. Space and some other special +characters need to be escaped (e.g. 'Slimv\ Incpector', '\#INSPECT\#'). +Not all special characters are allowed, e.g. '*' does not work in Windows. + + *g:slimv_threads_name* +Name of the Threads buffer. Default is 'THREADS'. Space and some other special +characters need to be escaped (e.g. 'Slimv\ Threads', '\#THREADS\#'). +Not all special characters are allowed, e.g. '*' does not work in Windows. + + *g:slimv_repl_split* +Open the Lisp REPL buffer in a split window or in a separate buffer in Vim. +The default is to use split window. If you prefer having REPL being in a hidden +buffer then set this option to zero. This way the REPL buffer will be opened +at the first evaluation, but any subsequent evaluation will be performed +silently, with the REPL buffer kept hidden. + +It is also possible to define the desired split direction. The following +values may be used for |g:slimv_repl_split|: + + 0: no split + 1: horizontal split above (default) + 2: horizontal split below + 3: vertical split left + 4: vertical split right + + *g:slimv_updatetime* +The REPL buffer is refreshed at every keystroke or when the user doesn't press +a key for the time specified with 'updatetime'. Slimv alters the value for +'updatetime' to a lower value when the REPL buffer is changed, so that the +update frequency gets higher while there is new REPL output. The original +value for 'updatetime' is restored when there is no REPL output. +The g:slimv_updatetime option defines the alternative (lower) value for +'updatetime' during REPL refresh. If you don't want that Slimv changes +'updatetime', then set g:slimv_updatetime to zero. +The default value is 200 (=0.2 sec). + + *g:slimv_package* +If nonzero then Slimv package/namespace handling is switched on. Please find +details in the |slimv-package| section. + + *g:slimv_repl_max_len* +Maximum number of lines for the REPL buffer. Only the last this number of lines +are kept in the REPL buffer, all lines before that are erased, but some opening +parens and/or double quotes may remain in order to maintain their balanced +state. The default value for this option is 0, meaning that the number of lines +is unlimited, i.e. no line is ever erased. + + *g:slimv_repl_simple_eval* +This option controls the behaviour of insert mode <CR>, <Up>, <Down> in the +REPL buffer. + +If nonzero then: + <CR> Evaluates the form entered in the command line + <Up> Brings up the previous command from the command line history + <Down> Brings up the next command from the command line history + <C-CR> Closes and evaluates the form entered in the command line + +If the option is zero then: + <C-CR> Closes and evaluates the form entered in the command line + <C-Up> Brings up the previous command from the command line history + <C-Down> Brings up the next command from the command line history + <CR> Inserts a newline + <Up> Moves the cursor up + <Down> Moves the cursor down + + *g:slimv_repl_syntax* +Enables syntax highlighting for the REPL buffer. It is enabled by default but +one may want to switch it off for these reasons: + 1. The REPL buffer contains s-expressions and their output mixed. The REPL + output is generally not related to s-expressions, therefore may confuse + syntax coloring. + 2. REPL output may contain very long lines, which significantly slows down + syntax coloring in Vim. If you don't want to switch REPL syntax coloring + completely off then it is recommended to adjust the |synmaxcol| parameter + to a relatively low value to increase syntax coloring speed. + + *g:slimv_repl_wrap* +Set wrap mode for the REPL buffer, which means the lines longer than the +window width will not be hidden to the right. Instead they will be continued +in the next display line. +This is the default behaviour as it is how regular REPL windows work. This +mode also enables keybindings for cursor movements, so that an <Up> keypress +will move the cursor one line on the display and not one line in the document. + + *g:slimv_sldb_wrap* +Set wrap mode for the SLDB buffer, which means the lines longer than the +window width will not be hidden to the right. Instead they will be continued +in the next display line. Disabled by default. + + *g:slimv_echolines* +If a long form is evaluated then echo only this number of lines from the +beginning of the form. This option prevents filling the REPL buffer with +mostly unnecessary information. Closing parens are added to the end even if +the end of the form is not echoed, so paren balance is kept. +If this option is set to zero then no line is echoed at all, if set to -1 +then all lines are always echoed. + + *g:slimv_indent_keylists* +If nonzero then Slimv indents keyword lists like that: + +(:foo :bar + :baz :boo) + +instead of the function-style indentation: + +(:foo :bar + :baz :boo) + +This option is switched on by default. There are however some special forms +(defpackage, defsystem) that are always indented in the function-style, e.g.: + +(defpackage :my-package + (:use :cl + :my-utils)) + + *g:slimv_indent_maxlines* +Maximum number of lines searched backwards for indenting special forms, like +flet, labels, macrolet. Setting it to a high value may slow down indenting. + + *g:slimv_balloon* +Specifies if describe tooltips are on (see |swank-describe|). + + *g:slimv_simple_compl* +If set to 1, swank:simple-completion is used. By default the fuzzy completion +is active, so that "mvb<TAB>" expands to "multiple-value-bind" +(see |swank-completions|). + + *g:slimv_clhs_root* + *g:slimv_cljapi_root* + *g:slimv_javadoc_root* +Base URL for the Common Lisp Hyperspec, Clojure API, and JavaDoc. +If the Hyperspec/API is downloaded to the hard disk, then set these variables +to the base path of the local copy, something like (where file:// specifies +the file protocol): +"file:///c:/doc/HyperSpec/" (Windows). +or +"file:///usr/local/doc/HyperSpec/" (Linux). +It is possible to extend the Hyperspec symbol database with user defined +symbols, see |g:slimv_clhs_user_db| and |g:slimv_cljapi_user_db|. + + *g:slimv_clhs_user_db* + *g:slimv_cljapi_user_db* + *g:slimv_clhs_user_root* + *g:slimv_cljapi_user_root* +If you want to extend Slimv's built-in Hyperspec/API symbol database, define +the list of additional symbols in these variables. The format of this list is +the following: [["symbol1", "url1"], ["symbol2", "url2"], ...]. +If the URL contains a ":" character then it is considered to be a fully +qualified URL, otherwise it is a relative address to the Hyperspec root +defined in |g:slimv_clhs_root| or |g:slimv_cljapi_root|. +It is also possible to define a separate base URL for the user extensions via +|g:slimv_clhs_user_root| or |g:slimv_cljapi_user_root|. + +Example: + let g:slimv_clhs_user_root = "http://myhyperspec.com/" + let g:slimv_clhs_user_db = [ + \["my-cool-function", "mycoolfunc.htm"], + \["my-super-function", "mysuperfunc.htm"], + \["my-awesome-function", "myawesomefunc.htm"]] + +Remember to insert a backslash at the beginning of each additional line of a +multi-line Vim command. + + *g:slimv_template_apropos* +Lisp form built when issuing the 'apropos' command. +Example: + let g:slimv_template_apropos = '(apropos "%1")' + + *g:slimv_python_version* +Selects the python version to use. +When exists and set to 3, the :python3 and :py3file commands are used, when +exists and not set to 3, the :python and :pyfile commands are used, and when +it is not defined, has('python') has('python3') determine which are used. + +------------------------------------------------------------------------------- + *slimv-keyboard* + +The default keybindings (|g:slimv_keybindings|=1) and another easy to remember +built-in keybinding set (|g:slimv_keybindings|=2) for Slimv are the following. +Please note that the leading ',' key below refers to <Leader>, which is set +by Slimv to ',' by default (see |g:slimv_leader|). +In the graphical menu the currently active keyboard shortcuts are displayed +beside the menu item names, so one can refer to the GUI menu as a quick +reference for the keymappings. +Vim defines timeout values for mapped key sequences. If you find that Vim does +not allow you enough time between pressing ',' and the last key(s) of the +sequence, then you may want to fine tune these Vim options: +|timeout|, |ttimeout|, |timeoutlen|, |ttimeoutlen|. + + Set#1 Set#2 Command + --------------------------------------------------- + ,, ,, Slimv Menu + + Edit commands (Insert mode): + <C-X>0 Close Form + <Tab> Complete Symbol + <Space> Function Arglist + <C-]> Find Definitions (Tag Lookup) + + Edit commands (Normal mode): + ,) ,tc Close Form + ,( ,(t Paredit Toggle + ,j ,fd Find Definitions + + Evaluation commands: +["x],d ["x],ed Eval Defun (current top level form) [put in register x] +["x],e ["x],ee Eval Current Expression (current subform) [put in reg. x] +["x],r ["x],er Eval Region (visual selection) [or text from register x] + ,b ,eb Eval Buffer + ,v ,ei Interactive Eval (evaluates in frame when in SLDB) + ,u ,eu Undefine Function + + Debug commands: + ,1 ,m1 Macroexpand-1 + ,m ,ma Macroexpand All + ,t ,dt Toggle Trace + ,T ,du Untrace All + ,B ,db Set Breakpoint + ,l ,dd Disassemble + ,i ,di Inspect (inspects in frame when in SLDB) + ,a ,da Abort + ,q ,dq Quit to Toplevel + ,n ,dc Continue + ,H ,dl List Threads + ,K ,dk Kill Thread + ,G ,dg Debug Thread + + Compile commands: + ,D ,cd Compile Defun + ,L ,cl Compile and Load File + ,F ,cf Compile File +["x],R ["x],cr Compile Region [or text from register x] + + Cross Reference commands + ,xc ,xc Who Calls + ,xr ,xr Who References + ,xs ,xs Who Sets + ,xb ,xb Who Binds + ,xm ,xm Who Macroexpands + ,xp ,xp Who Specializes + ,xl ,xl List Callers + ,xe ,xe List Callees + + Profile commands: + ,p ,pp Toggle Profile + ,B ,pb Profile by Substring + ,U ,pa Unprofile All + ,? ,ps Show Profiled + ,o ,pr Profile Report + ,x ,px Profile Reset + + Documentation commands: + ,s ,ds Describe Symbol + ,A ,da Apropos + ,h ,dh Hyperspec + ,] ,dt Generate Tags + + Repl commands: + ,c ,rc Connect to Server + ,y ,ri Interrupt Lisp Process + ,- ,- Clear REPL + ,Q ,rq Quit REPL + + + Set#1 Set#2 Command + --------------------------------------------------- + ,\ ,\ REPL Menu (separate menu, valid only for the REPL buffer) + + REPL menu commands: + ,. ,rs Send Input + ,/ ,ro Close and Send Input + ,g ,rp Set Package + <C-C> <C-C> Interrupt Lisp Process + ,<Up> ,rp Previous Input + ,<Down> ,rn Next Input + ,- ,- Clear REPL + +Note: +Some mappings accept an optional "x prefix (where x is a register name) +similarly to Vim's p (put) and y (yank) commands. These commands may +additionally use the given Vim register to store or retrieve text. + +Commands "Eval Defun" and "Eval Current Expression" also store the form being +evaluated in the given register. When using uppercase register name, the +current form is appended to the contents of the register. + +Commands "Eval Region" and "Compile Region" use the contents of the given +register (instead of the selected region) for evaluation or compilation. + +This feature may be used for remembering and recalling a test form used for +testing parts of the code. + +Sample workflow: + 1. place the cursor on the test form + 2. "a,d stores the test form in register 'a' and evaluates it + 3. test fails, bug is in other parts of code, try to fix it + 4. send fixed code to the swank server the usual way + 5. "a,r recalls the test form from register 'a' and evaluates it + 7. repeat steps 3.-5. + +It is possible to create a custom mapping that appends a test form after the +selected s-expression so that they are evaluated together in one step. +This can be useful for quick testing. In order to evaluate the current form +together with a test form use function SlimvEvalTestExp(), to evaluate and test +the current toplevel form use function SlimvEvalTestDefun(). +Create a custom mapping by passing your test form to any of these functions. + +Example: + +noremap ,f :<C-U>call SlimvEvalTestDefun("(my-test-form)")<CR> + +With the above custom mapping pressing ,f makes the current toplevel form +evaluated followed by (my-test-form). + +Instead of appending a test form, it is also possible to wrap the current form +in a test form. Use the special symbol %1 to define the location where the +test form shall contain the s-expression to be tested. + +Example: + +noremap ,wp :<C-U>call SlimvEvalTestExp("(ps:ps %1)")<CR> + +The above definition creates a custom mapping to see parenscript output of +the selected form. Pressing ,wp wraps the current s-expression in a +(ps:ps ...) test form and sends it to the swank server for evaluation. + + +Also see |slimv-repl| for additional keybindings valid only in the REPL buffer. +Some menu items or Slimv commands may differ in case Slimv uses the SWANK +client, please find details in |swank.txt|. + + +=============================================================================== +SWANK FEATURES *slimv-swank* + +The following major SLIME (SWANK) features are implemented in Slimv. +For a complete reference of SWANK functions implemented see |swank-functions|. + +|swank-eval| Evaluation +|swank-interrupt| Interrupt Lisp process +|swank-restarts| SLDB: Invoke restarts +|swank-backtrace| SLDB: Display backtrace with locals +|swank-arglist| Function argument list in status line +|swank-describe| Describe symbol in tooltip +|swank-completions| List of possible symbol completions +|swank-inspect| Inspector +|swank-threads| Threads +|swank-trace| Trace function +|swank-profile| Profiler +|swank-xref| Cross Reference +|swank-quickfix| Compiler errors in quickfix list +|swank-functions| SWANK functions implemented + +------------------------------------------------------------------------------- +EVALUATION *swank-eval* + +There are various methods for evaluating an s-expression in the SWANK server. +It is possible to eval the current top level form, the current subform, the +visually selected area, or the whole buffer. Consult the "Evaluation commands" +section in |slimv-keyboard| for the possible functions with their respective +keyboard shortcuts. + + +If debugger is activated and the cursor is placed on a frame line in the +Backtrace section, then the Interactive-Eval command evaluates expressions +in the scope of the given frame ("eval-in-frame"). + + +------------------------------------------------------------------------------- +INTERRUPT LISP PROCESS *swank-interrupt* + +It is possible to interrupt a running Lisp or Clojure process by selecting +the Interrupt-Lisp-Process menu item in the REPL or Slimv/Repl submenu, +or by pressing the keyboard shortcut <Leader>i. +It is also possible to map the Ctrl-C shortcut in normal mode to perform the +interrupt, but this may interfere with the "Copy to clipboard" function +especially on Windows. Here is how to do it: + + noremap <silent> <C-C> :call SlimvInterrupt()<CR> + +When a Lisp process is interrupted, we are dropped in SLDB (SLime DeBugger) +and the list of restarts (see |swank-restarts|) and calling frame stack +(see |swank-backtrace|) is displayed. +It is possible to inspect variables (see |swank-inspect|) and continue +or break program execution by selecting the appropriate restart. +It is also possible to change the value of variables or redefine functions +before resuming execution. + + +------------------------------------------------------------------------------- +INVOKE RESTARTS *swank-restarts* + +In case of an error or when the Lisp process is interrupted Slimv presents +the Swank debugger (SLDB) buffer. SLDB displays the condition and the list of +possible restarts, each line startin with the restart identifier, for example: + +DIVISION-BY-ZERO detected + [Condition of type DIVISION-BY-ZERO] + +Restarts: + 0: [RETRY] Retry SLIME REPL evaluation request. + 1: [*ABORT] Return to SLIME's top level. + 2: [ABORT-BREAK] Reset this thread + 3: [ABORT] Kill this thread + + +If you press Enter in normal mode on a restart line then the given restart +is invoked. +The most frequently used restarts have the following shortcuts defined: + + ,a Abort + ,q Quit To Toplevel + ,n Continue + + +------------------------------------------------------------------------------- +DISPLAY BACKTRACE *swank-backtrace* + +The Swank debugger (SLDB) is presented in a separate dedicated buffer. +Below the Restarts section SLDB displays the backtrace for the calling frames, +each line starting with the frame identifier, for example: + +Backtrace: + 0: (CCL::%FIXNUM-TRUNCATE #<Unknown Arguments>) + 1: (/ 1 0) + 2: (NIL #<Unknown Arguments>) + 3: (CCL::CALL-CHECK-REGS / 1 0) + 4: (CCL::CHEAP-EVAL (/ 1 0)) + 5: (SWANK::EVAL-REGION "(/ 1 0)") + + +If you press Enter in normal mode on a frame line then frame information +with the local variable bindings and source location information for that frame +are displayed in a fold. Pressing Enter again toggles the fold close/open. + +If you press Enter on a filename with source location information then Slimv +opens the given file in a buffer at the specified location. + +Some commands have modified behaviour when used on a frame: + + Interactive-Eval Evaluates expressions in the scope of the frame. + + Inspect Inspects objects within the scope of the frame. + + +------------------------------------------------------------------------------- +FUNCTION ARGUMENT LIST *swank-arglist* + +When entering an s-expression in insert mode, each time a space is pressed +after a non-whitespace character, then SWANK is requested for the function +argument list for the current function. If the function is known by SWANK +then the function prototype is displayed in the status line. The arglist is +condensed in order to fit the status line, so for functions with many +arguments the whole definition may not be visible. In this case use the +Describe function for displaying the full function definition. + +Note: the function argument list is not displayed when Slimv is not +connected to the SWANK server. + + +------------------------------------------------------------------------------- +DESCRIBE SYMBOL *swank-describe* + +When you hover your mouse over a function's name then the function description +is requested from SWANK and displayed in a tooltip, called balloonexpr in +Vim terms. This functionality requires that Vim is compiled with the ++balloon_eval feature enabled. + +If you don't have +balloon_eval or want to get the description for a general +symbol then it is possible to select the Describe-Symbol menu item from the +Slimv/Documentation submenu, or press the <Leader>s keyboard shortcut, +which then displays the symbol description in the Vim message area. + +Note: the symbol description is not displayed when Slimv is not connected +to the SWANK server. + + +------------------------------------------------------------------------------- +COMPLETIONS *swank-completions* + +The Vim omni-completion function requests the possible completions for the +symbol currently being entered from the SWANK server. The completion list +is displayed in a popup menu. +The keyboard shortcut for completion is <Tab>. This brings up the completions +popup menu if there are multiple choices. In the popup menu subsequent <Tab> +keypresses select the next possible completion. + +Option |g:slimv_simple_compl| determines whether simple or fuzzy completion +is used. Default is fuzzy completion. + +Note: completions are not displayed when Slimv is not connected to the +SWANK server. In this case the Hyperspec database is used for symbol lookup. + + +------------------------------------------------------------------------------- +INSPECTOR *swank-inspect* + +The Swank Inspector is presented in a separate buffer. In the Inspect buffer +the Enter key is remapped in normal mode for traversing the inspector output. + +When pressing Enter on the top line starting with 'Inspecting' then the +currently inspected value is reloaded. + +When pressing Enter on a line starting with <nn> (where nn is the action +identifier) then nn-th action is called. + +When pressing Enter on a line starting with [nn] (where nn is the part +identifier) then nn-th part is inspected. + +When pressing Enter on the last line starting with [<<] or pressing <Backspace> +then the inspector is popped up one level, or if this was the topmost level +then Slimv exits the Inspector. +Pressing <Leader>q also exits the Inspector. + +If the object is too big to be fully displayed, this is signaled by the +[--more--] and [--all---] texts. When pressing Enter on the line containing +[--more--] then the next part of the inspected object is queried from the +swank server and displayed in the Inspect buffer. +When pressing Enter on the [--all---] line then all parts of the inspected +object are fetched recursively up to the timeout defined by |g:slimv_timeout|. +Pressing <Esc> stops the recursive fetching process. + + +If debugger is activated and the cursor is placed on a frame line in the +Backtrace section, then the Inspect command inspects objects in the given +frame. It means that it is possible to examine the value of local variables +within the scope of the given frame ("inspect-in-frame"). + + +------------------------------------------------------------------------------- +THREADS *swank-threads* + +The Swank Threads are presented in a separate buffer. + +When the cursor is placed on a thread-line and <Backspace> or <Leader>k is +pressed or the Kill-Thread function is selected then the given thread is killed. +If multiple thread-lines are selected then all marked threads are killed. + +When the cursor is placed on a thread-line and <Leader>d is pressed or the +Debug-Thread function is selected then the given thread is interrupted and the +debugger is invoked. + +Pressing <Leader>r refreshes the thread list. + +Pressing <Leader>q exits the Threads buffer. + +------------------------------------------------------------------------------- +TRACE *swank-trace* + +It is possible to tell the SWANK server to trace or untrace functions. +There are some subtle differences in the trace handling with or +without SWANK. + +For the trace handling without SWANK please check options +|g:slimv_template_trace| and |g:slimv_template_untrace|. + +When using the SWANK server the Trace command toggles tracing for the +selected function. In this case there is no Untrace command, but there is +an Untrace-All command, which completely switches off tracing. +This complies with the SWANK tracing functionality. + + +------------------------------------------------------------------------------- +PROFILER *swank-profile* + +Slimv supports SLIME's profiler. It is possible to toggle profiling on a +function, on a set of functions whose name contains a given substring, or +unprofile all functions. You may query the profiler for the list of profiled +functions. After the profiling session it is possible to display the profiler +report. Upon selecting Reset all counters are cleared, so that a new +profiling session may be started. + + +------------------------------------------------------------------------------- +CROSS REFERENCE *swank-xref* + +SLIME's cross reference functionality can be used to list the functions +calling a specific function, the list of functions called from a specific +function, and other variable, macro, etc. references. +Please note that not all Lisp implementations support the xref functionality. + + +------------------------------------------------------------------------------- +QUICKFIX *swank-quickfix* + +The compiler error messages are fed into Vim's quickfix list, as well as +printed in the REPL buffer. Enter the :cw command to open the quickfix window. +Use :cn and :cp to jump to the next and previous error location, use :cr to +rewind to the first error. +Consult |quickfix| for details on using the quickfix functionality. + + +------------------------------------------------------------------------------- +SWANK FUNCTIONS *swank-functions* + +This section contains a reference for the Emacs/SLIME/SWANK functions +currently implemented in the Slimv SWANK client. + + :emacs-interrupt + :emacs-pong + :emacs-return + :emacs-return-string + :indentation-update + swank:compile-file-for-emacs + swank:compile-string-for-emacs + swank:connection-info + swank:create-repl + swank:debug-nth-thread + swank:describe-function + swank:disassemble-form + swank:eval-string-in-frame + swank:frame-locals-and-catch-tags + swank:frame-source-location + swank:fuzzy-completions + swank:init-inspector + swank:inspect-frame-var + swank:inspect-in-frame + swank:inspect-nth-part + swank:inspector-call-nth-action + swank:inspector-pop + swank:invoke-nth-restart-for-emacs + swank:kill-nth-thread + swank:list-threads + swank:listener-eval + swank:load-file + swank:operator-arglist + swank:profile-by-substring + swank:profile-report + swank:profile-reset + swank:profiled-functions + swank:quit-inspector + swank:quit-lisp + swank:set-package + swank:simple-completions + swank:sldb-abort + swank:sldb-continue + swank:swank-macroexpand-1 + swank:swank-macroexpand-all + swank:swank-require + swank:swank-toggle-trace + swank:throw-to-toplevel + swank:toggle-profile-fdefinition + swank:undefine-function + swank:unprofile-all + swank:untrace-all + swank:xref + swank-backend:frame-call + swank-backend:restart-frame + + +=============================================================================== +LISP REPL *slimv-repl* + +The Lisp REPL is displayed as a separate terminal window and also inside a +Vim buffer. The Lisp REPL buffer is opened when the SWANK server is started. +The REPL buffer is a more or less regular Vim buffer, all Vim keybindings and +commands can be used here as well. + +There are however some subtle differences. The main idea is that the last line +in the REPL buffer is a "command line", just like in any REPL. The command +line usually begins with a prompt, something like "[1] > ". The user types the +command after the prompt in Insert mode. When Enter (<CR>) is pressed, the +contents of the command line (which can actually be multiple lines, when +pasted) is sent to the Lisp REPL for evaluation. It is not allowed to +backspace before the end of the command line prompt. +Please remember that this evaluation style is working only in Insert mode, +in Normal mode the function of <CR> is left unchanged. +Other areas of the REPL buffer can be used to eval Lisp forms, just like +from the .lisp source code. So it is possible to move the cursor inside a form +that was previously eval-ed, make some changes, then eval it again. +Please note, that after evaluation the REPL buffer is refreshed, so the +changes made to the form are restored at that location, but the changed form +will be evaluated at the end of the REPL buffer. + +Another difference is the command line history, which can be activated by +pressing <Up> or <Down> in the command line (only in Insert mode). +When pressing <Up> or <Down> at an empty command prompt then each forms +previously entered may be recalled from the history. If however some text +is typed in the command line before pressing <Up> or <Down> then only forms +beginning with the given searchtext are recalled from the history. +In other words: text between the prompt and the cursor position is searched +in command history. Leading whitespaces are ignored both in the searchtext +and in the matching forms. + +Outside of the command line the <Up> and <Down> keys move the cursor, +as usual. + +The keys with modified meanings in the Lisp REPL buffer are listed below: + +Insert Mode: + + <CR> Sends the command typed in the last line to the Lisp REPL + for evaluation. + + <C-CR> Adds missing closing parentheses at the end of the command, + then sends the command to the Lisp REPL for evaluation. + + <BS> In the last line it deletes characters to the left only + until the end of the Lisp prompt reached. + + <Up> Brings up the previous command typed and sent to the Lisp + REPL when in the command line. + + <Down> Brings up the next command typed and sent to the Lisp REPL + when in the command line. + +Please note that the behaviour of <CR>, <Up>, <Down> is affected by the value +of option |g:slimv_repl_simple_eval|. + +The Lisp REPL can be closed by the 'Quit REPL' command (mapped to <Leader>Q +by default). This also closes the lisp process running the SWANK server. + + +=============================================================================== +CLOJURE SUPPORT *slimv-clojure* + +Vim has a built-in support for Lisp, however it has no Clojure support by +default. As Clojure is a Lisp dialect, Slimv simply reuses Vim's Lisp syntax +and indent plugins for Clojure. If this does not suit your needs, then it is +possible to download and install a separate Clojure plugin parallel to Slimv. + +In order to launch the Clojure REPL the variable |g:slimv_lisp| must be +properly set up. +The simplest definition is something like this, which assumes that the +directory for clojure.jar is in the PATH. Please note that the whole expression +needs to be enclosed in double quotes, as it will be passed to the server in +one single command line argument: + + let g:slimv_lisp = '"java -cp clojure.jar;clojure-contrib.jar clojure.main"' + +Here follows an example, which starts c:\Clojure\clojure.jar on Windows. +Remember to escape the backslashes: + + let g:slimv_lisp = + \ '"java -cp c:\\Clojure\\clojure.jar;c:\\Clojure\\clojure-contrib.jar clojure.main"' + + +=============================================================================== +SCHEME SUPPORT *slimv-scheme* + +Slimv has a limited support for Scheme: currently only MIT Scheme is supported +via the SWANK client, using a modified version of swank-mit-scheme.scm in the +slime/contrib directory. +The Scheme SWANK server also requires the 'netcat' program to create sockets. +Please read information about the implementation details in the file header of +swank-mit-scheme.scm. +There is no Hyperspec information for Scheme at the moment. + + +=============================================================================== +PACKAGE AND NAMESPACE HANDLING *slimv-package* + +Slimv has a basic support for handling Lisp packages and Clojure namespaces. +This means that at every form evaluation Slimv first searches the source file +for any preceding '(in-package ...)' form for Lisp and '(in-ns ...)' form for +Clojure. If found then each time the package/namespace definition is evaluated +first. This way it is possible to randomly re-evaluate forms in a source (or +multiple sources) that use multiple packages/namespaces, each time the correct +package/namespace will be used. +The package/namespace handling can be switched off via the |g:slimv_package| +option. + + +=============================================================================== +HYPERSPEC AND COMPLETION *slimv-hyperspec* + +Slimv contains Common Lisp Hyperspec, Clojure API and JavaDoc symbol databases. +When you are looking for the definition of a symbol, just place the cursor on +the symbol and select the 'Hyperspec' function. If the symbol is found in the +symbol database then the corresponding web page is displayed in the default +browser. It is also possible to select this function having just the beginning +of the symbol name, then the first match is presented to the user, and he/she +is asked to confirm or edit the symbol name before the hyperspec lookup. + +It is possible to use a local copy of the Hyperspec, for this you need to +define its base URL. See |g:slimv_clhs_root|, |g:slimv_cljapi_root| and +|g:slimv_javadoc_root| for details. + +It is also possible to add user defined symbols to the Hyperspec database, +see |g:slimv_clhs_user_db| and |g:slimv_cljapi_user_db|. + + +The SWANK client requests simple or fuzzy completion from the SWANK server, +see |swank-completions| for details. + +If the SWANK server is not connected, then Slimv uses the Hyperspec symbol +database for symbol name completion, via Vim's omni-completion feature +(if it is enabled and 'omnifunc' is not defined already to something else). +Start to enter the symbol in Insert mode, then at some point press the +<C-X><C-O> (omni-complete) key combination or select the 'Complete Symbol' +function. The first match in the symbol database is inserted at the cursor +position and a list of matching symbols is displayed in a submenu. +Use <C-N> to select the next match, <C-P> to select the previous match. + +See Vim help file |insert.txt| for details on the usage of the various +completion functions built in Vim. + + +=============================================================================== +EXTERNAL UTILITIES *slimv-external* + +This section is about utilities, settings, etc., not related strongly to Slimv, +but may be used to aim Lisp development. These are mostly built-in Vim features +or options, and sometimes external Vim plugins. +Slimv does not want to copy these functionalities, if they exist and work well. + + +1. Syntax highlighting + +The syntax highlighting is done via the default lisp.vim syntax plugin. +For Clojure files one has the following options: +a. use the Lisp filetype also for Clojure files (that approach is used by Slimv + for the REPL buffer if no other filetype is set) +b. install a Clojure Vim syntax plugin, like VimClojure. +c. newest Vim versions contain a specific Clojure syntax script. + + +2. Indentation + +The indentation is also done via the default lisp.vim indent plugin, or an +optionally installed Clojure indent plugin, just like for the syntax +highlighting. +When the SWANK client is connected to the server, then indentation information +is fetched from the SWANK server. This allows special indentation methods, +e.g. when the given macro has an &body argument then it is indented by 2 spaces +(instead of indenting the second argument below the first one). + +There are some built-in Vim reindentation commands that may come very handy +when editing Lisp files. One can define a custom key mapping for any of them, +such mappings are not defined by Slimv. + + = Reindent selection, after a text has been selected. + + == Reindent current line. + + vab= or [(v%= Select current list and reindent it. + + 99[(v%= Select top level form and reindent it. + + gg=G Reindent whole file. + + +3. Parenthesis handling + +First of all there is paredit mode. If you don't like it, Vim still obtains +many tools to aid working with parentheses. This is a very important topic +for a Lisp programmer. + + :inoremap ( ()<Esc>i Automatically insert closing parenthesis mark when + an opening one is inserted. + + :inoremap [ []<Esc>i Same as above but for square brackets. + + :set showmatch Briefly jump with the cursor to the matching + parenthesis or square bracket when a closing pair + is inserted. + + % Go to the matching parenthesis or square bracket. + + :source $VIMRUNTIME/macros/matchit.vim + Adds extended matching with "%" to Vim. + + vab or [(v% Select current list. + vib Select current list without enclosing parentheses. + yab Yank current list. + dab Delete current list. + + 99[(v% Select top level form. + + g:lisp_rainbow Colorize differing levels of parenthesization with + different highlighting. Currently works only for + the 'lisp' filetype, hopefully it will be added + soon to the Clojure plugins as well. + + +4. Completion + + CTRL-N The built-in Vim keyword completion is a very handy + CTRL-P feature. You start typing a word, and when CTRL-P + or CTRL-N is pressed, then Vim looks up the keyword + starting with the same letters as typed in up or + down direction in the current buffer. + This is not the same as the omni-completion + feature (see |slimv-hyperspec|). Omni-completion is + based on a symbol database and not on the contents + of the current buffer. + + :set complete The |'complete'| option controls how keyword + completion works. + + +5. Tag lookup + +Also see Slimv option |g:slimv_ctags|. + + |ctags| "Exuberant ctags" is a powerful utility for + generating tag database for different kind of + programming languages, including Lisp. Tag lookup + is then done via the CTRL-] (or :tag) command, + return to the previous positon with CTRL-T. + + ctags --language-force=lisp *.lisp *.clj + This or a similar command may be used to generate + tags file from .lisp and .clj files in a directory. + + +=============================================================================== +FAQ *slimv-faq* + +- Q: Why is this plugin called 'Slimv'? +- A: Because it is trying to mimic the popular Emacs extension 'SLIME'. + In SLIME 'E' stands for 'Emacs', so here it is replaced with 'V' as Vim. + The plugin is actually a SWANK (TCP server for Emacs) client. + To tell the truth, first I gave the name 'Slimvim' to the plugin but + then I found an (already abandoned) project called 'Slim-Vim' and I did + not want to interfere with it. + +- Q: Why another 'Superior Lisp Mode' if there is already one (for Emacs)? +- A: Because many programmers prefer Vim as a program text editor over Emacs, + including me. I don't want to start a holy war or whatsoever, I'm just + happy if someone else finds this plugin useful. + +- Q: But there are other similar projects for Vim. Why having yet another + SLIMxxx for Vim? +- A: To my knowledge, none of the above mentioned Vim scripts/extensions + contain all the functionalities of SLIME (nor does Slimv, to tell the + truth). There is definitely room for improvement. + It would be nice to make Vim as usable as Emacs for Lisp programming. + In my opinion the main barrier is the lack of asynchronous buffer update + in Vim, but this may change in the future. + +- Q: How does Slimv work? +- A: Slimv is a SWANK client that is able to communicate with a running + SWANK server, just as it is done by Emacs with SLIME. + The SWANK output is regularly polled via the socket connection and + interpreted in the REPL buffer opened in Vim. + The SWANK client is located in 'swank.py'. + +- Q: But there was a non-swank functionality built in Slimv, where is it now + and how can I use it? +- A: It has been removed since version 0.9.0, because the development focuses + on providing a fully functional SWANK client, so the non-swank functionality + was not maintained. If you want the old behaviour then fetch plugin + version 0.8.6 and set g:slimv_swank to 0 in your vimrc file. + +- Q: There is no SWANK server opened when I evaluate a form in Vim. +- A: There may be many reasons for that. Try to run the SWANK server manually, + Slimv detects if a SWANK server is running and is able to connect it. + - Check if the port number matches in Slimv and the SWANK server and + :dont-close is set to 't'. + - Verify the SWANK server command autodetected by Slimv: + :echo SlimvSwankCommand() + - Also check the following Slimv variables in Vim, maybe they are not + correctly autodetected and you need to override them in your .vimrc: + :echo g:slimv_lisp + :echo g:slimv_swank_cmd (or g:slimv_swank_clojure for Clojure) + +- Q: The Slimv plugin is not loaded for a .lisp (or .clj, etc) file. +- A: Filetype plugins should be enabled, check it via the :filetype command. + If needed, put this in your .vimrc file: + filetype plugin on + filetype indent on + You can check the scripts loaded with the :scriptnames command, + filetype.vim and ftplugin.vim should be listed in order to load other + filetype plugins. + The source buffer filetype should be lisp (or clojure, etc), check it via + :set ft? + The Slimv files should be in Vim's runtime path, check the path via + :set rtp? + slimv.vim should be in the ftplugin directory in the runtimepath, + there should be an ftplugin/lisp subdirectory containing slimv-lisp.vim. + Also make sure that no other ftplugin/lisp.vim is loaded that prevents + loading of the Slimv scripts. + +- Q: I experience weird problems when using the plugin, e.g. incorrect key + mappings, strange error messages, indentation missing, etc. +- A: You may have an installation problem, try to completely remove then + reinstall the plugin. + It may also cause problems when you have the Slimv repository checked + out directly into vimfiles. Checkout the project to somewhere else and + copy only the relevant Slimv files to vimfiles. + Most problems may be spot by enabling Vim's verbose mode and examining + the resulting logfile. Either run Vim this way: 'vim -V20test.log' or + enable verbose mode runtime just before the problem happens: + :set verbosefile=test.log + :set verbose=20 + It is also possible to save a log of the communication between Slimv and + the swank server by setting g:swank_log=1 in the .vimrc. + +- Q: Why is SLIME functionality XYZ missing from Slimv? +- A: Not all SLIME functions are implemented in the SWANK client, however + the list of these functions keep growing. Maybe future releases will + contain it. All feature requests are welcome. + +- Q: What is the version numbering concept? +- A: <major version>.<minor version>.<bugfix release>, where: + major version: Let's talk about it when it reaches 1... + minor version: New functionalities added, that are worth mentioning. + bugfix release: Only bugfixes or tiny additions. + +- Q: Why is the plugin distributed in zip file? +- A: I want that Windows/Linux/Mac users all can easily extract the plugin + files. For this reason the vimball or zip format seems to be a good + choice. There is no native .tar, .tar.gz, .tar.bz2 decompressors on + Windows (however there exist free tools for the job, like 7zip). + I'm relatively new to vimball and it looks like a good candidate, but + I have some problems with it: + 1. It is uncompressed, and if I want to compress it then I will end up + having it zipped. + 2. The .vba extension is also used for Visual Basic scripts on Windows + and this frequently contains virus, so Windows users may dislike it. + And remembering the very first time I met a vba file I was thinking + that someone had created a Visual Basic installer for the script. + 3. Many Vim users don't know vimball but most of them know zip files. + +- Q: Are you a Lisp expert? +- A: No, not at all. I'm just learning Lisp. Also just learning Vim + scripting. And I'm not a Python expert either, however (at the moment) + I have more experience with Python than with Lisp. + +- Q: What about Clojure? +- A: I have even less experience with Clojure than with Lisp. + But it looks like the Slimv functions can be easily ported for Clojure, + and as there are not many (yet) Vim scripts written for Clojure, I gave + it a try. + +- Q: Why using Python for the client/server code? Why not Lisp? +- A: It is needed to use one of Vim's embedded languages for maintaining a + permanent socket connection from within Vim. There aren't too many choices, + and Lisp is not (yet?) embedded into Vim. + +=============================================================================== +CHANGE LOG *slimv-changelog* + +0.9.13 - Update REPL buffer in the background, no need to bring it into focus. + - The evaluation result is also displayed in the status line. + - REPL buffer number is remembered upon creation, no need to find it by name. + +0.9.12 - Added support for the R language via swank-R (by Philipp Marek). + - Test form for SlimvEvalTestExp() may wrap the selected s-expression. + - Added Shift+Tab mapping for cycling backwards in the completion + popup menu. + - User defined REPL buffer name may contain some special characters. + - Pass port number to the swank server in SWANK_PORT environent variable + on Linux (by Glen Gibb and Federico Churca-Torrusio). + - Autodetect wx86cl64.exe (Clozure CL) on 64 bit Windows. + - Added applescript support for starting swank through iTerm + (by Seth Price). + - Add Racket support for delimiter '[]' and '{}' (by Jimmy Lu). + - Bugfix: if the user started a normal mode command prefixed with a count, + then the count was cleared by the REPL refresh timer. + - Bugfix: CursorHold trigger ignore mappings to prevent collisions with + other plugins. + - Bugfix: preselect function name before starting swank server in the + Disassemble command. + - Bugfix: do not append '>' at the prompt if it already ends with it. + - Bugfix: package name not found when 'noignorecase' was set. + - Bugfix: Paredit ,< and ,> when 'whichwrap' contains 'h' and 'l'. + - Bugfix: keep multi-line SLDB abort messages commented all throughout + (by Federico Churca-Torrusio). + - Bugfix: prevent call to frame-call on AllegroCL (by Robert Kerr). + - Bugfix: tag lookup (Ctrl+]) added garbage to symbol name. + - Bugfix: parsing arrays (and other prefixed forms) returned from the + swank server. + - Bugfix: prevent accidental multiple registration of slimv autocommands. + - Bugfix: disable autocommands for the REPL update, make sure 'updatetime' + is not too low. + +0.9.11 - Entering some text in REPL command history, then pressing <Up>/<Down> + searches for matching lines only. + - Changed lisp syntax for #\( and #\) to "string". + - Handle three or more windows layout: assign an id to each slimv + window, reuse slimv windows. + - Support for built-in or third party clojure syntax file. + - Indent with tabs when 'noexpandtab' set after file is loaded. + - Added options g:paredit_disable_clojure, g:paredit_disable_lisp, + g:paredit_disable_scheme. + - Added repeat.vim support to many Paredit modification actions + (by Logan Campbell). + - Returning cursor to start position after Paredit " wrap + (by Logan Campbell). + - Paredit: do not insert newline if item is selected in completion + popup menu by pressing <CR>. + - Paredit: delete into the "*" register when option clipboard=unnamed. + - Paredit: handle #"" regexp syntax definition also when searching + for paren matches. + - Defined <Leader>- mapping (Clear-REPL) for all source buffers. + - Escape double quotes in text input into (read) in the REPL buffer. + - Bugfix: indentation after multi-line string. + - Bugfix: Paredit Wrap accomodates strings (thanks to Colin Jones). + - Bugfix: fixed error messages when compiling or describing before + connected to swank server. + - Bugfix: fixed some indentation issues with multi-line arguments + involved. + - Bugfix: fixing buffer confusion when filename contains 'repl'. + - Bugfix: don't move cursor for Paredit v) when selection mode is + inclusive (by John Szakmeister). + - Bugfix: syntax highlighting in clojure REPL for forms containing + ">" in the function name. + +0.9.10 - Replaced 'readonly' flag with 'nomodifiable' for SLDB, Inspect, + Threads buffers. + - Restore window and buffer if SLDB is activated during completion. + - Allow using Slimv and VimClojure (or other clojure filetype plugin) + together. + - Added Restart-Frame command (thanks to Philipp Marek). + - Added defn- to clojure keywords (thanks to David Soria Parra). + - Paredit initialization on filetype instead of filename extension. + - Do not permanently set 'iskeyword' in paredit.vim. + - Paredit: added '^' macro prefix. + - Paredit: treat #_(...) type of clojure comments as regular forms. + - Paredit: handle VimClojure's #"" regexp syntax definition. + - It is now possible to remove plugin/paredit.vim. + - Bugfix: fixed missing variable error message. + - Bugfix: REPL prompt position corruption problems. + - Bugfix: cursor positioning problems when displaying arglist. + - Bugfix: paredit 'cc', 'Vc' did not delete line. + - Bugfix: paredit 'd', 'c', 'vc', 'cW' cursor positioning problems. + - Bugfix: paredit 'C' extra whitespace and trailing ". + - Bugfix: reset indent after paredit 'cc'. + - Bugfix: paredit 'dd', ',>' EOL problem. + - Bugfix: paredit indentation when 'indentexpr' takes no argument + (thanks to Tim Pope). + - Bugfix: keep cursor inside "" when deleting over trailing " via + paredit 'cW', 'C', etc. + - Bugfix: use &ft instead of SlimvGetFiletype() in paredit.vim. + +0.9.9 - Added Paredit functions to Slimv menu (thanks to Conrad Schuler). + - Inspector: use the same package when pressing [--more--]. + - Inspector: speeding up multi-part object processing. + - Inspector: save/restore cursor position for previously visited pages. + - <Leader>rc was doubly mapped, use <Leader>- for REPL Clear. + - Autodetect ritz-swank. + - Added Break-on-Exception function for ritz-swank. + - Added minibuffer operations, this enables [set value] in Inspector. + - Added smartjumping for Clojure (thanks to dgrnbrg on bitbucket.org). + - Disable indenting on "set noautoindent". + - Pass python output to Vim script in variable instead of redirecting + stdout (hopefully solves 64-bit MacVim problems). + - Handle [] and {} delimiters in Scheme like in Clojure. + - Paredit: ignore (, [, or { when preceded by \. + - Bugfix: arglist on <Space> after pressing 'I' in visual block mode. + - Bugfix: indentation after multi-line subform. + - Bugfix: problems with finding function name for arglist. + - Bugfix: corruption when pasting large text into console Vim. + - Bugfix: cursor positioning in REPL buffer when virtualedit=all. + - Bugfix: multi-line entry name parsing in Inspector. + +0.9.8 - Added autodetection for 'ccl'. + - Delete empty lines when re-gathering Electric Returns. + - Inspector: put multiple items in one line (like in Slime). + - Inspector: highlight selectable parts and actions, hide item id-s. + - Inspector: display "path" of inspected object. + - Don't extend s-expression with prefix when macroexpanding. + - Don't evaluate or compile the REPL buffer. + - Added device to the path when loading pretty printer patches for SBCL + (thanks to Andrew Lyon). + - Added option g:slimv_repl_simple_eval and Electric Return for REPL buffer. + - Print arglist when pressing Space after closing parens or double quotes, + also when pressing Enter. + - Added "Clear REPL" entry to the REPL menu (mapped to <Leader>-). + - Paredit: special handling of cw, cb, ciw, caw supporting repeat ('.'). + - Do not describe empty symbol. + - Prefer selecting symbol to the left when cursor is on whitespace. + - Added "." character to iskeyword for Lisp. + - Removed "." when selecting symbol for completion for Clojure. + - Increased fuzzy completion limit. + - Bugfix: find package/namespace when current form is in a fold. + - Bugfix: PareditToggle ckecks if buffer was registered for Paredit. + - Bugfix: Electric Return re-gathering at end of line with no virtualedit. + - Bugfix: extra character at the end of selection using 'v(' + - Bugfix: garbage upon pressing ')' or Enter in completion popup. + - Bugfix: Paredit 'x' at end of line when 'whichwrap' includes h,l. + - Bugfix: arglist sometimes not displayed. + - Bugfix: Paredit Wrap when line ends in a multibyte character + (thanks to Sung Pae). + +0.9.7 - Keep cursor position on expanding [--more--] in the Inspector. + - Added [--all---] to Inspector for fetching all parts. + - Don't explicitly check for pythonXX.dll, rely on has('python'). + - Require 'swank-repl' for slime version above 2011-12-04 in case + contribs are disabled. + - Identify VimClojure REPL prompt position for paredit (thanks to + David Greenberg). + - Paredit: added <leader><Up> for Splice-killing-backward, + <leader><Down> for Splice-killing-forward, <leader>I for Raise. + - Paredit: added 'Electric Return' feature and new option + g:paredit_electric_return. + - Increased the distance to search for the defun start to 200 lines. + - Bugfix: positioning the cursor at the end of REPL prompt in insert mode. + - Bugfix: handle restart/frame number above 999 (thanks to Philipp Marek). + - Bugfix: form selection when cursor is next to the opening paren. + - Bugfix: indentation of multi-line strings. + - Bugfix: indentation of lines with multi-byte characters. + - Bugfix: cursor movement while indenting. + +0.9.6 - Perform indenting when <Tab> pressed on whitespace. + - Added support for newer swank message length counting in bytes. + - Updated Lisp swank server to version 2012-03-06. + - Updated Clojure API reference to version 1.3. + - Identify .cljs files as Clojure type. + - Enable g:slimv_repl_syntax by default. + - Restart parenthesis highlighting at each REPL prompt. + - Scheme: eval buffer and region in a (begin ...) block. + - Added option g:scheme_builtin_swank for enabling MIT scheme's built-in + swank server. + - Added syntax highlight for Scheme quoted symbol. + - Keep SLDB buffer if swank stays in debugger upon selecting a restart. + - When reconnecting the swank server wait for disconnection first. + - Fixed REPL buffer slowdown caused by re-assigning autocommands. + - Fixed detection of string and comment when no syntax loaded. + - Fixed Scheme syntax highlight problems in the REPL buffer. + - Call :frame-source-location and :frame-call only if swank supports them. + +0.9.5 - Use correct SLDB level when invoking restart. + - Autodetect tmux session on Linux (thanks to Brett Kosinski). + - Enable syntax only once to avoid reload of syntax plugins. + - Added option g:slimv_browser_cmd_suffix. + - Skip syntax and indent file for disabled filetypes. + - Check the presence of X on Linux. + - Indentation fixes: keywords, gap after '(', defsystem, defmacro, + symbol-macrolet. + - Use winsaveview()/winrestview() for remembering current view when + moving around (e.g. searching for package). + - Find package for arglist and completion. + - Ignore mapleader when it's <Space>. + - Print SLDB error description also into the REPL buffer. + - Evaluate keyword if using Eval-Defun outside of s-expression. + - Disable unsupported swank features for Scheme. + - Bugfix: Paredit 'cw' at the end of line. + - Bugfix: omit REPL prompt from Eval-Defun and Eval-Expression. + - Bugfix: printing of '\n' and other escaped characters. + - Bugfix: Paredit delete and put corrupted the "0 register. + +0.9.4 - Added highlighting of [] and {} for Clojure. + - Added options to disable Slimv for specific filetypes: + g:slimv_disable_clojure, g:slimv_disable_lisp, g:slimv_disable_scheme. + - Added option g:slimv_indent_keylists (thanks to Andrew Smirnoff). + - Added "set hidden" for safe switching of modified buffers. + - Added Help to Inspect and Threads buffers. + - Evaluate register contents if Eval-Region prefixed by ["x]. + - Store form in register if Eval-Defun or Eval-Exp prefixed by ["x]. + - Increased timeout for :create-repl. + - Stay in REPL buffer if Macroexpand performed in REPL. + - Search for either (in-ns) or (ns) for Clojure, remove quote character + from namespace name. + - Added SlimvEvalTestDefun() and SlimvEvalTestExp() for immediate testing + of the form(s) being evaluated. + - Bugfix: various indentation issues (function name is a subform, + let, let*, do, defpackage, defsystem, and [] for Clojure). + - Bugfix: Eval-Range problem in visual mode. + - Bugfix: SLDB parsing problem with newlines in description of restarts. + - Bugfix: REPL autoscroll incidentally stopping (thanks to Andrew Lyon). + - Bugfix: added some index out of range checks (thanks to Philipp Marek). + +0.9.3 - Start Swank server in virtual terminal when running in GNU screen + on Linux (thanks to Oleg Terenchuk). + - Reuse a window for slimv also when there are three or more windows open. + - Don't go to end of REPL buffer if user moved the cursor away from EOF. + - Use xdg-open for default browser in Linux. + - Removed option g:slimv_python. + - Added option g:slimv_repl_max_len for limiting the number of lines in + the REPL buffer. + - Added option g:slimv_preferred to choose preferred lisp implementation. + - Query additional parts of big inspected object upon pressing Enter on + [--more--]. + - Thread List is displayed and handled in a separate Threads buffer. + - Bugfix: window navigation problems between source/REPL/SLDB/etc. + - Bugfix: error messages when Swank server window is closed. + - Bugfix: return control to vim after starting browser defined by + g:slimv_browser_cmd. + - Bugfix: fixed indentation of arguments before &body argument. + - Bugfix: autocomplete for dotted package/namespace names. + - Bugfix: indentation of aif. + +0.9.2 - Added option g:swank_log to enable swank debug log. + - Added options g:slimv_repl_name, g:slimv_sldb_name, g:slimv_inspect_name. + - Added option g:slimv_indent_maxlines. + - Changed Debug-Thread mapping to <leader>dT (g:slimv_keybindings=2) + due to conflict with Generate-Tags. + - Label thread ID in thread list (by Philipp Marek). + - Set balloonexpr for all buffers (thanks to Philipp Marek). + - Connect swank server when needed instead of printing an error message + (by Philipp Marek). + - Set expandtab for lisp and clojure files. + - Kill-Thread kills all threads in the selected range (by Philipp Marek). + - Bugfix: added missing parts of Set-Breakpoint introduced in 0.9.1. + - Bugfix: test source lookup (upon pressing Enter) before testing + fold toggle in SLDB (by Philipp Marek). + - Bugfix: indentation of flet, labels, macrolet. + - Bugfix: Kill-Thread now really kills thread (by Philipp Marek). + - Bugfix: inspect gensyms in frame (by Philipp Marek). + +0.9.1 - Improved frame number identification in SLDB buffer. + - Moved frame source location above frame locals in SLDB. + - Fold frame source location if more than 2 lines. + - Inspect-In-Frame: preselect symbol under cursor only in variable lines. + - Inspect-In-Frame: open Inspector in the other window. + - Improved XRef file location parsing. + - Use current paragraph when no range set for Eval-Region and + Compile-Region. + - Added option g:slimv_sldb_wrap, do not set wrap for source buffers. + - Added Set-Breakpoint command mapped to <leader>B (thanks to + Philipp Marek), changed Profile-By-Substring mapping to <leader>P. + - Set Lisp keyword characters also in SLDB buffer. + - Bugfix: error messages at Connect-Server. + - Bugfix: error message for frame source location without filename. + - Bugfix: XRef output sometimes cut. + +0.9.0 - Separate buffers for SLDB and Inspector. + - Toggle frame information in SLDB buffer by pressing Enter. + - Look up source when pressing Enter on filename with location in SLDB. + - Added option g:swank_block_size to override Swank output buffer size + (thanks to stassats on #lisp and Philipp Marek). + - Removed old non-swank functionality. + - Removed option g:slimv_repl_open. + - Paredit: new mappings [[ and ]] for previous and next defun. + - Bugfix: various refresh problems (thanks to Philipp Marek). + - Bugfix: disable debug mode when reconnecting Swank (by Philipp Marek). + - Bugfix: display multi-line debug condition and frame source location, + quote characters in compile (by Philipp Marek). + - Bugfix: use proper SLDB level when invoking restart (by Philipp Marek). + - Bugfix: restore all lisp keyword characters in iskeyword. + - Bugfix: indentation of defgeneric. + - Bugfix: use proper filename and location when compiling defun or region. + - Bugfix: buffer corruption when re-triggering timer in insert mode. + - Bugfix: <End> moved cursor to the right edge of screen in REPL buffer + when virtualmode=all. + +0.8.6 - Handle cl:in-package, common-lisp:in-package (thanks to Philipp Marek). + - Added option g:swank_host to allow connecting to remote Swank server. + - Autodetection of Cake for Clojure (thanks to Chris Cahoon). + - Set Paredit mode also for .cl and .rkt files. + - Recognise domain reversed package names in form com.gigamonkeys.pathnames + (thanks to has2k1). + - Added curly braces rainbow parenthesis for Clojure. + - Added paredit handling of curly braces for Clojure. + - Use SlimvIndent also for Clojure. + - Handle line number returned in :compilation-result. + - Bugfix: removed double newline in :read-string (text input). + - Bugfix: when editing with cw in paredit mode, keep ending whitespaces + (thanks to Mats Rauhala). + - Bugfix: compilation error when Swank does not return file name. + - Bugfix: skip dot character when Swank returns a dotted pair (a . b). + +0.8.5 - Switch on indent plugins. + - Do not complete empty string on <Tab>. + - Added Clojure keywords to syntax plugin. + - Use -i option to load swank-clojure. + - Implementation specific REPL initialization, for Clojure it imports + source, apropos, javadoc, etc. (thanks to Ömer Sinan Agacan). + - Print Lisp version at REPL startup. + - Added List-Threads, Kill-Thread, Debug-Thread (thanks to Philipp Marek). + - Write prompt after Toggle-Trace. + - Display list of untraced functions for Untrace-All. + - When in SLDB, Interactive-Eval evaluates expressions in the frame, + Inspect inspects objects in the frame. + - Changed g:slimv_echolines logic: set 0 for no lines, -1 for all lines. + - Bugfix: removed extra linebreak between chunks of long output. + - Bugfix: indentation problems for symbols with package specification + (thanks to Philipp Marek). + - Bugfix: indentation of Clojure's defn. + - Bugfix: plist indentation (thanks to Philipp Marek). + - Bugfix: occasional few seconds delay in swank response. + - Bugfix: running Swank server on Mac OS X (on behalf of Tobias Pflug). + +0.8.4 - Added handling for Unicode characters. + - Truncate arglist output to fit in the status line. + - Added debugger keybindings: ,a for abort ,q for quit ,n for continue. + - Changed keybinding for apropos to ,A + - Added compiler error messages to quickfix list. + - Map insert mode <Space> and <Tab> only for lisp (and dialects) buffers. + - Bugfix: wait for the response to :create-repl before calling + :swank-require (thanks to Philipp Marek). + - Bugfix: indentation problems with unbalanced parens in comment. + - Bugfix: arglist ate the <Space> when virtualedit was off. + +0.8.3 - Added top/bottom/left/right directions to g:slimv_repl_split. + - Added :Lisp (and an equivalent :Eval) command with completion. + - Added g:slimv_leader and g:paredit_leader options. + - Added g:slimv_echolines to echo only the first few lines of the + form being evaluated. + - Added fuzzy completion and option g:slimv_simple_compl (by Philipp Marek). + - Indent macros with &body argument by two spaces when connected to swank + (thanks to Philipp Marek and Andreas Fredriksson). + - Special indentation for flet, labels, macrolet. + - Default for Set-Package is current package (thanks to Philipp Marek). + - Bugfix: REPL output ordering problems. + - Bugfix: problem with inserting Space into visual block. + - Bugfix: blinking when g:slimv_repl_syntax is on. + - Bugfix: entering incomplete form in REPL command line. + - Bugfix: close form when inside comment, string, or with mixed ([. + +0.8.2 - Added Paredit and g:lisp_rainbow support for Scheme files. + - Added SWANK support for MIT Scheme on Linux. + - Added frame call information to SLDB (thanks to Philipp Marek). + - Check for unbalanced form before evaluation. + - Reconnect SWANK server in Connect-Server if already connected + (thanks to Philipp Marek). + - Select current form instead of top level form in Macroexpand. + - Bugfix: Paredit handling of escaped matched characters, like \" or \(. + - Bugfix: cursor positioning problems when debugger activated. + - Bugfix: print prompt after Describe. + +0.8.1 - Added action handling to Inspector, fixed Inspector output. + - Bugfix: read-string mode was stuck. + - Bugfix: buffer corruption with two source windows + (thanks to Philipp Marek). + - Bugfix: eliminate multiple CursorHold autocommands + (thanks to Philipp Marek). + - Bugfix: completion with special characters in symbol name + (thanks to Philipp Marek). + - Bugfix: sometimes cursor went to the start of line in insert mode. + - Bugfix: syntax error in Untrace All (thanks to Philipp Marek). + - Bugfix: removed ' prefix from symbol selection (except for Inspect). + - Bugfix: keep cursor position in Describe and Compile-Region. + +0.8.0 - Major update: added SWANK client (many thanks to Philipp Marek). + - Split documentation into three parts. + - Added keymapping hints to GUI menu items. + - Renamed Eval-Last-Expression to Eval-Current-Expression. + - REPL buffer is not syntax highlighted anymore. + - Switch on filetype plugins. + - Autodetection for Allegro CL, Lisp Cabinet and Leiningen. + - Ask for save before compiling file. + - Map <Tab> for symbol name completion. + - Bugfix: finding start of keyword in completion. + - Bugfix: deleting escaped " inside string. + - Bugfix: Up/Down/Enter handling in popup menu. + +0.7.7 - Paredit: find next closing paren when using ,< or ,> and not standing + on a paren. + - Open REPL buffer upon connecting server. + - Bugfix: REPL buffer prompt identification was sometimes missing. + - Bugfix: switch off REPL refresh mode when REPL buffer is not visible + (thanks to Philipp Marek). + - Bugfix: convert Python path on Windows to short 8.3 filename format + if it contains space (thanks to Razvan Rotaru). + +0.7.6 - Cursor potision is kept during evaluation. + - Most Slimv commands made silent. + - Bugfix: find defun start when cursor is on a comment. + - Bugfix: keep newlines in Compile-Region. + - Bugfix: infinite loop when selecting form in empty buffer. + - Bugfix: error when opening REPL buffer with g:slimv_repl_split=0. + - Bugfix: REPL blinking in insert mode when visualbell is on. + - Bugfix: added the comma to the list of macro prefix characters + (thanks to John Obbele). + - Bugfix: 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. + - Bugfix: automatic reconnection when server closed and reopened. + - Bugfix: delete and yank also via named registers in paredit.vim. + - Bugfix: 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> and <Down>). + - Bugfix: infinite loop during eval when 'in-package' or 'in-ns' + was in comment. + - Bugfix: Lisp prompt identification problems in REPL buffer. + - Bugfix: input line duplication in SBCL on Linux + (assigned "*debug-io*" to stdin). + - Bugfix: Eval Defun missed last ")" if form contained "'('". + +0.7.3 - Added compatibility with Python 3.x. + - Bugfix: input lines for REPL were doubled on Linux (thanks to + Andrew Hills), however not yet fixed for SBCL. + - Bugfix: enclose Slimv path in double quotes if it contains space. + - Bugfix: 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. + - Bugfix: PareditWrap error when g:paredit_shortmaps=1 (thanks to + Jon Thacker). + - Bugfix: buffer selection problems in case of three of more buffers + (thanks to Philipp Marek). + - Bugfix: conflicting keybindings for SlimvGenerateTags. + - Bugfix: 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. + - Bugfix: 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 g:slimv_repl_return 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. + - Bugfix: inserting double quotes in paredit mode (like "\""). + - Bugfix: dd in paredit mode when unbalanced form is inside comment. + - Bugfix: reopen REPL buffer after closing it via :q. + - Bugfix: comment and string detection error with noignorecase setting + (thanks to Brian Kropf). + - Bugfix: wrong positioning when moving parenthesis to the right. + - Bugfix: defmacro detection problem (thanks to Philipp Marek). + - Bugfix: 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). + - Bugfix: paredit wrap function missed last character when 'selection' + was not "exclusive" (thanks to Marcin Fatyga). + - Bugfix: input was stuck inside SBCL debugger + (on behalf of Philipp Marek and Dmitry Petukhov). + - Bugfix: occasional error messages during REPL buffer update. + - Bugfix: REPL menu was sometimes missing. + - Bugfix: occasional command line color problems. + +0.6.1 - Added Split, Join, Wrap, Splice functions to Paredit Mode. + - Added g:paredit_shortmaps to select short/long paredit keymaps. + - Bugfix: delete commands put erased characters into yank buffer. + - Bugfix: D deletes only characters after the cursor position. + +0.6.0 - Added paredit mode. + - Set wrap mode for REPL buffer with keybindings. + +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. + - Added autodetection for Clozure CL. + - Applied lisp_rainbow to Clojure's []. + - Renamed Clojure indent plugin to clojure.vim + so that Vim finds and loads it. + - Switched on lisp mode explicitly for Clojure filetype. + +0.5.3 - Added Interrupt-Lisp-Process command. + - Added mapping for the REPL menu. + - Added special forms to Clojre API lookup. + - Bugfix: put cursor after the last character in insert mode when + continuously refreshing REPL buffer. + - Fixed some Ctrl-C handling problems. + +0.5.2 - Updated Clojure API. + - Adapted Clojure autodetection to version 1.0 (clojure-1.0.0.jar). + - Complete-Symbol command moved to separate Edit submenu. + - Added Close-Form command to the Edit submenu. + +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 - thanks to Lorenzo Campedelli. + +0.4.1 - Added profiler support for SBCL. + - Added commands/menu items: Profiling: Show Profiled, + REPL: Send Input, Close and Send Input, Previous Input, Next Input + - Display Slimv error messages with ErrorMsg highlight. + +0.4.0 - Added SLIME's profiling tool with support from Slimv. + - Added command to generate tags file. + - Fixed evaluation problems of large buffers on some systems. + - Fixed Compile And Load filename problems with '\' on Windows. + - Recycle old REPL temporary file at next server startup. + +0.3.0 - Added syntax highlighting and automatic indentation for the REPL + buffer (needs lisp and/or clojure Vim plugins). + - It is possible to enter a multi-line command in the REPL buffer, + until the opening and closing parens match. + - Insert mode Up and Down keys move cursor when outside of the REPL + command line. + - Ctrl-C is working inside the REPL buffer (while waiting for output), + so Ctrl-X and Ctrl-X Ctrl-X keybindings are removed. + - 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. + - Corrected some macroexpand problems. + - Fixed a REPL buffer refresh bug. + +0.2.0 - Major update: Lisp REPL displayed in 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. Does not work however with some Lisp + implementations (like SBCL). + +0.1.3 - Handle DOS and Unix style newlines produced by various + Lisp implementations on Windows. + - Do not write debug logfile when debug level is zero. + - Removed unused client command line argument: -c + +0.1.2 - Windows users do not need pywin32 anymore. + - Display buffer is more thread safe. + +0.1.1 - Corrected memory fillup problem after a long REPL session. + +0.1 - Initial release. + +=============================================================================== +ISSUES, LIMITATIONS, KNOWN BUGS *slimv-issues* + +- Vim register "s is used for all form selections, so its original content is + destroyed. +- Needs Vim version 7.0 or above, because of the intensive use of lists. +- Needs the same Python version that Vim is compiled against +- It is not possible to run separate Lisp and Clojure REPL in the same + Slimv session. +- Recent macvim (OS X) 64-bit versions seem to have a Python 2.7 binding problem + causing segmentation faults when Slimv tries to connect to the Swank server. + One possible solution is to use the 32-bit version of macvim. + Another solution is to rebuild macvim with Python binding changed to 2.6. + + +=============================================================================== +TODO *slimv-todo* + +- Add missing SLIME functions to the SWANK client. +- Allow connecting remote SWANK server (outside of localhost) via SSH. +- Allow multiple REPL buffers in the same Vim session. +- Allow multiple inferior lisps (e.g. one REPL to CLISP, another one to SBCL). + +=============================================================================== +CREDITS *slimv-credits* + +Author: Tamas Kovacs <kovisoft at gmail dot com> + +Please send comments, bug reports, suggestions, etc. to the e-mail address +above. + +Slimv is free software, you can redistribute it and/or modify it any way you +like, except the embedded SLIME and Swank Clojure. + +SLIME is distributed under the terms of the GNU General Public License as +published by the Free Software Foundation. See the included slime/README file +or http://common-lisp.net/project/slime/ for details. + +Swank Clojure is licensed under the Eclipse Public License. See the file +swank-clojure/COPYING or https://github.com/technomancy/swank-clojure for +details. + +Credit must go out to Bram Moolenaar and all the Vim developers for making +the world's (one of the) best editor. + +Thanks to Eric Marsden, Luke Gorrie, Helmut Eller, Luke Gorrie, Helmut Eller, +Tobias C. Rittweiler and all the Emacs/SLIME developers for making SLIME. +Also special thanks to Erik Naggum, Yuji Minejima and others for making the +Common Lisp Hyperspec lookup packages for SLIME, and thanks to +Taylor R. Campbell for the Emacs paredit.el script. + +Thanks to Jeffrey Chu, Phil Hagelberg, Hugo Duncan for making Swank Clojure, +and to Helmut Eller for making Scheme Swank server. + +Thanks to the Vim community for testing, commenting and patching the script, +especially to Philipp Marek for his great number of contributions, patches, +ideas, suggestions on the SWANK integration. + +Also thanks to Vlad Hanciuta, Marcin Fatyga, Dmitry Petukhov, +Daniel Solano Gómez, Brian Kropf, Len Weincier, Andreas Salwasser, +Jon Thacker, Andrew Hills, Jerome Baum, John Obbele, Andreas Fredriksson, +Ömer Sinan Agacan, Tobias Pflug, Chris Cahoon, Mats Rauhala, Oleg Terenchuk, +Andrew Lyon, Andrew Smirnoff, Brett Kosinski, David Greenberg, Sung Pae, +Conrad Schuler, Tim Pope, David Soria Parra, Colin Jones, Logan Campbell, +John Szakmeister, Glen Gibb, Federico Churca-Torrusio, Robert Kerr, Jimmy Lu, +Seth Price for additional notes and contributions. + +I would also like to say a big thank you to everyone donating to support +development. This is a one-element list at the moment: :) +thanks to Paul Michael Bauer. + +Last but not least many thanks to my wife Andrea (for the Italians out there: +hey, this is a female name in Hungary :) for her support and patience. + +=============================================================================== +vim:tw=80:et:wrap:ft=help:norl: |