2317 lines
110 KiB
Text
2317 lines
110 KiB
Text
*slimv.txt* Slimv Last Change: 22 Aug 2021
|
||
|
||
Slimv *slimv*
|
||
Version 0.9.14
|
||
|
||
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 shell command is used to
|
||
open the Common Lisp Hyperspec.
|
||
|
||
|g:slimv_browser_cmd_ex| If nonempty, this Ex 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_fasl_directory| Specify the directory for compiled FASL files to
|
||
be written to.
|
||
|
||
|g:slimv_impl| The Lisp implementation. Defaults to 'clisp'.
|
||
|
||
|g:slimv_indent_disable| Disable slimv indenting, fallback to vim's
|
||
default lispindent() method.
|
||
|
||
|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_split_size| Size of the newly created split window in case
|
||
|g:slimv_repl_split| is set.
|
||
|
||
|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_strip_ansi| Strip ANSI escape sequences from the REPL output.
|
||
|
||
|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_fasl_directory*
|
||
|
||
Specify a directory path that will be passed to the function
|
||
swank:compile-file-for-emacs controlling where the compiled FASL file is
|
||
written to and loaded from when using the Compile File or the Compile and Load
|
||
File commands.
|
||
Example:
|
||
let g:slimv_fasl_directory = '/tmp/'
|
||
If this is set then .fasl files will be placed in /tmp/ instead of the default
|
||
location next to the Lisp source file.
|
||
|
||
*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 shell 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_ex*
|
||
Specifies the Ex command to start the browser in order to display the Common
|
||
Lisp Hyperspec or the Clojure API. If |g:slimv_browser_cmd| is empty then this
|
||
Ex command is used.
|
||
|
||
*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_repl_split_size*
|
||
Size of the newly created split window in case |g:slimv_repl_split| is set.
|
||
The default value is an empty string ('') meaning split size is automatically
|
||
determined by vim. Define this either to 20 or '20' in order to set the split
|
||
window size to 20 lines or columns (depending on the split direction).
|
||
|
||
*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_strip_ansi*
|
||
Strip ANSI escape sequences from the REPL output. Vim does not handle ANSI
|
||
escape sequences, therefore without this setting an ANSI colored output
|
||
string looks like this:
|
||
[31mabc[0m
|
||
Here follows the same output with this setting enabled:
|
||
abc
|
||
|
||
*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_disable*
|
||
Disable slimv indenting and use vim's built-in ispindent() method.
|
||
Please note that this option does not completely disable the indenting,
|
||
only changes the way s-expressions are indented.
|
||
|
||
*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
|
||
6. 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-stepper| SLDB: Step through the code
|
||
|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.
|
||
|
||
|
||
-------------------------------------------------------------------------------
|
||
STEPPER *step-into* *step-next* *step-out* *step-continue*
|
||
|
||
You can enter the stepper by either wrapping step around your code (e.g.
|
||
(step (your-function arg)) or by putting (break) in your code. If you put
|
||
a (break) in your code, once you get into the debugger, enter step-into to
|
||
enter the stepper. The functions are:
|
||
|
||
step-into: steps into the function
|
||
step-next: steps over the function
|
||
step-out: steps out of the function
|
||
|
||
This has only been tested with sbcl
|
||
|
||
|
||
-------------------------------------------------------------------------------
|
||
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:sldb-next
|
||
swank:slbb-out
|
||
swank:sldb-step
|
||
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.
|
||
|
||
|
||
*slimv-indentation*
|
||
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.
|
||
|
||
|
||
*slimv-parentheses*
|
||
*slimv-newline*
|
||
3. Parenthesis and newline handling
|
||
|
||
First of all there is paredit mode that is provided by the paredit.vim script
|
||
(also part of Slimv).
|
||
For a detailed introduction on paredit mode please consult the |paredit| help.
|
||
Paredit mode also changes the way newlines are handled, this feature is called
|
||
"electric return", see more on this topic in |g:paredit_electric_return|.
|
||
|
||
If you don't like paredit mode, 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.
|
||
|
||
|
||
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.
|
||
- In Vim 7.4 normal mode cursor movements and winrestview() cannot be
|
||
used in an 'indentexpr'.
|
||
- Concealing should not hide whitespaces in the Inspector buffer.
|
||
- Do not load contribs by default when starting the swank server.
|
||
- Place cursor at prompt position in the REPL buffer upon tab switch.
|
||
- Bugfix: Scheme builtin swank not launching.
|
||
- Fix for pressing Enter on a filename in SLDB when the filename is
|
||
not enclosed in double quotes.
|
||
- Save and restore marks ` and ' in the source buffer while updating REPL.
|
||
- Removed "b:" prefix from function names because latest vim version does not.
|
||
- Raising s-expressions now support [] and {}.
|
||
- Reindent current form after ,< and ,>.
|
||
- Paredit: always leave cursor to opening char's pos after wrapping selection.
|
||
- Paredit: fix possible cursor move problem caused by &indentexpr
|
||
when using the c operator.
|
||
- Added Clozure CL specific code to read environment variable SWANK_PORT.
|
||
- Changed nnoremap to noremap in normal mode movement mappings (, ), [[, ]].
|
||
- R language related fixes.
|
||
- Bugfix: 2 keymaps assumed g:paredit_leader is identical to ','.
|
||
- Fix for paredit 'x' and 'X' when clipboard=unnamed.
|
||
- Paredit: added support for hy.
|
||
- Paredit: use <Leader> instead of mapleader.
|
||
- Paredit: enhanced detection of forms balanced state.
|
||
- Paredit: unescaped square brackets in balance detection.
|
||
- Add support for alternate backspace keybinding.
|
||
- Bugfix: Null character should not be inserted from Python side.
|
||
- Delete contents into the black hole register when exiting the
|
||
Inspect/Threads/Sldb buffer.
|
||
- Added options g:slimv_unmap_cr, g:slimv_unmap_tab, g:slimv_unmap_space.
|
||
- Paredit bugfix: pressing <Tab> (for completion) followed by ')'.
|
||
- Fixed selection handling in EvalRegion and CompileRegion when
|
||
"set clipboard=unnamedplus".
|
||
- Paredit: Remove invalid uses of `call`.
|
||
- Do not destroy clipboard contents in EvalDefun when set clipboard=unnamed.
|
||
- Added missing quotes in the existence check for g:slimv_hs_root.
|
||
- Paredit: fixed problem with 'x' and 'X' commands when erasing
|
||
multi-byte unicode character.
|
||
- Insert mode Ctrl-W does not delete the prompt in the REPL buffer.
|
||
- Replace '\' characters with '/' in the compiled file name returned
|
||
by the swank server.
|
||
- Fix Paredit burfing (by moving parens left or right) when there are
|
||
stings as elements.
|
||
- Bugfix: arglist printing sometimes permanently disabled 'showmode'.
|
||
- Added command 'Quit REPL' mapped to <Leader>Q.
|
||
- Bugfix: wrong number of arguments when calling swank:eval-string-in-frame.
|
||
- Print REPL result string in a new line.
|
||
- Bugfix: MenuMap now correctly sets no keybindings when
|
||
g:slimv_keybindings is other than '1' or '2'.
|
||
- Bugfix: call winrestview() after SlimvCompileDefun.
|
||
- Indentation routine keeps original cursor position.
|
||
- Removed "com" extension from the scheme swank server when loading
|
||
compiled file.
|
||
- Store package in register when SlimvEvalTestDefun() is called
|
||
with an output register.
|
||
- Disable swank completion and arglist display while in :read_string mode.
|
||
- Added Find-Definitions function.
|
||
- Compatibility modifications for Python3.
|
||
- Updated logic for python version selection.
|
||
- Added paredit support for shen language.
|
||
- Use current package in Find-Definition.
|
||
- Fix unicode string length calculation for Python 3.x.
|
||
- Ignore Vim generated tags file.
|
||
- Paredit: Do not skip parens after \\ when searching for pairs.
|
||
- Use :tjump instead of :tag to jump to a definiton upon pressing Ctrl+].
|
||
- Modify Applescript for modern version iTerm.
|
||
- Fixed indentation of 'if' when the swank server does not provide it.
|
||
- Support both old and new style SWANK version strings (YYYY-MM-DD vs X.XX).
|
||
- Updated bundled swank server to slime version 2.19.
|
||
|
||
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 <20>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,
|
||
<EFBFBD>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, Philip Xu, Junegunn Choi, and github users elmart, chiku-samugari,
|
||
dusenberrymw, bclube, vi1, FreeBlues, bnoordhuis, bvnierop, mattn, D4ryus,
|
||
jakykong, Prajjwal, Neetless, jurov 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:
|