uh more cleanup of dot vim

This commit is contained in:
LinlyBoi
2023-04-30 08:18:58 +03:00
parent e5bb029f74
commit e796262fff
16 changed files with 0 additions and 4079 deletions

View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2103 Benjamin Mills
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -1,38 +0,0 @@
# vimux
Easily interact with tmux from vim.
![vimux](https://www.braintreepayments.com/assets/images/blog/vimux3.png)
What inspired me to write vimux was [tslime.vim](https://github.com/kikijump/tslime.vim), a plugin that lets you send input to tmux. While tslime.vim works well, I felt it wasn't optimized for my primary use case which was having a smaller tmux pane that I would use to run tests or play with a REPL.
My goal with vimux is to make interacting with tmux from vim effortless. By default when you call `VimuxRunCommand` vimux will create a 20% tall horizontal pane under your current tmux pane and execute a command in it without losing focus of vim. Once that pane exists whenever you call `VimuxRunCommand` again the command will be executed in that pane. As I was using vimux myself I wanted to rerun commands over and over. An example of this was running the current file through rspec. Rather than typing that over and over I wrote `VimuxRunLastCommand` that will execute the last command you called with `VimuxRunCommand`.
Other auxiliary functions and the ones I talked about above can be found bellow with a full description and example key binds for your vimrc.
## Installation
With **[vim-bundle](https://github.com/benmills/vim-bundle)**: `vim-bundle install benmills/vimux`
With **[Vundle](https://github.com/gmarik/Vundle.vim)**: 'Plugin benmills/vimux' in your .vimrc
Otherwise download the latest [tarball](https://github.com/benmills/vimux/tarball/master), extract it and move `plugin/vimux.vim` inside `~/.vim/plugin`. If you're using [pathogen](https://github.com/tpope/vim-pathogen), then move the entire folder extracted from the tarball into `~/.vim/bundle`.
_Notes:_
* Vimux assumes a tmux version >= 1.5. Some older versions might work but it is recommeded to use at least version 1.5.
## Platform-specific Plugins
* [vim-vroom](https://github.com/skalnik/vim-vroom) runner for rspec, cucumber and test/unit; vimux support via `g:vroom_use_vimux`
* [vimux-ruby-test](https://github.com/pgr0ss/vimux-ruby-test) a set of commands to easily run ruby tests
* [vimux-cucumber](https://github.com/cloud8421/vimux-cucumber) run Cucumber Features through Vimux
* [vim-turbux](https://github.com/jgdavey/vim-turbux) Turbo Ruby testing with tmux
* [vimux-pyutils](https://github.com/julienr/vimux-pyutils) A set of functions for vimux that allow to run code blocks in ipython
* [vimux-nose-test](https://github.com/pitluga/vimux-nose-test) Run nose tests in vimux
* [vimux-golang](https://github.com/benmills/vimux-golang) Run go tests in vimux
* [vimux-zeus](https://github.com/jingweno/vimux-zeus) Run zeus commands in vimux
* [vimix](https://github.com/spiegela/vimix) Run Elixir mix commands in vimux
## Usage
The full documentation is available [online](https://raw.github.com/benmills/vimux/master/doc/vimux.txt) and accessible inside vim `:help vimux`

View File

@@ -1,355 +0,0 @@
*vimux.txt* easily interact with tmux
Vimux
effortless vim and tmux interaction
==============================================================================
CONTENTS *vimux-contents*
1. About............................ |VimuxAbout|
2. Usage ........................... |VimuxUsage|
2.1 .............................. |VimuxPromptCommand|
2.2 .............................. |VimuxRunLastCommand|
2.3 .............................. |VimuxInspectRunner|
2.4 .............................. |VimuxCloseRunner|
2.5 .............................. |VimuxInterruptRunner|
2.6 .............................. |VimuxClearRunnerHistory|
2.7 .............................. |VimuxZoomRunner|
2.8 .............................. |VimuxRunCommandInDir|
3. Misc ............................ |VimuxMisc|
3.1 Example Keybinding............ |VimuxExampleKeybinding|
3.2 Tslime Replacement............ |VimuxTslimeReplacement|
4. Configuration ................... |VimuxConfiguration|
==============================================================================
ABOUT (1) *VimuxAbout*
Vimux -- Easily interact with tmux from vim.
What inspired me to write vimux was tslime.vim [1], a plugin that lets you
send input to tmux. While tslime.vim works well, I felt it wasn't optimized
for my primary use case which was having a smaller tmux pane that I would use
to run tests or play with a REPL.
My goal with vimux is to make interacting with tmux from vim effortless. By
default when you call `VimuxRunCommand` vimux will create a 20% tall
horizontal pane under your current tmux pane and execute a command in it
without losing focus of vim. Once that pane exists whenever you call
`VimuxRunCommand` again the command will be executed in that pane. As I was
using vimux myself I wanted to rerun commands over and over. An example of
this was running the current file through rspec. Rather than typing that over
and over I wrote `VimuxRunLastCommand` that will execute the last command
you called with `VimuxRunCommand`.
Other auxiliary functions and the ones I talked about above can be found
bellow with a full description and example key binds for your vimrc.
[1] https://github.com/kikijump/tslime.vim
==============================================================================
USAGE (2) *VimuxUsage*
The function VimuxRunCommand(command) is the core of Vimux. It will
create a split pane in the current window and run the passed command in it.
>
:call VimuxRunCommand("ls")
<
This will run the command in a split pane without losing focus of vim. If the
command takes a long time to return you can continue to use vim while the
process finishes and will see the output in the pane when it's finished.
Furthermore there are several handy commands all starting with 'Vimux':
- |VimuxRunCommand|
- |VimuxSendText|
- |VimuxSendKeys|
- |VimuxOpenPane|
- |VimuxRunLastCommand|
- |VimuxCloseRunner|
- |VimuxInspectRunner|
- |VimuxInterruptRunner|
- |VimuxPromptCommand|
- |VimuxClearRunnerHistory|
- |VimuxZoomRunner|
- |VimuxRunCommandInDir|
------------------------------------------------------------------------------
*VimuxRunCommand*
VimuxRunCommand~
Run a system command in a small horizontal split bellow
the current pane vim is in. You can optionally pass a second argument to stop
vimux from automatically sending a return after the command.
>
" Run the current file with rspec
map <Leader>rb :call VimuxRunCommand("clear; rspec " . bufname("%"))<CR>
" Run command without sending a return
map <Leader>rq :call VimuxRunCommand("clear; rspec " . bufname("%"), 0)<CR>
<
------------------------------------------------------------------------------
*VimuxSendText*
VimuxSendText~
Send raw text to the runer pane. This command will not open a new pane if one
does not already exist. You will need to use VimuxOpenPane to do this. This
command can be used to interact with REPLs or other interactive terminal
programs that are not shells.
------------------------------------------------------------------------------
*VimuxSendKeys*
VimuxSendKeys~
Send keys to the runner pane. This command will not open a new pane if one
does not already exist. You will need to use VimuxOpenPane to do this. You can
use this command to send keys such as "Enter" or "C-c" to the runner pane.
------------------------------------------------------------------------------
*VimuxOpenPane*
VimuxOpenPane~
This will either open a new pane or use the nearest pane and set it as the
vimux runner pane for the other vimux commands. You can control if this command
uses the nearest pane or always creates a new one with g:VimuxUseNearest
------------------------------------------------------------------------------
*VimuxPromptCommand*
VimuxPromptCommand~
Prompt for a command and run it in a small horizontal split bellow the current
pane. A parameter can be supplied to predefine a command or a part of the
command which can be edited in the prompt.
>
" Prompt for a command to run map
map <Leader>vp :VimuxPromptCommand<CR>
map <Leader>vm :VimuxPromptCommand("make ")<CR>
<
------------------------------------------------------------------------------
*VimuxRunLastCommand*
VimuxRunLastCommand~
Run the last command executed by `VimuxRunCommand`
>
" Run last command executed by VimuxRunCommand
map <Leader>vl :VimuxRunLastCommand<CR>
<
------------------------------------------------------------------------------
*VimuxInspectRunner*
VimuxInspectRunner~
Move into the tmux runner pane created by `VimuxRunCommand` and enter copy
pmode (scroll mode).
>
" Inspect runner pane map
map <Leader>vi :VimuxInspectRunner<CR>
<
------------------------------------------------------------------------------
*VimuxCloseRunner*
VimuxCloseRunner~
Close the tmux runner created by `VimuxRunCommand`
>
" Close vim tmux runner opened by VimuxRunCommand
map <Leader>vq :VimuxCloseRunner<CR>
<
------------------------------------------------------------------------------
*VimuxInterruptRunner*
VimuxInterruptRunner~
Interrupt any command that is running inside the
runner pane.
>
" Interrupt any command running in the runner pane map
map <Leader>vs :VimuxInterruptRunner<CR>
<
------------------------------------------------------------------------------
*VimuxClearRunnerHistory*
VimuxClearRunnerHistory~
Clear the tmux history of the runner pane for when
you enter tmux scroll mode inside the runner pane.
>
" Clear the tmux history of the runner pane
map <Leader>vc :VimuxClearRunnerHistory<CR>
<
------------------------------------------------------------------------------
*VimuxZoomRunner*
VimuxZoomRunner~
Zoom the runner pane. Once its zoomed, you will need
to use tmux "<bind-key> z" to restore the runner pane.
Zoom requires tmux version >= 1.8
>
" Zoom the tmux runner page
map <Leader>vz :VimuxZoomRunner<CR>
<
------------------------------------------------------------------------------
*VimuxRunCommandInDir*
VimuxRunCommandInDir~
Runs the specified command inside the directory of
the currently opened file. Takes two arguments. command and inFile
command: The command to run
inFile: If 1 the filename will be appended to the command
>
" Compile currently opened latex file to pdf
autocmd Filetype tex nnoremap <buffer> <Leader>rr :update<Bar>:call VimuxRunCommandInDir('latexmk -pdf', 1)<CR>
" Push the repository of the currently opened file
nnoremap <leader>gp :call VimuxRunCommandInDir("git push", 0)<CR>
<
==============================================================================
MISC (3) *VimuxMisc*
------------------------------------------------------------------------------
*VimuxExampleKeybinding*
Full Keybind Example~
>
" Run the current file with rspec
map <Leader>rb :call VimuxRunCommand("clear; rspec " . bufname("%"))<CR>
" Prompt for a command to run
map <Leader>vp :VimuxPromptCommand<CR>
" Run last command executed by VimuxRunCommand
map <Leader>vl :VimuxRunLastCommand<CR>
" Inspect runner pane
map <Leader>vi :VimuxInspectRunner<CR>
" Close vim tmux runner opened by VimuxRunCommand
map <Leader>vq :VimuxCloseRunner<CR>
" Interrupt any command running in the runner pane
map <Leader>vx :VimuxInterruptRunner<CR>
" Zoom the runner pane (use <bind-key> z to restore runner pane)
map <Leader>vz :call VimuxZoomRunner()<CR>
>
------------------------------------------------------------------------------
*VimuxTslimeReplacement*
Vimux as tslime replacement~
Here is how to use vimux to send code to a REPL. This is similar to tslime.
First, add some helpful mappings.
>
function! VimuxSlime()
call VimuxSendText(@v)
call VimuxSendKeys("Enter")
endfunction
" If text is selected, save it in the v buffer and send that buffer it to tmux
vmap <LocalLeader>vs "vy :call VimuxSlime()<CR>
" Select current paragraph and send it to tmux
nmap <LocalLeader>vs vip<LocalLeader>vs<CR>
<
Now, open a clojure file. Let's say your leader is backslash (\). Type \vp,
and then type lein repl at the prompt. This opens a tmux split running a REPL.
Then, select text or put the cursor on a function and type \vs. This will send
it to the REPL and evaluate it. The reason we pass `0` to `VimuxRunCommand`
is to stop the normal return that is sent to the runner pane and use our own
new line so the clojure REPL will evaluate the selected text without adding an
extra return. Thanks to @trptcolin for discovering this issue.
==============================================================================
CONFIGURATION (4) *VimuxConfiguration*
You can configure Vimux like this:
------------------------------------------------------------------------------
*VimuxConfiguration_height*
2.1 g:VimuxHeight~
The percent of the screen the split pane Vimux will spawn should take up.
let g:VimuxHeight = "40"
Default: "20"
------------------------------------------------------------------------------
*VimuxConfiguration_orientation*
2.2 g:VimuxOrientation~
The default orientation of the split tmux pane. This tells tmux to make the
pane either vertically or horizontally, which is backward from how Vim handles
creating splits.
let g:VimuxOrientation = "h"
Options:
"v": vertical
"h": horizontal
Default: "v"
------------------------------------------------------------------------------
*VimuxConfiguration_use_nearest*
2.3 g:VimuxUseNearest
Use exising pane or window (not used by vim) if found instead of running
split-window.
let VimuxUseNearest = 1
Default: 1
------------------------------------------------------------------------------
*VimuxConfiguration_reset_sequence*
2.4 g:VimuxResetSequence~
The keys sent to the runner pane before running a command. By default it sends
`q` to make sure the pane is not in scroll-mode and `C-u` to clear the line.
let VimuxResetSequence = ""
Default: "q C-u"
------------------------------------------------------------------------------
*VimuxPromptString*
2.5 g:VimuxPromptString~
The string presented in the vim command line when Vimux is invoked. Be sure
to put a space at the end of the string to allow for distinction between
the prompt and your input.
let g:VimuxPromptString = ""
Default: "Command? "
------------------------------------------------------------------------------
*VimuxRunnerType*
2.6 g:VimuxRunnerType~
The type of view object Vimux should use for the runner. For reference, a
tmux session is a group of windows, and a window is a layout of panes.
let g:VimuxRunnerType = "window"
Options:
"pane": for panes
"window": for windows
Default: "pane"
==============================================================================
vim:tw=78:ts=2:sw=2:expandtab:ft=help:norl:

View File

@@ -1 +0,0 @@
doc/tags

View File

@@ -1,198 +0,0 @@
if exists("g:loaded_vimux") || &cp
finish
endif
let g:loaded_vimux = 1
command -nargs=* VimuxRunCommand :call VimuxRunCommand(<args>)
command VimuxRunLastCommand :call VimuxRunLastCommand()
command VimuxCloseRunner :call VimuxCloseRunner()
command VimuxZoomRunner :call VimuxZoomRunner()
command VimuxInspectRunner :call VimuxInspectRunner()
command VimuxScrollUpInspect :call VimuxScrollUpInspect()
command VimuxScrollDownInspect :call VimuxScrollDownInspect()
command VimuxInterruptRunner :call VimuxInterruptRunner()
command -nargs=? VimuxPromptCommand :call VimuxPromptCommand(<args>)
command VimuxClearRunnerHistory :call VimuxClearRunnerHistory()
command VimuxTogglePane :call VimuxTogglePane()
function! VimuxRunCommandInDir(command, useFile)
let l:file = ""
if a:useFile ==# 1
let l:file = shellescape(expand('%:t'), 1)
endif
call VimuxRunCommand("cd ".shellescape(expand('%:p:h'), 1)." && ".a:command." ".l:file." && cd - > /dev/null")
endfunction
function! VimuxRunLastCommand()
if exists("g:VimuxRunnerIndex")
call VimuxRunCommand(g:VimuxLastCommand)
else
echo "No last vimux command."
endif
endfunction
function! VimuxRunCommand(command, ...)
if !exists("g:VimuxRunnerIndex") || _VimuxHasRunner(g:VimuxRunnerIndex) == -1
call VimuxOpenRunner()
endif
let l:autoreturn = 1
if exists("a:1")
let l:autoreturn = a:1
endif
let resetSequence = _VimuxOption("g:VimuxResetSequence", "q C-u")
let g:VimuxLastCommand = a:command
call VimuxSendKeys(resetSequence)
call VimuxSendText(a:command)
if l:autoreturn == 1
call VimuxSendKeys("Enter")
endif
endfunction
function! VimuxSendText(text)
call VimuxSendKeys('"'.escape(a:text, '"$').'"')
endfunction
function! VimuxSendKeys(keys)
if exists("g:VimuxRunnerIndex")
call system("tmux send-keys -t ".g:VimuxRunnerIndex." ".a:keys)
else
echo "No vimux runner pane/window. Create one with VimuxOpenRunner"
endif
endfunction
function! VimuxOpenRunner()
let nearestIndex = _VimuxNearestIndex()
if _VimuxOption("g:VimuxUseNearest", 1) == 1 && nearestIndex != -1
let g:VimuxRunnerIndex = nearestIndex
else
if _VimuxRunnerType() == "pane"
let height = _VimuxOption("g:VimuxHeight", 20)
let orientation = _VimuxOption("g:VimuxOrientation", "v")
call system("tmux split-window -p ".height." -".orientation)
elseif _VimuxRunnerType() == "window"
call system("tmux new-window")
endif
let g:VimuxRunnerIndex = _VimuxTmuxIndex()
call system("tmux last-"._VimuxRunnerType())
endif
endfunction
function! VimuxCloseRunner()
if exists("g:VimuxRunnerIndex")
call system("tmux kill-"._VimuxRunnerType()." -t ".g:VimuxRunnerIndex)
unlet g:VimuxRunnerIndex
endif
endfunction
function! VimuxTogglePane()
if exists("g:VimuxRunnerIndex")
if _VimuxRunnerType() == "window"
call system("tmux join-pane -d -s ".g:VimuxRunnerIndex." -p "._VimuxOption("g:VimuxHeight", 20))
let g:VimuxRunnerType = "pane"
elseif _VimuxRunnerType() == "pane"
let g:VimuxRunnerIndex=substitute(system("tmux break-pane -d -t ".g:VimuxRunnerIndex." -P -F '#{window_index}'"), "\n", "", "")
let g:VimuxRunnerType = "window"
endif
endif
endfunction
function! VimuxZoomRunner()
if exists("g:VimuxRunnerIndex")
if _VimuxRunnerType() == "pane"
call system("tmux resize-pane -Z -t ".g:VimuxRunnerIndex)
elseif _VimuxRunnerType() == "window"
call system("tmux select-window -t ".g:VimuxRunnerIndex)
endif
endif
endfunction
function! VimuxInspectRunner()
call system("tmux select-"._VimuxRunnerType()." -t ".g:VimuxRunnerIndex)
call system("tmux copy-mode")
endfunction
function! VimuxScrollUpInspect()
call VimuxInspectRunner()
call system("tmux last-"._VimuxRunnerType())
call VimuxSendKeys("C-u")
endfunction
function! VimuxScrollDownInspect()
call VimuxInspectRunner()
call system("tmux last-"._VimuxRunnerType())
call VimuxSendKeys("C-d")
endfunction
function! VimuxInterruptRunner()
call VimuxSendKeys("^c")
endfunction
function! VimuxClearRunnerHistory()
if exists("g:VimuxRunnerIndex")
call system("tmux clear-history -t ".g:VimuxRunnerIndex)
endif
endfunction
function! VimuxPromptCommand(...)
let command = a:0 == 1 ? a:1 : ""
let l:command = input(_VimuxOption("g:VimuxPromptString", "Command? "), command)
call VimuxRunCommand(l:command)
endfunction
function! _VimuxTmuxSession()
return _VimuxTmuxProperty("#S")
endfunction
function! _VimuxTmuxIndex()
if _VimuxRunnerType() == "pane"
return _VimuxTmuxPaneIndex()
else
return _VimuxTmuxWindowIndex()
end
endfunction
function! _VimuxTmuxPaneIndex()
return _VimuxTmuxProperty("#I.#P")
endfunction
function! _VimuxTmuxWindowIndex()
return _VimuxTmuxProperty("#I")
endfunction
function! _VimuxNearestIndex()
let views = split(system("tmux list-"._VimuxRunnerType()."s"), "\n")
for view in views
if match(view, "(active)") == -1
return split(view, ":")[0]
endif
endfor
return -1
endfunction
function! _VimuxRunnerType()
return _VimuxOption("g:VimuxRunnerType", "pane")
endfunction
function! _VimuxOption(option, default)
if exists(a:option)
return eval(a:option)
else
return a:default
endif
endfunction
function! _VimuxTmuxProperty(property)
return substitute(system("tmux display -p '".a:property."'"), '\n$', '', '')
endfunction
function! _VimuxHasRunner(index)
return match(system("tmux list-"._VimuxRunnerType()."s -a"), a:index.":")
endfunction

View File

@@ -1,53 +0,0 @@
"
" limp/vim/limp.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" Setup the Limp environment
"
" Version:
" 0.2
"
" Date:
" 2008-04-28
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
"
" Changelog:
" * 2008-04-28 by Mikael Jansson <mail@mikael.jansson.be>
" Only change colorscheme and nocompatible when not previously set.
"
" * 2008-04-25 by Mikael Jansson <mail@mikael.jansson.be>
" Catch-all key <F12> for Lisp boot, connect & display
"
" * 2008-04-20 by Mikael Jansson <mail@mikael.jansson.be>
" Initial version.
"-------------------------------------------------------------------
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
"-------------------------------------------------------------------
" external dependencies
"-------------------------------------------------------------------
silent! runtime plugin/matchit.vim
"-------------------------------------------------------------------
" the Limp library
"-------------------------------------------------------------------
runtime ftplugin/lisp/limp/cursor.vim
runtime ftplugin/lisp/limp/highlight.vim
runtime ftplugin/lisp/limp/sexp.vim
runtime ftplugin/lisp/limp/bridge.vim
runtime ftplugin/lisp/limp/autoclose.vim
runtime ftplugin/lisp/limp/keys.vim
runtime ftplugin/lisp/limp/mode.vim

View File

@@ -1,208 +0,0 @@
"
" limp/vim/autoclose.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" AutoClose, closes what's opened.
"
" This plugin closes opened parenthesis, braces, brackets, quotes as you
" type them. As of 1.1, if you type the open brace twice ({{), the closing
" brace will be pushed down to a new line.
"
" You can enable or disable this plugin by typing \a (or <Leader>a if
" you've redefined your leader character) in normal mode. You'll also
" probably want to know you can type <C-V> (<C-Q> if mswin is set) and the next
" character you type doesn't have mappings applied. This is useful when you
" want to insert only an opening paren or something.
"
" Version:
" 0.2
"
" Date:
" September 20, 2007
"
" Authors:
" Karl Guertin <grayrest@gr.ayre.st>
" Mikael Jansson <mail@mikael.jansson.be>
"
" Changelog:
" 2008-04-20 by Mikael Jansson <mail@mikael.jansson.be>
" * Factored out start/stop functions.
" * Removed the default mappings to toggle autoclose
"
" 2007-09-20 by Karl Guertin <grayrest@gr.ayre.st>
" 1.1.2 -- Fixed a mapping typo and caught a double brace problem
" 1.1.1 -- Missed a bug in 1.1, September 19, 2007
" 1.1 -- When not inserting at the end, previous version would eat chars
" at end of line, added double open->newline, September 19, 2007
" 1.0.1 -- Cruft from other parts of the mapping, knew I shouldn't have
" released the first as 1.0, April 3, 2007
" Setup -----------------------------------------------------{{{1
let s:omni_active = 0
let s:cotstate = &completeopt
if !exists('g:autoclose_on')
let g:autoclose_on = 0
endif
" assume everything has been defined already if one of the functions are
" defined.
if exists("*AutoClose_start")
finish
endif
if !exists("*AutoClose_stop")
fun! AutoClose_stop()
if g:autoclose_on
iunmap "
iunmap (
iunmap )
iunmap [
iunmap ]
iunmap {
iunmap }
iunmap <BS>
iunmap <C-h>
iunmap <Esc>
""iunmap <C-[>
let g:autoclose_on = 0
endif
endfun
endif
if !exists("*AutoClose_start")
fun! AutoClose_start()
if !g:autoclose_on
inoremap <silent> " <C-R>=<SID>QuoteDelim('"')<CR>
inoremap <silent> ( (<C-R>=<SID>CloseStackPush(')')<CR>
inoremap <silent> ) <C-R>=<SID>CloseStackPop(')')<CR>
inoremap <silent> [ [<C-R>=<SID>CloseStackPush(']')<CR>
inoremap <silent> ] <C-R>=<SID>CloseStackPop(']')<CR>
inoremap <silent> { <C-R>=<SID>OpenSpecial('{','}')<CR>
inoremap <silent> } <C-R>=<SID>CloseStackPop('}')<CR>
inoremap <silent> <BS> <C-R>=<SID>OpenCloseBackspace()<CR>
inoremap <silent> <C-h> <C-R>=<SID>OpenCloseBackspace()<CR>
inoremap <silent> <Esc> <C-R>=<SID>CloseStackPop('')<CR><Esc>
inoremap <silent> <C-[> <C-R>=<SID>CloseStackPop('')<CR><C-[>
let g:autoclose_on = 1
endif
endfunction
endif
let s:closeStack = []
" AutoClose Utilities -----------------------------------------{{{1
if !exists("*<SID>OpenSpecial")
function <SID>OpenSpecial(ochar,cchar) " ---{{{2
let line = getline('.')
let col = col('.') - 2
"echom string(col).':'.line[:(col)].'|'.line[(col+1):]
if a:ochar == line[(col)] && a:cchar == line[(col+1)] "&& strlen(line) - (col) == 2
"echom string(s:closeStack)
while len(s:closeStack) > 0
call remove(s:closeStack, 0)
endwhile
return "\<esc>a\<CR>a\<CR>".a:cchar."\<esc>\"_xk$\"_xa"
endif
return a:ochar.<SID>CloseStackPush(a:cchar)
endfunction
endif
if !exists("*<SID>CloseStackPush")
function <SID>CloseStackPush(char) " ---{{{2
"echom "push"
let line = getline('.')
let col = col('.')-2
if (col) < 0
call setline('.',a:char.line)
else
"echom string(col).':'.line[:(col)].'|'.line[(col+1):]
call setline('.',line[:(col)].a:char.line[(col+1):])
endif
call insert(s:closeStack, a:char)
"echom join(s:closeStack,'').' -- '.a:char
return ''
endfunction
endif
if !exists("*<SID>CloseStackPop")
function <SID>CloseStackPop(char) " ---{{{2
"echom "pop"
if len(s:closeStack) == 0
return a:char
endif
let popped = ''
let lastpop = ''
"echom join(s:closeStack,'').' || '.lastpop
while len(s:closeStack) > 0 && ((lastpop == '' && popped == '') || lastpop != a:char)
let lastpop = remove(s:closeStack,0)
let popped .= lastpop
"echom join(s:closeStack,'').' || '.lastpop.' || '.popped
endwhile
"echom ' --> '.popped
let col = col('.') - 2
let line = getline('.')
let splits = split(line[:col],popped,1)
"echom string(splits)
"echom col.' '.line[(col+2):].' '.popped
call setline('.',join(splits,popped).line[(col+strlen(popped)+1):])
return popped
endfunction
endif
if !exists("*<SID>QuoteDelim")
function <SID>QuoteDelim(char) " ---{{{2
let line = getline('.')
let col = col('.')
if line[col - 2] == "\\"
"Inserting a quoted quotation mark into the string
return a:char
elseif line[col - 1] == a:char
"Escaping out of the string
return "\<C-R>=".s:SID()."CloseStackPop(\"\\".a:char."\")\<CR>"
else
"Starting a string
return a:char."\<C-R>=".s:SID()."CloseStackPush(\"\\".a:char."\")\<CR>"
endif
endfunction
endif
" The strings returned from QuoteDelim aren't in scope for <SID>, so I
" have to fake it using this function (from the Vim help, but tweaked)
"
if !exists("*s:SID")
function s:SID()
return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID$')
endfun
endif
if !exists("*<SID>OpenCloseBackspace")
function <SID>OpenCloseBackspace() " ---{{{2
"if pumvisible()
" pclose
" call <SID>StopOmni()
" return "\<C-E>"
"else
let curline = getline('.')
let curpos = col('.')
let curletter = curline[curpos-1]
let prevletter = curline[curpos-2]
if (prevletter == '"' && curletter == '"') ||
\ (prevletter == "'" && curletter == "'") ||
\ (prevletter == "(" && curletter == ")") ||
\ (prevletter == "{" && curletter == "}") ||
\ (prevletter == "[" && curletter == "]")
if len(s:closeStack) > 0
call remove(s:closeStack,0)
endif
return "\<Delete>\<BS>"
else
return "\<BS>"
endif
"endif
endf
endif

View File

@@ -1,510 +0,0 @@
"
" limp/vim/bridge.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" Handle communication between Vim and Lisp, including boot, connect and
" display. Relies on 'lisp.sh' from the Limp package.
"
" Version:
" 0.2
"
" Date:
" 2008-04-25
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
" Larry Clapp <vim@theclapp.org>
" Changelog:
" 2008-08-26 by Mikael Jansson <mail@mikael.jansson.be>
" * Optionally specify core at startup and exit.
"
" 2008-08-25 by Mikael Jansson <mail@mikael.jansson.be>
" * Now boots a new Lisp or connects to an existing via screen.
" No longer needs the funnel (although it does need a file to read to/from
" screen: it doesn't seem as if 'stuff' can handle very large amounts of
" texts)
"
" 2008-08-18 by Mikael Jansson <mail@mikael.jansson.be>
" * Tab-completed prompt that lets you choose the Lisp process to connect to.
" Moved the startup to before the loaded check.
"-------------------------------------------------------------------
" startup
"-------------------------------------------------------------------
" only do these things once
let s:Limp_version="0.3.4"
let s:Limp_location = expand("$LIMPRUNTIME")
"if s:Limp_location == "" || s:Limp_location == "$LIMPRUNTIME"
if !filereadable(s:Limp_location . "/vim/limp.vim")
let s:Limp_location = "/usr/local/limp/" . s:Limp_version
endif
" prefix for the pipe used for communication
let s:limp_bridge_channel_base = $HOME . "/.limp_bridge_channel-"
let s:limp_bridge_connected=0
exe "setlocal complete+=s" . s:Limp_location . "/vim/thesaurus"
"-------------------------------------------------------------------
" talk to multiple Lisps using LimpBridge_connect()
"-------------------------------------------------------------------
fun! LimpBridge_complete_lisp(A,L,P)
let prefix = s:limp_bridge_channel_base
"echom "ls -1 ".prefix."*"
let output = system("ls -1 ".prefix."*")
if stridx(output, prefix."*") >= 0
echom "No Lisps started yet?"
return
endif
let files = split(output, "\n")
let names = []
for f in files
let names += [f[strlen(prefix):]]
endfor
return names
endfun
" optionally specify the screen id to connect to
"
" return values:
"
" -1 if user didn't want to connect
" 0 if connection wasn't possible
" 1 if the user did connect
" 2 if the user was already connected
"
fun! LimpBridge_connect(...)
if s:limp_bridge_connected == 1
echom "Already connected to Lisp!"
return 2
endif
if a:0 == 1 && a:1 != ""
" format: 7213.limp_listener-foo
let pid = a:1[:stridx(a:1, '.')-1]
let fullname = a:1[stridx(a:1, '.')+1:]
let name = fullname[strlen("limp_listener-"):]
let s:limp_bridge_channel = s:limp_bridge_channel_base.name.".".pid
else
let s:limp_bridge_channel = s:limp_bridge_channel_base
let name = input("Connect to [boot new]: ", "", "customlist,LimpBridge_complete_lisp")
if name == ""
return -1
endif
let s:limp_bridge_channel .= name
if 0 == filewritable(s:limp_bridge_channel) "|| s:limp_bridge_channel = s:limp_bridge_channel_base
echom "Not a Limp channel."
return 0
endif
endif
" extract the PID from format: foo.104982
" (backward from screen sty naming to ease tab completion)
" bridge id is the file used for communication between Vim and screen
let s:limp_bridge_id = strpart(s:limp_bridge_channel, strlen(s:limp_bridge_channel_base))
" bridge screenid is the screen in which the Lisp is running
let s:limp_bridge_screenid = s:limp_bridge_id[strridx(s:limp_bridge_id, '.')+1:]
"let s:limp_bridge_scratch = $HOME . "/.limp_bridge_scratch-" . s:limp_bridge_id
let s:limp_bridge_test = $HOME . '/.limp_bridge_test-' . s:limp_bridge_id
silent exe "new" s:limp_bridge_channel
if exists( "#BufEnter#*.lisp#" )
doauto BufEnter x.lisp
endif
setlocal syntax=lisp
" XXX: in ViLisp, buftype=nowrite, but w/ limp_bridge_channel, vim
" complains about the file being write-only.
"setlocal buftype=nowrite
setlocal bufhidden=hide
setlocal nobuflisted
setlocal noswapfile
hide
silent exe "new" s:limp_bridge_test
if exists( "#BufEnter#*.lisp#" )
doauto BufEnter x.lisp
endif
setlocal syntax=lisp
" setlocal buftype=nofile
setlocal bufhidden=hide
setlocal nobuflisted
" setlocal noswapfile
hide
" hide from the user that we created and deleted (hid, really) a couple of
" buffers
"normal!
redraw
let s:limp_bridge_connected=1
echom "Welcome to Limp. May your journey be pleasant."
return 1
endfun
fun! LimpBridge_connection_status()
if s:limp_bridge_connected == 1
return "Connected to ".s:limp_bridge_id
else
return "Disconnected"
endif
endfun
fun! LimpBridge_disconnect()
let s:limp_bridge_connected = 0
let s:limp_bridge_id = "<disconnected>"
endfun
"
" optionally, specify the path of the core to save to
"
fun! LimpBridge_quit_lisp(...)
" we were given a file
if a:0 == 1 && a:1 != ""
let core = a:1
call LimpBridge_send_to_lisp("(sb-ext:save-lisp-and-die \"".core."\")\n")
echom "Lisp ".s:limp_bridge_id." is gone, core saved to ".core."."
else
call LimpBridge_send_to_lisp("(sb-ext:quit)\n")
echom "Lisp ".s:limp_bridge_id." is gone."
endif
call LimpBridge_disconnect()
endfun
fun! LimpBridge_shutdown_lisp()
if s:limp_bridge_connected == 1
let core = input("Name of core to save [none]: ", "", "file")
call LimpBridge_quit_lisp(core)
else
echom "Not connected."
endif
endfun
"
" when not connected, start new or connect to existing
" otherwise, switch to Lisp (screen)
fun! LimpBridge_boot_or_connect_or_display()
if s:limp_bridge_connected
" is it still running?
let status = system("screen -ls")
if stridx(status, s:limp_bridge_screenid) == -1
call LimpBridge_disconnect()
return
endif
let cmd = "screen -x ".s:limp_bridge_screenid
if has("gui_running") || b:listener_always_open_window == 1
let cmd = "xterm -e " . cmd
if b:listener_keep_open == 1
let cmd .= " &"
endif
endif
silent exe "!".cmd
redraw!
else
" connect to a fresh Lisp
let what = LimpBridge_connect()
if what <= 0
" user didn't want to connect, let's boot!
let name = input("Name the Lisp: ")
if strlen(name) == 0
" give up
return
endif
let core = input("Path to core to boot [use system-default]: ", "", "file")
let core_opt = ""
if filereadable(core)
let core_opt = "-c ".core
echom "Booting ".core."..."
else
echom "Booting..."
endif
let styfile = tempname()
let cmd = s:Limp_location . "/bin/lisp.sh ".core_opt."-s ".styfile." -b ".name
call system(cmd)
while getfsize(styfile) <= len("limp_listener")
sleep 200m
endwhile
" needs to be binary, or readfile() expects a newline...
let lines = readfile(styfile, 'b')
if len(lines) < 1
echom "Error getting screen ID!"
return
endif
let sty = lines[0]
call delete(styfile)
call LimpBridge_connect(sty)
call LimpBridge_boot_or_connect_or_display()
endif
endif
endfun
augroup LimpBridge
au!
autocmd BufLeave .LimpBridge_* setlocal nobuflisted
autocmd BufLeave *.lisp let g:limp_bridge_last_lisp = bufname( "%" )
augroup END
"-------------------------------------------------------------------
" plugin <-> function mappings
"-------------------------------------------------------------------
nnoremap <silent> <buffer> <Plug>LimpBootConnectDisplay :call LimpBridge_boot_or_connect_or_display()<CR>
nnoremap <silent> <buffer> <Plug>LimpDisconnect :call LimpBridge_disconnect()<CR>
nnoremap <silent> <buffer> <Plug>LimpShutdownLisp :call LimpBridge_shutdown_lisp()<CR>
nnoremap <silent> <buffer> <Plug>EvalTop :call LimpBridge_eval_top_form()<CR>
nnoremap <silent> <buffer> <Plug>EvalCurrent :call LimpBridge_eval_current_form()<CR>
nnoremap <silent> <buffer> <Plug>EvalExpression :call LimpBridge_prompt_eval_expression()<CR>
vnoremap <silent> <buffer> <Plug>EvalBlock :call LimpBridge_eval_block()<cr>
nnoremap <silent> <buffer> <Plug>AbortReset :call LimpBridge_send_to_lisp( "ABORT\n" )<CR>
nnoremap <silent> <buffer> <Plug>AbortInterrupt :call LimpBridge_send_to_lisp( "" )<CR>
nnoremap <silent> <buffer> <Plug>TestCurrent :call LimpBridge_stuff_current_form()<CR>
nnoremap <silent> <buffer> <Plug>TestTop :call LimpBridge_stuff_top_form()<CR>
nnoremap <silent> <buffer> <Plug>LoadThisFile :call LimpBridge_send_to_lisp( "(load \"" . expand( "%:p" ) . "\")\n")<CR>
nnoremap <silent> <buffer> <Plug>LoadAnyFile :call LimpBridge_send_to_lisp( "(load \"" . expand( "%:p:r" ) . "\")\n")<CR>
nnoremap <silent> <buffer> <Plug>CompileFile :w! <bar> call LimpBridge_send_to_lisp("(compile-file \"".expand("%:p")."\")\n")<CR>
" XXX: What's the proprer syntax for calling >1 Plug?
""nnoremap <buffer> <Plug>CompileAndLoadFile <Plug>CompileFile <bar> <Plug>LoadAnyFile
nnoremap <silent> <buffer> <Plug>CompileAndLoadFile :w! <bar> call LimpBridge_send_to_lisp("(compile-file \"".expand("%:p")."\")\n") <bar> call LimpBridge_send_to_lisp( "(load \"" . expand( "%:p:r" ) . "\")\n")<CR>
" Goto Test Buffer:
" Goto Split: split current buffer and goto test buffer
nnoremap <silent> <buffer> <Plug>GotoTestBuffer :call LimpBridge_goto_buffer_or_window(g:limp_bridge_test)<CR>
nnoremap <silent> <buffer> <Plug>GotoTestBufferAndSplit :sb <bar> call LimpBridge_goto_buffer_or_window(g:limp_bridge_test)<CR>
" Goto Last: return to g:limp_bridge_last_lisp, i.e. last buffer
nnoremap <silent> <buffer> <Plug>GotoLastLispBuffer :call LimpBridge_goto_buffer_or_window(g:limp_bridge_last_lisp)<CR>
" HyperSpec:
nnoremap <silent> <buffer> <Plug>HyperspecExact :call LimpBridge_hyperspec("exact", 0)<CR>
nnoremap <silent> <buffer> <Plug>HyperspecPrefix :call LimpBridge_hyperspec("prefix", 1)<CR>
nnoremap <silent> <buffer> <Plug>HyperspecSuffix :call LimpBridge_hyperspec("suffix", 1)<CR>
nnoremap <silent> <buffer> <Plug>HyperspecGrep :call LimpBridge_hyperspec("grep", 1)<CR>
nnoremap <silent> <buffer> <Plug>HyperspecFirstLetterIndex :call LimpBridge_hyperspec("index", 0)<CR>
nnoremap <silent> <buffer> <Plug>HyperspecFullIndex :call LimpBridge_hyperspec("index-page", 0)<CR>
" Help Describe: ask Lisp about the current symbol
nnoremap <silent> <buffer> <Plug>HelpDescribe :call LimpBridge_send_to_lisp("(describe '".expand("<cword>").")")<CR>
"-------------------------------------------------------------------
" library
"-------------------------------------------------------------------
" assume that all of the file has been loaded & defined once
" if one of the functions are defined.
if exists("*LimpBridge_goto_buffer_or_window")
finish
endif
function! LimpBridge_goto_buffer_or_window( buff )
if -1 == bufwinnr( a:buff )
exe "hide bu" a:buff
else
exe bufwinnr( a:buff ) . "wincmd w"
endif
endfunction
function! LimpBridge_get_pos()
" what buffer are we in?
let bufnr = bufnr( "%" )
" get current position
let c_cur = virtcol( "." )
let l_cur = line( "." )
normal! H
let l_top = line( "." )
let pos = bufnr . "|" . l_top . "," . l_cur . "," . c_cur
" go back
exe "normal! " l_cur . "G" . c_cur . "|"
return( pos )
endfunction
function! LimpBridge_goto_pos( pos )
let mx = '\(\d\+\)|\(\d\+\),\(\d\+\),\(\d\+\)'
let bufnr = substitute( a:pos, mx, '\1', '' )
let l_top = substitute( a:pos, mx, '\2', '' )
let l_cur = substitute( a:pos, mx, '\3', '' )
let c_cur = substitute( a:pos, mx, '\4', '' )
silent exe "hide bu" bufnr
silent exe "normal! " . l_top . "Gzt" . l_cur . "G" . c_cur . "|"
endfunction
function! LimpBridge_yank( motion )
let value = ''
let p = LimpBridge_get_pos()
silent! exec 'normal!' a:motion
let new_p = LimpBridge_get_pos()
" did we move?
if p != new_p
" go back
silent! exec 'normal!' a:motion
let old_l = @l
exec 'normal! "ly' . a:motion
let value = @l
let @l = old_l
endif
call LimpBridge_goto_pos( p )
return( value )
endfunction
" copy an expression to a buffer
function! LimpBridge_send_sexp_to_buffer( sexp, buffer )
let p = LimpBridge_get_pos()
" go to the given buffer, go to the bottom
exe "hide bu" a:buffer
silent normal! G
" tried append() -- doesn't work the way I need it to
let old_l = @l
let @l = a:sexp
silent exe "put l"
" normal! "lp
let @l = old_l
call LimpBridge_goto_pos( p )
endfunction
" destroys contents of LimpBridge_channel buffer
function! LimpBridge_send_to_lisp( sexp )
if a:sexp == ''
return
endif
if !s:limp_bridge_connected
echom "Not connected to Lisp!"
return
endif
let p = LimpBridge_get_pos()
" goto LimpBridge_channel, delete it, put s-exp, write it to lisp
try
exe "hide bu" s:limp_bridge_channel
exe "%d"
normal! 1G
" tried append() -- doesn't work the way I need it to
let old_l = @l
let @l = a:sexp
normal! "lP
let @l = old_l
silent exe 'w!'
call system('screen -x '.s:limp_bridge_screenid.' -p 0 -X eval "readbuf" "paste ."')
catch /^Vim:E211:/
echom "Lisp is gone!"
" file not available, Lisp disappeared
call LimpBridge_disconnect()
endtry
call LimpBridge_goto_pos( p )
endfunction
function! LimpBridge_prompt_eval_expression()
let whatwhat = input("Eval: ")
call LimpBridge_send_to_lisp(whatwhat)
endfun
" Actually evals current top level form
function! LimpBridge_eval_top_form()
" save position
let p = LimpBridge_get_pos()
silent! exec "normal! 99[("
call LimpBridge_send_to_lisp( LimpBridge_yank( "%" ) )
" fix cursor position, in case of error below
call LimpBridge_goto_pos( p )
endfunction
function! LimpBridge_eval_current_form()
" save position
let pos = LimpBridge_get_pos()
" find & yank current s-exp
normal! [(
let sexp = LimpBridge_yank( "%" )
call LimpBridge_send_to_lisp( sexp )
call LimpBridge_goto_pos( pos )
endfunction
function! LimpBridge_eval_block() range
" save position
let pos = LimpBridge_get_pos()
" yank current visual block
let old_l = @l
'<,'> yank l
let sexp = @l
let @l = old_l
call LimpBridge_send_to_lisp( sexp )
call LimpBridge_goto_pos( pos )
endfunction
function! LimpBridge_stuff_current_form()
" save position
let pos = LimpBridge_get_pos()
" find & yank current s-exp
normal! [(
call LimpBridge_send_sexp_to_buffer( LimpBridge_yank( "%" ), s:limp_bridge_test )
call LimpBridge_goto_pos( pos )
endfunction
function! LimpBridge_stuff_top_form()
" save position
let pos = LimpBridge_get_pos()
" find & yank top-level s-exp
silent! exec "normal! 99[("
call LimpBridge_send_sexp_to_buffer( LimpBridge_yank( "%" ), s:limp_bridge_test )
call LimpBridge_goto_pos( pos )
endfunction
function! LimpBridge_hyperspec(type, make_page)
" get current word under cursor
let word = expand( "<cword>" )
let cmd = "! perl " . s:Limp_location . "/bin/limp-hyperspec.pl"
let cmd = cmd . " " . a:type . " " . a:make_page . " '" . word . "'"
silent! exe cmd
redraw!
endfunction

View File

@@ -1,207 +0,0 @@
"
" limp/vim/cursor.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" Save/restore cursor position in window (mostly obsoleted by Vim7 though)
"
" Version:
" 0.2
"
" Date:
" 2008-04-25
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
" Charles E. Campbell, Jr. <drNchipO@ScampbellPfamilyA.Mbiz>-NOSPAM
"
" Changelog:
" 2008-04-18
" * Removed all leader mappings
"
" Usage:
" call Cursor_push()
" let cursor = Cursor_get()
"
" call Cursor_pop()
" call Cursor_set(cursor)
"
" Load Once: {{{1
let s:keepcpo = &cpo
set cpo&vim
" -----------------------
" Public Interface: {{{1
" -----------------------
let s:modifier= "sil keepj "
" assume that all of the file has been loaded & defined once
" if one of the functions are defined.
if exists("*Cursor_get")
finish
endif
" Cursor_get: {{{1
" Return the current cursor (as an executable command!)
"
fun! Cursor_get()
if line(".") == 1 && getline(1) == ""
return ""
endif
" disable various scrolling trickery
let so_keep = &so
let siso_keep = &siso
let ss_keep = &ss
set so=0 siso=0 ss=0
let swline = line(".")
let swcol = col(".")
let swwline = winline() - 1
let swwcol = virtcol(".") - wincol()
let cursordata = "call Window_goto_by_buffer_number(".winbufnr(0).")|silent ".swline
let cursordata = cursordata."|".s:modifier."norm! 0z\<cr>"
if swwline > 0
let cursordata = cursordata.":".s:modifier."norm! ".swwline."\<c-y>\<cr>"
endif
if swwcol > 0
let cursordata = cursordata.":".s:modifier."norm! 0".swwcol."zl\<cr>"
endif
let cursordata = cursordata.":".s:modifier."call cursor(".swline.",".swcol.")\<cr>"
" restore scrolling flags
let &so = so_keep
let &siso = siso_keep
let &ss = ss_keep
return cursordata
endfun
" Cursor_set: {{{1
" Set the current cursor to an old one
"
fun! Cursor_set(cursordata)
exe "silent ".a:cursordata
endfun
" ---------------------------------------------------------------------
" Cursor_push {{{1
" let cursor = Cursor_push() save window position in b:cursor_position_{b:cursor_position_index}
" and return cursor.
fun! Cursor_push(...)
let cursordata = Cursor_get()
" save window position in
" b:cursor_position_{b:cursor_position_index} (stack)
if !exists("b:cursor_position_index")
let b:cursor_position_index= 1
else
let b:cursor_position_index = b:cursor_position_index + 1
endif
let b:cursor_position_{b:cursor_position_index} = cursordata
return cursordata
endfun
" ---------------------------------------------------------------------
" Cursor_pop: {{{1
fun! Cursor_pop()
if line(".") == 1 && getline(1) == ""
return ""
endif
let so_keep = &so
let siso_keep = &siso
let ss_keep = &ss
set so=0 siso=0 ss=0
" use saved window position in b:cursor_position_{b:cursor_position_index} if it exists
if exists("b:cursor_position_index") && exists("b:cursor_position_{b:cursor_position_index}")
try
exe "silent! ".b:cursor_position_{b:cursor_position_index}
catch /^Vim\%((\a\+)\)\=:E749/
" ignore empty buffer error messages
endtry
" normally drop top-of-stack by one
" but while new top-of-stack doesn't exist
" drop top-of-stack index by one again
if b:cursor_position_index >= 1
unlet b:cursor_position_{b:cursor_position_index}
let b:cursor_position_index= b:cursor_position_index - 1
while b:cursor_position_index >= 1 && !exists("b:cursor_position_{b:cursor_position_index}")
let b:cursor_position_index= b:cursor_position_index - 1
endwhile
if b:cursor_position_index < 1
unlet b:cursor_position_index
endif
endif
else
echohl WarningMsg
echomsg "***warning*** need to cursor_save() first!"
echohl None
endif
" seems to be something odd: vertical motions after RWP
" cause jump to first column. Following fixes that
if wincol() > 1
silent norm! hl
elseif virtcol(".") < virtcol("$")
silent norm! lh
endif
let &so = so_keep
let &siso = siso_keep
let &ss = ss_keep
endfun
" ---------------------------------------------------------------------
" Window_goto_by_buffer_number: go to window holding given buffer (by number) {{{1
" Prefers current window; if its buffer number doesn't match,
" then will try from topleft to bottom right
fun! Window_goto_by_buffer_number(bufnum)
if winbufnr(0) == a:bufnum
return
endif
winc t
let first=1
while winbufnr(0) != a:bufnum && (first || winnr() != 1)
winc w
let first= 0
endwhile
endfun
" ---------------------------------------------------------------------
" ListWinPosn:
"fun! ListWinPosn() " Decho
" if !exists("b:cursor_position_index") || b:cursor_position_index == 0 " Decho
" call Decho("nothing on SWP stack") " Decho
" else " Decho
" let jwinposn= b:cursor_position_index " Decho
" while jwinposn >= 1 " Decho
" if exists("b:cursor_position{jwinposn}") " Decho
" call Decho("winposn{".jwinposn."}<".b:cursor_position{jwinposn}.">") " Decho
" else " Decho
" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho
" endif " Decho
" let jwinposn= jwinposn - 1 " Decho
" endwhile " Decho
" endif " Decho
"endfun " Decho
"com! -nargs=0 LWP call ListWinPosn() " Decho
" ---------------------------------------------------------------------
" Restore: {{{1
let &cpo = s:keepcpo
unlet s:keepcpo
" ---------------------------------------------------------------------
" Modelines: {{{1
" vim: ts=4 fdm=marker

View File

@@ -1,338 +0,0 @@
" Vim color file
" Maintainer: Henry So, Jr. <henryso@panix.com>
" These are the colors of the "desert" theme by Hans Fugal with a few small
" modifications (namely that I lowered the intensity of the normal white and
" made the normal and nontext backgrounds black), modified to work with 88-
" and 256-color xterms.
"
" The original "desert" theme is available as part of the vim distribution or
" at http://hans.fugal.net/vim/colors/.
"
" The real feature of this color scheme, with a wink to the "inkpot" theme, is
" the programmatic approximation of the gui colors to the palettes of 88- and
" 256- color xterms. The functions that do this (folded away, for
" readability) are calibrated to the colors used for Thomas E. Dickey's xterm
" (version 200), which is available at http://dickey.his.com/xterm/xterm.html.
"
" I struggled with trying to parse the rgb.txt file to avoid the necessity of
" converting color names to #rrggbb form, but decided it was just not worth
" the effort. Maybe someone seeing this may decide otherwise...
set background=dark
if version > 580
" no guarantees for version 5.8 and below, but this makes it stop
" complaining
hi clear
if exists("syntax_on")
syntax reset
endif
endif
let g:colors_name="desert256"
if has("gui_running") || &t_Co == 88 || &t_Co == 256
" functions {{{
" returns an approximate grey index for the given grey level
fun <SID>grey_number(x)
if &t_Co == 88
if a:x < 23
return 0
elseif a:x < 69
return 1
elseif a:x < 103
return 2
elseif a:x < 127
return 3
elseif a:x < 150
return 4
elseif a:x < 173
return 5
elseif a:x < 196
return 6
elseif a:x < 219
return 7
elseif a:x < 243
return 8
else
return 9
endif
else
if a:x < 14
return 0
else
let l:n = (a:x - 8) / 10
let l:m = (a:x - 8) % 10
if l:m < 5
return l:n
else
return l:n + 1
endif
endif
endif
endfun
" returns the actual grey level represented by the grey index
fun <SID>grey_level(n)
if &t_Co == 88
if a:n == 0
return 0
elseif a:n == 1
return 46
elseif a:n == 2
return 92
elseif a:n == 3
return 115
elseif a:n == 4
return 139
elseif a:n == 5
return 162
elseif a:n == 6
return 185
elseif a:n == 7
return 208
elseif a:n == 8
return 231
else
return 255
endif
else
if a:n == 0
return 0
else
return 8 + (a:n * 10)
endif
endif
endfun
" returns the palette index for the given grey index
fun <SID>grey_color(n)
if &t_Co == 88
if a:n == 0
return 16
elseif a:n == 9
return 79
else
return 79 + a:n
endif
else
if a:n == 0
return 16
elseif a:n == 25
return 231
else
return 231 + a:n
endif
endif
endfun
" returns an approximate color index for the given color level
fun <SID>rgb_number(x)
if &t_Co == 88
if a:x < 69
return 0
elseif a:x < 172
return 1
elseif a:x < 230
return 2
else
return 3
endif
else
if a:x < 75
return 0
else
let l:n = (a:x - 55) / 40
let l:m = (a:x - 55) % 40
if l:m < 20
return l:n
else
return l:n + 1
endif
endif
endif
endfun
" returns the actual color level for the given color index
fun <SID>rgb_level(n)
if &t_Co == 88
if a:n == 0
return 0
elseif a:n == 1
return 139
elseif a:n == 2
return 205
else
return 255
endif
else
if a:n == 0
return 0
else
return 55 + (a:n * 40)
endif
endif
endfun
" returns the palette index for the given R/G/B color indices
fun <SID>rgb_color(x, y, z)
if &t_Co == 88
return 16 + (a:x * 16) + (a:y * 4) + a:z
else
return 16 + (a:x * 36) + (a:y * 6) + a:z
endif
endfun
" returns the palette index to approximate the given R/G/B color levels
fun <SID>color(r, g, b)
" get the closest grey
let l:gx = <SID>grey_number(a:r)
let l:gy = <SID>grey_number(a:g)
let l:gz = <SID>grey_number(a:b)
" get the closest color
let l:x = <SID>rgb_number(a:r)
let l:y = <SID>rgb_number(a:g)
let l:z = <SID>rgb_number(a:b)
if l:gx == l:gy && l:gy == l:gz
" there are two possibilities
let l:dgr = <SID>grey_level(l:gx) - a:r
let l:dgg = <SID>grey_level(l:gy) - a:g
let l:dgb = <SID>grey_level(l:gz) - a:b
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
let l:dr = <SID>rgb_level(l:gx) - a:r
let l:dg = <SID>rgb_level(l:gy) - a:g
let l:db = <SID>rgb_level(l:gz) - a:b
let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
if l:dgrey < l:drgb
" use the grey
return <SID>grey_color(l:gx)
else
" use the color
return <SID>rgb_color(l:x, l:y, l:z)
endif
else
" only one possibility
return <SID>rgb_color(l:x, l:y, l:z)
endif
endfun
" returns the palette index to approximate the 'rrggbb' hex string
fun <SID>rgb(rgb)
let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
return <SID>color(l:r, l:g, l:b)
endfun
" sets the highlighting for the given group
fun <SID>X(group, fg, bg, attr)
if a:fg != ""
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
endif
if a:bg != ""
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
endif
if a:attr != ""
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
endif
endfun
" }}}
call <SID>X("Normal", "cccccc", "000000", "")
" highlight groups
call <SID>X("Cursor", "708090", "f0e68c", "")
"CursorIM
"Directory
"DiffAdd
"DiffChange
"DiffDelete
"DiffText
"ErrorMsg
call <SID>X("VertSplit", "c2bfa5", "7f7f7f", "reverse")
call <SID>X("Folded", "ffd700", "4d4d4d", "")
call <SID>X("FoldColumn", "d2b48c", "4d4d4d", "")
call <SID>X("IncSearch", "708090", "f0e68c", "")
"LineNr
call <SID>X("ModeMsg", "daa520", "", "")
call <SID>X("MoreMsg", "2e8b57", "", "")
call <SID>X("NonText", "addbe7", "000000", "bold")
call <SID>X("Question", "00ff7f", "", "")
call <SID>X("Search", "f5deb3", "cd853f", "")
call <SID>X("SpecialKey", "9acd32", "", "")
call <SID>X("StatusLine", "c2bfa5", "000000", "reverse")
call <SID>X("StatusLineNC", "c2bfa5", "7f7f7f", "reverse")
call <SID>X("Title", "cd5c5c", "", "")
call <SID>X("Visual", "6b8e23", "f0e68c", "reverse")
"VisualNOS
call <SID>X("WarningMsg", "fa8072", "", "")
"WildMenu
"Menu
"Scrollbar
"Tooltip
" syntax highlighting groups
call <SID>X("Comment", "87ceeb", "", "")
call <SID>X("Constant", "ffa0a0", "", "")
call <SID>X("Identifier", "98fb98", "", "none")
call <SID>X("Statement", "f0e68c", "", "bold")
call <SID>X("PreProc", "cd5c5c", "", "")
call <SID>X("Type", "bdb76b", "", "bold")
call <SID>X("Special", "ffdead", "", "")
"Underlined
call <SID>X("Ignore", "666666", "", "")
"Error
call <SID>X("Todo", "ff4500", "eeee00", "")
" delete functions {{{
delf <SID>X
delf <SID>rgb
delf <SID>color
delf <SID>rgb_color
delf <SID>rgb_level
delf <SID>rgb_number
delf <SID>grey_color
delf <SID>grey_level
delf <SID>grey_number
" }}}
else
" color terminal definitions
hi SpecialKey ctermfg=darkgreen
hi NonText cterm=bold ctermfg=darkblue
hi Directory ctermfg=darkcyan
hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1
hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green
hi Search cterm=NONE ctermfg=grey ctermbg=blue
hi MoreMsg ctermfg=darkgreen
hi ModeMsg cterm=NONE ctermfg=brown
hi LineNr ctermfg=3
hi Question ctermfg=green
hi StatusLine cterm=bold,reverse
hi StatusLineNC cterm=reverse
hi VertSplit cterm=reverse
hi Title ctermfg=5
hi Visual cterm=reverse
hi VisualNOS cterm=bold,underline
hi WarningMsg ctermfg=1
hi WildMenu ctermfg=0 ctermbg=3
hi Folded ctermfg=darkgrey ctermbg=NONE
hi FoldColumn ctermfg=darkgrey ctermbg=NONE
hi DiffAdd ctermbg=4
hi DiffChange ctermbg=5
hi DiffDelete cterm=bold ctermfg=4 ctermbg=6
hi DiffText cterm=bold ctermbg=1
hi Comment ctermfg=darkcyan
hi Constant ctermfg=brown
hi Special ctermfg=5
hi Identifier ctermfg=6
hi Statement ctermfg=3
hi PreProc ctermfg=5
hi Type ctermfg=2
hi Underlined cterm=underline ctermfg=5
hi Ignore ctermfg=darkgrey
hi Error cterm=bold ctermfg=7 ctermbg=1
endif
" vim: set fdl=0 fdm=marker:

View File

@@ -1,236 +0,0 @@
"
" limp/vim/highlight.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" Highlight parens and containing s-exps
"
" Version:
" 0.2
"
" Date:
" 2008-04-25
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
" Charles E. Campbell, Jr. <drNchipO@ScampbellPfamilyA.Mbiz>-NOSPAM
"
" Changelog:
" 2008-04-25
" * Fixed regressions. Now properly highlights blocks again.
"
" 2008-04-18
" * Removed all mappings
" * Removed < 7.00 compatibility
" * Renamed to Lim-Highlight
" * Changed from Search to Brackets[Block]
"
" Usage: {{{1
" Before loading:
" let g:LimpHighlight = 1
" or after loading:
" call LimpHighlight_start()
"
" ---------------------------------------------------------------------
" Load Once: {{{1
let s:keepcpo = &cpo
set cpo&vim
" disable matchparen: we do that ourselves.
let g:loaded_matchparen = 1
" assume that all of the file has been loaded & defined once
" if one of the functions are defined.
if exists("*LimpHighlight_start")
finish
endif
fun! LimpHighlight_start()
if exists("g:limp_highlight_active")
return
endif
let g:limp_highlight_active = 1
if !exists("*Cursor_get")
" due to loading order, <limp/cursor.vim> may not have loaded yet.
" attempt to force a load now. Ditto for matchit!
silent! runtime limp/cursor.vim
endif
silent! runtime plugin/matchit.vim
" set whichwrap
let s:wwkeep = &ww
set ww=b,s,<,>,[,]
augroup LimpHighlight
au!
au CursorMoved * silent call s:LimpHighlight_handler()
augroup END
set lz
call s:LimpHighlight_handler()
set nolz
endfun
fun! LimpHighlight_stop()
"echom "Stopping highlight"
set lz
if exists("g:limp_highlight_active")
unlet g:limp_highlight_active
endif
match none
2match none
" remove cursorhold event for highlighting matching bracket
augroup LimpHighlight
au!
augroup END
let &ww = s:wwkeep
set nolz
endfun
" ---------------------------------------------------------------------
" LimpHighlight_handler: this routine actually performs the highlighting of {{{1
" the matching bracket.
fun! <SID>LimpHighlight_handler()
if mode() =~ '['."\<c-v>".'vV]'
" don't try to highlight matching/surrounding brackets while in
" visual-block mode
return
endif
" save
let magickeep = &magic
let regdq = @"
let regunnamed = @@
let sokeep = &so
let sskeep = &ss
let sisokeep = &siso
let solkeep = &sol
let t_vbkeep = &t_vb
let vbkeep = &vb
silent! let regpaste = @*
" turn beep/visual flash off
set nosol vb t_vb= so=0 siso=0 ss=0 magic
" remove every other character from the mps option set
let mps = substitute(&mps,'\(.\).','\1','g')
" grab a copy of the character under the cursor into @0
silent! norm! yl
" if the character grabbed in @0 is in the mps option set, then highlight
" the matching character
if stridx(mps,@0) != -1
"------------------------------------------
" We are at a bracket character
"------------------------------------------
let curchr = @0
" determine match line, column.
" Restrict search to currently visible portion of window.
if &mps =~ curchr.':'
let stopline = line("w$")
let chrmatch = substitute(&mps,'^.*'.curchr.':\(.\).*$','\1','')
let [mtchline,mtchcol] = searchpairpos(escape(curchr,'[]'),'',escape(chrmatch,'[]'),'n','synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"',stopline)
else
let stopline = line("w0")
let chrmatch = substitute(&mps,'^.*\(.\):'.curchr.'.*$','\1','')
let [mtchline,mtchcol] = searchpairpos(escape(chrmatch,'[]'),'',escape(curchr,'[]'),'bn','synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"',stopline)
endif
if mtchline != 0 && mtchcol != 0
let mtchline2 = line('.')
let mtchcol2 = col('.')
let mtchline1 = mtchline
let mtchcol1 = mtchcol
call s:PerformMatch(mtchline1, mtchcol1, mtchline2, mtchcol2)
else
2match none
match none
endif
" if g:HiMtchBrkt_surround exists and is true, then highlight the surrounding brackets
"elseif exists("g:HiMtchBrkt_surround") && g:HiMtchBrkt_surround
else
"------------------------------------------
" We are inside brackets!
"------------------------------------------
let swp = Cursor_get()
let openers = '['.escape(substitute(&mps,':.,\=',"","g"),']').']'
let closers = '['.escape(substitute(&mps,',\=.:',"","g"),']').']'
call searchpair(openers,"",closers,'','synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
silent! norm! yl
if stridx(mps,@0) != -1
let mtchline1 = line('.')
let mtchcol1 = virtcol('.')
keepj norm! %
let mtchline2 = line('.')
let mtchcol2 = virtcol('.')
call Cursor_set(swp)
call s:PerformMatch(mtchline1, mtchcol1, mtchline2, mtchcol2)
else
match none
2match none
endif
endif
" restore
let &magic = magickeep
let @" = regdq
let @@ = regunnamed
let &sol = solkeep
let &so = sokeep
let &siso = sisokeep
let &ss = sskeep
let &t_vb = t_vbkeep
let &vb = vbkeep
silent! let @* = regpaste
endfun
fun! s:PerformMatch(line1, col1, line2, col2)
let line1 = a:line1
let col1 = a:col1
let line2 = a:line2
let col2 = a:col2
if line1 == line2
" at a single line => sort points on columns
if col1 > col2
let tmp = col2
let col2 = col1
let col1 = tmp
let tmp = line2
let line2 = line1
let line1 = tmp
endif
exe '2match BracketsBlock /\%'.line1.'l\%>'.col1.'v\%<'.col2.'v/'
else
" at a single line => sort points on lines
if line1 > line2
let tmp = line2
let line2 = line1
let line1 = tmp
let tmp = col2
let col2 = col1
let col1 = tmp
endif
exe '2match BracketsBlock /\%'.line1.'l\%>'.col1.'v\|\%>'.line1.'l\%<'.line2.'l\|\%'.line2.'l\%<'.col2.'v/'
endif
exe 'match Brackets /\%'.line1.'l\%'.col1.'v\|\%'.line2.'l\%'.col2.'v/'
endfun
let &cpo = s:keepcpo
unlet s:keepcpo

View File

@@ -1,96 +0,0 @@
"
" limp/vim/keys.vim
"
" Description:
" Limp key bindings
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
"
nmap <buffer> <F12> <Plug>LimpBootConnectDisplay
nmap <buffer> <C-F12> <Plug>LimpDisconnect
nmap <buffer> <S-F12> <Plug>LimpShutdownLisp
" Eval Top: send top-level s-exp to Lisp
" Eval Current: send current s-exp to Lisp
" Eval Expression: send arbitrary code to Lisp
nmap <buffer> <LocalLeader>et <Plug>EvalTop
nmap <buffer> <LocalLeader>ec <Plug>EvalCurrent
nmap <buffer> <LocalLeader>ex <Plug>EvalExpression
" Eval Block: visual mode
vmap <buffer> <LocalLeader>et <Plug>EvalBlock
vmap <buffer> <LocalLeader>ec <Plug>EvalBlock
vmap <buffer> <LocalLeader>ex <Plug>EvalBlock
" SBCL Abort Reset: abort from the debugger
nmap <buffer> <LocalLeader>ar <Plug>AbortReset
" Abort Interrupt: send ^C to interpreter
nmap <buffer> <LocalLeader>ai <Plug>AbortInterrupt
" Test Current: copy current s-exp to test buffer
" Test Top: copy top s-exp to test buffer
nmap <buffer> <LocalLeader>tc <Plug>TestCurrent
nmap <buffer> <LocalLeader>tt <Plug>TestTop
" Load File: load /this/ file into Lisp
" Load Any File: load whichever version of this file (.lisp not given)
nmap <buffer> <LocalLeader>lf <Plug>LoadThisFile
nmap <buffer> <LocalLeader>la <Plug>LoadAnyFile
" Compile File: compile the current file
" Compile Load File: compile, then load the current file
nmap <buffer> <LocalLeader>cf <Plug>CompileFile
nmap <buffer> <LocalLeader>cl <Plug>CompileAndLoadFile
" Goto Test Buffer:
" Goto Split: split current buffer and goto test buffer
nmap <buffer> <LocalLeader>gt <Plug>GotoTestBuffer
nmap <buffer> <LocalLeader>gs <Plug>GotoTestBufferAndSplit
" Goto Last: return to last Lisp buffer
nmap <buffer> <LocalLeader>gl <Plug>GotoLastLispBuffer
" HyperSpec:
nmap <buffer> <LocalLeader>he <Plug>HyperspecExact
nmap <buffer> <LocalLeader>hp <Plug>HyperspecPrefix
nmap <buffer> <LocalLeader>hs <Plug>HyperspecSuffix
nmap <buffer> <LocalLeader>hg <Plug>HyperspecGrep
nmap <buffer> <LocalLeader>hi <Plug>HyperspecFirstLetterIndex
nmap <buffer> <LocalLeader>hI <Plug>HyperspecFullIndex
nmap <buffer> K <Plug>HyperspecExact
" Help Describe: ask Lisp about the current symbol
nmap <buffer> <LocalLeader>hd <Plug>HelpDescribe
" Mark Top: mark visual block
nmap <buffer> <LocalLeader>mt <Plug>MarkTop
" Format Current: reindent/format
" Format Top:
nmap <buffer> <LocalLeader>fc <Plug>FormatCurrent
nmap <buffer> <LocalLeader>ft <Plug>FormatTop
" Sexp Wrap: wrap the current form in a list
" Sexp Peel: peel a list off the current form
nmap <buffer> <LocalLeader>sw <Plug>SexpWrap
nmap <buffer> <LocalLeader>sp <Plug>SexpPeel
" Sexp Previous: navigate to previous s-exp
" Sexp Next: navigate to previous s-exp
nmap <buffer> ( <Plug>SexpPrevious
nmap <buffer> ) <Plug>SexpNext
" Sexp Move Back: swap this and previous s-exp
" Sexp Move Forward: swap this and next s-exp
nmap <buffer> { <Plug>SexpMoveBack
nmap <buffer> } <Plug>SexpMoveForward
" Sexp Comment: comment all the way from the top level
nmap <buffer> <LocalLeader>sc <Plug>SexpComment
" Sexp Comment Current: comment current form
nmap <buffer> <LocalLeader>sC <Plug>SexpCommentCurrent

View File

@@ -1,53 +0,0 @@
"
" limp/vim/limp.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" Setup the Limp environment
"
" Version:
" 0.2
"
" Date:
" 2008-04-28
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
"
" Changelog:
" * 2008-04-28 by Mikael Jansson <mail@mikael.jansson.be>
" Only change colorscheme and nocompatible when not previously set.
"
" * 2008-04-25 by Mikael Jansson <mail@mikael.jansson.be>
" Catch-all key <F12> for Lisp boot, connect & display
"
" * 2008-04-20 by Mikael Jansson <mail@mikael.jansson.be>
" Initial version.
"-------------------------------------------------------------------
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
"-------------------------------------------------------------------
" external dependencies
"-------------------------------------------------------------------
silent! runtime plugin/matchit.vim
"-------------------------------------------------------------------
" the Limp library
"-------------------------------------------------------------------
runtime ftplugin/lisp/limp/cursor.vim
runtime ftplugin/lisp/limp/highlight.vim
runtime ftplugin/lisp/limp/sexp.vim
runtime ftplugin/lisp/limp/bridge.vim
runtime ftplugin/lisp/limp/autoclose.vim
runtime ftplugin/lisp/limp/keys.vim
runtime ftplugin/lisp/limp/mode.vim

View File

@@ -1,118 +0,0 @@
"
" limp/vim/mode.vim
"
" URL:
" http://mikael.jansson.be
"
" Description:
" Lisp-mode specific functions
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
"
"Eval (say-hello 'mikael)
command! -buffer -nargs=* Eval silent call LimpBridge_send_to_lisp(<q-args>)
let b:listener_always_open_window=0
let b:listener_keep_open=0
let g:lisp_mode_active = 0
fun! LimpMode_start()
if g:lisp_mode_active
return
endif
let g:lisp_mode_active = 1
"-------------------------------------------------------------------
" coloring
"-------------------------------------------------------------------
let g:lisp_rainbow=1
set t_Co=256
if !exists("g:colors_name")
colorscheme desert256
endif
hi Brackets ctermbg=53 ctermfg=white
hi BracketsBlock ctermbg=235 guibg=lightgray
hi StatusLine ctermbg=white ctermfg=160
hi StatusLineNC ctermbg=black ctermfg=gray
hi Pmenu ctermbg=53 ctermfg=255
hi PmenuSel ctermbg=255 ctermfg=53
"
" set all parens to gray
"
hi hlLevel0 ctermfg=238
hi hlLevel1 ctermfg=238
hi hlLevel2 ctermfg=238
hi hlLevel3 ctermfg=238
hi hlLevel4 ctermfg=238
hi hlLevel5 ctermfg=238
hi hlLevel6 ctermfg=238
hi hlLevel7 ctermfg=238
hi hlLevel8 ctermfg=238
hi hlLevel9 ctermfg=238
hi hlLevel10 ctermfg=238
hi hlLevel11 ctermfg=238
call LimpHighlight_start()
call AutoClose_start()
" for whatever reason, nocursorline isn't set after pressing F12... (i.e.,
" switching back to the buffer)
setlocal nocursorline
endfun
fun! LimpMode_stop()
let g:lisp_mode_active = 0
call LimpHighlight_stop()
call AutoClose_stop()
endfun
augroup LimpMode
au!
au BufEnter * :if &filetype == "lisp" | call LimpMode_start() | endif
au BufLeave * :if &filetype == "lisp" | call LimpMode_stop() | endif
augroup END
"-------------------------------------------------------------------
" init filetype plugin
"-------------------------------------------------------------------
syntax on
setlocal nocompatible nocursorline
setlocal lisp syntax=lisp
setlocal ls=2 bs=2 si et sw=2 ts=2 tw=0
setlocal statusline=%<%f\ \(%{LimpBridge_connection_status()}\)\ %h%m%r%=%-14.(%l,%c%V%)\ %P\ of\ %L\ \(%.45{getcwd()}\)
setlocal iskeyword=&,*,+,45,/,48-57,:,<,=,>,@,A-Z,a-z,_
setlocal cpoptions=-mp
setlocal foldmethod=marker foldmarker=(,) foldminlines=1
" This allows gf and :find to work. Fix path to your needs
setlocal suffixesadd=.lisp,cl path=/home/mikael/hacking/lisp/**
" This allows [d [i [D [I work across files if an ASDF buffer is opened
" If I used load, it would be there too.
setlocal include=(:file\
"-------------------------------------------------------------------
" reset to previous values
"-------------------------------------------------------------------
let s:save_cpo = &cpo
set cpo&vim
let b:undo_ftplugin = "setlocal syntax< lisp< ls< bs< si< et< sw< "
\ . "ts< tw< complete< nocursorline< nocompatible< statusline< iskeyword< "
\ . "cpoptions< foldmethod< foldmarker< foldminlines< "
\ . "suffixesadd< path< include< "
let &cpo = s:save_cpo
unlet s:save_cpo
"------------- boot!
call LimpMode_start()

View File

@@ -1,308 +0,0 @@
"
" limp/vim/sexp.vim
"
" URL:
" http://mikael.jansson.be/hacking
"
" Description:
" Things to help you out with s-exps.
"
" Version:
" 0.2
"
" Date:
" 2008-04-20
"
" Authors:
" Mikael Jansson <mail@mikael.jansson.be>
"
" Changelog:
" 2008-04-20
" * Initial version.
" * Based on ViLisp.vim by Larry Clapp <vim@theclapp.org>
" Mark Top: mark visual block
nnoremap <buffer> <Plug>MarkTop 99[(V%
" Format Current: reindent/format
" Format Top:
nnoremap <buffer> <Plug>FormatCurrent [(=%`'
nnoremap <buffer> <Plug>FormatTop 99[(=%`'
" Sexp Wrap: wrap the current form in a list
" Sexp Peel: peel a list off the current form
nnoremap <silent> <buffer> <Plug>SexpWrap :call Cursor_push()<CR>[(%a)<ESC>h%i(<ESC>:call Cursor_pop()<CR>
nnoremap <silent> <buffer> <Plug>SexpPeel :call Cursor_push()<CR>[(:call Cursor_push()<CR>%x:call Cursor_pop()<CR>x:call Cursor_pop()<CR>
" Sexp Previous: navigate to previous s-exp
" Sexp Next: navigate to previous s-exp
nnoremap <silent> <buffer> <Plug>SexpPrevious :call Sexp_Previous()<CR>
nnoremap <silent> <buffer> <Plug>SexpNext :call Sexp_Next()<CR>
" Sexp Move Back: swap this and previous s-exp
" Sexp Move Forward: swap this and next s-exp
nnoremap <silent> <buffer> <Plug>SexpMoveBack :call Sexp_MoveBack()<CR>
nnoremap <silent> <buffer> <Plug>SexpMoveForward :call Sexp_MoveForward()<CR>
" Sexp Comment: comment all the way from the top level
nnoremap <silent> <buffer> <Plug>SexpComment :call Cursor_push()<CR>99[(%a\|#<ESC>hh%i#\|<ESC>:call Cursor_pop()<CR>
" Sexp Comment Current: comment current form
nnoremap <silent> <buffer> <Plug>SexpCommentCurrent :call Cursor_push()<CR>[(%a\|#<ESC>hh%i#\|<ESC>:call Cursor_pop()<CR>
"-------------------------------------------------------------------
fun! Sexp_Next()
let [l, c] = Sexp_get_Next()
call cursor(l, c)
endfun
fun! Sexp_Previous()
let [l, c] = Sexp_get_Previous()
if l == 0 && c == 0
return
endif
call cursor(l, c)
return
endfun
" return the position of the next s-exp
fun! Sexp_get_Next()
return searchpos('(', 'nW')
endfun
" return the position of the previous s-exp
fun! Sexp_get_Previous()
let p = getpos(".")
" If outside of *any* s-exps, move to the previous s-exp first.
let [l, c] = searchpairpos('(', '', ')', 'bnW')
if l == 0 && c == 0
call searchpos(')', 'Wb')
endif
" now, move to the start of this s-exp, wherever it may be.
let [l, c] = searchpos('(', 'Wnb')
call setpos(".", p)
return [l, c]
endfun
"XXX: MoveBack/MoveForward share much code
fun! Sexp_MoveBack()
" Inside an s-exp?
let [l, c] = searchpairpos('(', '', ')', 'bcnW')
if l == 0 || c == 0
" Nope,
return
endif
silent! let regs = @*
" mark the start of this s-exp
silent! norm! yl
if @0 != "("
call Sexp_Previous()
endif
"
" Find out if the previous s-exp is the parent of the current
"
" This by searching to the previous s-exp, doing a % and checking either
" of the following conditions:
"
" * prev_line2 == this_line2 && prev_col2 > this_col2
" * prev_line2 > this_line2
"
" where prev_line2/prev_col2 = the ) of the previous match, and
" this_line2/this_col2 = the ) of the current s-exp.
"
" so we can get back.
silent! norm! ma
let [b, this_line1, this_col1, o] = getpos('.')
" where does the *current* s-exp end?
silent! norm! %
let [b, this_line2, this_col2, o] = getpos('.')
silent! norm! %
" where does the previous s-exp end?
call Sexp_Previous()
silent! norm! mb
let [b, prev_line1, prev_col1, o] = getpos('.')
silent! norm! %
let [b, prev_line2, prev_col2, o] = getpos('.')
if (prev_line2 == this_line2 && prev_col2 > this_col2) || (prev_line2 > this_line2)
" For now, just do nothing
echom "Error: Trying to transpose s-exp backwards with parent."
silent! norm! `a
return
endif
" --------------------------------------------------------
" get the s-exps
silent! norm! `a
silent! norm! "ayab
silent! norm! `b
silent! norm! "byab
" copy and replace current s-exp with whitespace
let @c = Fill(" ", len(@b))
let @d = Fill(" ", len(@a))
silent! norm! `a"_dab
silent! norm! `a"cP
silent! norm! `b"_dab
silent! norm! `b"dP
if this_line1 == prev_line1
let diff = len(@a) - len(@b)
if diff > 0
let movement = ''.diff.'l'
elseif diff < 0
let movement = ''.(-diff).'h'
else
let movement = ''
endif
silent! norm! `b"aPl
silent! exe 'norm! '.len(@a).'x'
silent! exe 'norm! `a'.movement.'"bPl'
silent! exe 'norm! '.len(@b).'x'
silent! norm! `b
else
" different lines, so a simple paste will do
silent! norm! `a"bP
silent! exe 'norm! l'.len(@a).'x'
silent! norm! `b"aP
silent! exe 'norm! l'.len(@b).'x'
silent! norm! `b
endif
silent! let @* = regs
endfun
fun! Sexp_MoveForward()
" Inside an s-exp?
let [l, c] = searchpairpos('(', '', ')', 'bcnW')
if l == 0 || c == 0
" Nope,
return
endif
silent! let regs = @*
" mark the start of this s-exp
silent! norm! yl
if @0 != "("
call Sexp_Previous()
endif
"
" Find out if the next s-exp is the parent of the current.
"
" Search for the next ')', then see where the matching '(' ends.
" Check for any of the following conditions.
"
" * prev_line1 == this_line1 && prev_col1 < this_col1
" * prev_line1 < this_line1
"
" where prev_line1/prev_col1 = the ( of the previous match, and
" this_line1/this_col1 = the ( of the current s-exp.
"
" so we can get back.
silent! norm! ma
let [b, this_line1, this_col1, o] = getpos('.')
" where does the *current* s-exp end?
silent! norm! %
let [b, this_line2, this_col2, o] = getpos('.')
" where does the next s-exp end?
call search(')', 'W')
let [b, prev_line2, prev_col2, o] = getpos('.')
silent! norm! %
silent! norm! mb
let [b, prev_line1, prev_col1, o] = getpos('.')
if (prev_line1 == this_line1 && prev_col1 < this_col1) || (prev_line1 < this_line1)
" For now, just do nothing
echom "Error: Trying to transpose s-exp forward with parent."
silent! norm! `a
return
endif
" --------------------------------------------------------
" get the s-exps
silent! norm! `a
silent! norm! "ayab
silent! norm! `b
silent! norm! "byab
" copy and replace current s-exp with whitespace
let @c = Fill(" ", len(@b))
let @d = Fill(" ", len(@a))
silent! norm! `b"_dab
silent! norm! `b"dP
silent! norm! `a"_dab
silent! norm! `a"cP
if this_line1 == prev_line1
let diff = len(@a) - len(@b)
if diff > 0
let movement = ''.diff.'h'
elseif diff < 0
let movement = ''.(-diff).'l'
else
let movement = ''
endif
silent! norm! `a"bPl
silent! exe 'norm! '.len(@b).'x'
silent! exe 'norm! `b'.movement.'"aPl'
silent! exe 'norm! '.len(@a).'x'
silent! exe 'norm! `b'.movement
else
" different lines, so a simple paste will do
silent! norm! `a"bP
silent! exe 'norm! l'.len(@a).'x'
silent! norm! `b"aP
silent! exe 'norm! l'.len(@b).'x'
silent! norm! `b
endif
silent! let @* = regs
endfun
fun! Fill(c, n)
let s = ""
let n = a:n
while n > 0
let s = s.a:c
let n = n-1
endwhile
return s
endfun

File diff suppressed because it is too large Load Diff