-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3af7b4b
Showing
43 changed files
with
4,555 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# VimClojure - Easy | ||
This is a sample configuration for VimClojure to hopefully make the process of getting and using VimClojure more straightforward. It is basically a complete vim configuration with VimClojure and nothing else installed. It should be a good sanity check for setting everything up. | ||
|
||
## Install | ||
If you have an existing vim configuration, first move it out of the way. You can bring it back in after you feel like VimClojure's working for you. | ||
|
||
$ cd | ||
$ mv .vim .vim.bak | ||
$ mv .vimrc .vimrc.bak | ||
$ mv .gvimrc .gvimrc | ||
|
||
Now clone this repo into .vim and set it up: | ||
|
||
$ cd | ||
$ git clone ... .vim | ||
$ ln -s .vim/vimrc .vimrc | ||
$ make -C .vim/lib/vimclojure-nailgun-client | ||
|
||
*Note that if you're on Windows, you might need to adjust the NailgunClient setting in vimrc.vim* | ||
|
||
## First Test - Syntax Highlight and Stuff | ||
|
||
Now open a Clojure file just to see if the plugin's basically working. Conveniently, there's one in this repo: | ||
|
||
$ cd | ||
$ vim .vim/piglatin.clj | ||
|
||
You should see the syntax highlighted source code as well as an error window telling you that VimClojure couldn't find the nailgun server. That's our next step. | ||
|
||
If syntax highlighting doesn't work, make sure `.vim` is in your home directory and `~/.vimrc` is a symlink to `~/.vim/vimrc.vim`. | ||
|
||
## Starting the Nailgun Server | ||
|
||
Now we want to get to the serious stuff. We'll need to start a nailgun server to get the most use out of VimClojure. There are (at least) two options. If you're using `leiningen`, install the `lein-nailgun` plugin, create a project, and run the plugin: | ||
|
||
$ lein plugin install org.clojars.ibdknox/lein-nailgun "1.1.1" | ||
$ lein new nailgun-test | ||
$ cd nailgun-test | ||
$ lein nailgun | ||
Copying 1 file to /Users/dave/Documents/projects/nailgun-test/lib | ||
NGServer started on 127.0.0.1, port 2113. | ||
|
||
or, run the server manually with the jar in this install: | ||
|
||
$ java -cp server-2.3.0.jar:/path/to/clojure-x.y.z.jar vimclojure.nailgun.NGServer | ||
NGServer started on all interfaces, port 2113. | ||
|
||
Note that in this case you have to provide the *absolute* path to a Clojure jar. | ||
|
||
## Second Test - The REPL | ||
|
||
Now that our nailgun server is running, start up vim again and run the `:ClojureRepl` command. The vim screen will split and you'll see a new Clojure REPL. Try it out. Tricks worth knowing: | ||
|
||
* `,close` to exit, or just `<esc>:q` | ||
* If you're cursor's in the middle of a command, hit `ctrl-enter` to execute the command without having to jump to the end of the line first | ||
* `,st` gives the last stack trace | ||
|
||
See vimclojure.txt for more info. | ||
|
||
## Third Test - Code | ||
|
||
Now try editing a file with the nailgun server running: | ||
|
||
$ cd ~/.vim | ||
$ vim piglatin.clj | ||
|
||
Hit `\ef` to evaluate the file. VimClojure will open a split window to show the result: | ||
|
||
; Use \p to close this buffer! | ||
#'user/vowel? | ||
#'user/pig-latin | ||
"ellohay" | ||
"imclojurevay" | ||
|
||
Put your curson on the `(set` on line 2 and hit `\lw`. VimClojure with show the docs for `set`. | ||
|
||
Now go read vimclojure.txt. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,230 @@ | ||
" pathogen.vim - path option manipulation | ||
" Maintainer: Tim Pope <http://tpo.pe/> | ||
" Version: 2.0 | ||
|
||
" Install in ~/.vim/autoload (or ~\vimfiles\autoload). | ||
" | ||
" For management of individually installed plugins in ~/.vim/bundle (or | ||
" ~\vimfiles\bundle), adding `call pathogen#infect()` to your .vimrc | ||
" prior to `fileype plugin indent on` is the only other setup necessary. | ||
" | ||
" The API is documented inline below. For maximum ease of reading, | ||
" :set foldmethod=marker | ||
|
||
if exists("g:loaded_pathogen") || &cp | ||
finish | ||
endif | ||
let g:loaded_pathogen = 1 | ||
|
||
" Point of entry for basic default usage. Give a directory name to invoke | ||
" pathogen#runtime_append_all_bundles() (defaults to "bundle"), or a full path | ||
" to invoke pathogen#runtime_prepend_subdirectories(). Afterwards, | ||
" pathogen#cycle_filetype() is invoked. | ||
function! pathogen#infect(...) abort " {{{1 | ||
let source_path = a:0 ? a:1 : 'bundle' | ||
if source_path =~# '[\\/]' | ||
call pathogen#runtime_prepend_subdirectories(source_path) | ||
else | ||
call pathogen#runtime_append_all_bundles(source_path) | ||
endif | ||
call pathogen#cycle_filetype() | ||
endfunction " }}}1 | ||
|
||
" Split a path into a list. | ||
function! pathogen#split(path) abort " {{{1 | ||
if type(a:path) == type([]) | return a:path | endif | ||
let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,') | ||
return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")') | ||
endfunction " }}}1 | ||
|
||
" Convert a list to a path. | ||
function! pathogen#join(...) abort " {{{1 | ||
if type(a:1) == type(1) && a:1 | ||
let i = 1 | ||
let space = ' ' | ||
else | ||
let i = 0 | ||
let space = '' | ||
endif | ||
let path = "" | ||
while i < a:0 | ||
if type(a:000[i]) == type([]) | ||
let list = a:000[i] | ||
let j = 0 | ||
while j < len(list) | ||
let escaped = substitute(list[j],'[,'.space.']\|\\[\,'.space.']\@=','\\&','g') | ||
let path .= ',' . escaped | ||
let j += 1 | ||
endwhile | ||
else | ||
let path .= "," . a:000[i] | ||
endif | ||
let i += 1 | ||
endwhile | ||
return substitute(path,'^,','','') | ||
endfunction " }}}1 | ||
|
||
" Convert a list to a path with escaped spaces for 'path', 'tag', etc. | ||
function! pathogen#legacyjoin(...) abort " {{{1 | ||
return call('pathogen#join',[1] + a:000) | ||
endfunction " }}}1 | ||
|
||
" Remove duplicates from a list. | ||
function! pathogen#uniq(list) abort " {{{1 | ||
let i = 0 | ||
let seen = {} | ||
while i < len(a:list) | ||
if has_key(seen,a:list[i]) | ||
call remove(a:list,i) | ||
else | ||
let seen[a:list[i]] = 1 | ||
let i += 1 | ||
endif | ||
endwhile | ||
return a:list | ||
endfunction " }}}1 | ||
|
||
" \ on Windows unless shellslash is set, / everywhere else. | ||
function! pathogen#separator() abort " {{{1 | ||
return !exists("+shellslash") || &shellslash ? '/' : '\' | ||
endfunction " }}}1 | ||
|
||
" Convenience wrapper around glob() which returns a list. | ||
function! pathogen#glob(pattern) abort " {{{1 | ||
let files = split(glob(a:pattern),"\n") | ||
return map(files,'substitute(v:val,"[".pathogen#separator()."/]$","","")') | ||
endfunction "}}}1 | ||
|
||
" Like pathogen#glob(), only limit the results to directories. | ||
function! pathogen#glob_directories(pattern) abort " {{{1 | ||
return filter(pathogen#glob(a:pattern),'isdirectory(v:val)') | ||
endfunction "}}}1 | ||
|
||
" Turn filetype detection off and back on again if it was already enabled. | ||
function! pathogen#cycle_filetype() " {{{1 | ||
if exists('g:did_load_filetypes') | ||
filetype off | ||
filetype on | ||
endif | ||
endfunction " }}}1 | ||
|
||
" Checks if a bundle is 'disabled'. A bundle is considered 'disabled' if | ||
" its 'basename()' is included in g:pathogen_disabled[]' or ends in a tilde. | ||
function! pathogen#is_disabled(path) " {{{1 | ||
if a:path =~# '\~$' | ||
return 1 | ||
elseif !exists("g:pathogen_disabled") | ||
return 0 | ||
endif | ||
let sep = pathogen#separator() | ||
return index(g:pathogen_disabled, strpart(a:path, strridx(a:path, sep)+1)) != -1 | ||
endfunction "}}}1 | ||
|
||
" Prepend all subdirectories of path to the rtp, and append all 'after' | ||
" directories in those subdirectories. | ||
function! pathogen#runtime_prepend_subdirectories(path) " {{{1 | ||
let sep = pathogen#separator() | ||
let before = filter(pathogen#glob_directories(a:path.sep."*"), '!pathogen#is_disabled(v:val)') | ||
let after = filter(pathogen#glob_directories(a:path.sep."*".sep."after"), '!pathogen#is_disabled(v:val[0:-7])') | ||
let rtp = pathogen#split(&rtp) | ||
let path = expand(a:path) | ||
call filter(rtp,'v:val[0:strlen(path)-1] !=# path') | ||
let &rtp = pathogen#join(pathogen#uniq(before + rtp + after)) | ||
return &rtp | ||
endfunction " }}}1 | ||
|
||
" For each directory in rtp, check for a subdirectory named dir. If it | ||
" exists, add all subdirectories of that subdirectory to the rtp, immediately | ||
" after the original directory. If no argument is given, 'bundle' is used. | ||
" Repeated calls with the same arguments are ignored. | ||
function! pathogen#runtime_append_all_bundles(...) " {{{1 | ||
let sep = pathogen#separator() | ||
let name = a:0 ? a:1 : 'bundle' | ||
if "\n".s:done_bundles =~# "\\M\n".name."\n" | ||
return "" | ||
endif | ||
let s:done_bundles .= name . "\n" | ||
let list = [] | ||
for dir in pathogen#split(&rtp) | ||
if dir =~# '\<after$' | ||
let list += filter(pathogen#glob_directories(substitute(dir,'after$',name,'').sep.'*[^~]'.sep.'after'), '!pathogen#is_disabled(v:val[0:-7])') + [dir] | ||
else | ||
let list += [dir] + filter(pathogen#glob_directories(dir.sep.name.sep.'*[^~]'), '!pathogen#is_disabled(v:val)') | ||
endif | ||
endfor | ||
let &rtp = pathogen#join(pathogen#uniq(list)) | ||
return 1 | ||
endfunction | ||
|
||
let s:done_bundles = '' | ||
" }}}1 | ||
|
||
" Invoke :helptags on all non-$VIM doc directories in runtimepath. | ||
function! pathogen#helptags() " {{{1 | ||
let sep = pathogen#separator() | ||
for dir in pathogen#split(&rtp) | ||
if (dir.sep)[0 : strlen($VIMRUNTIME)] !=# $VIMRUNTIME.sep && filewritable(dir.'/doc') == 2 && !empty(glob(dir.'/doc/*')) && (!filereadable(dir.'/doc/tags') || filewritable(dir.'/doc/tags')) | ||
helptags `=dir.'/doc'` | ||
endif | ||
endfor | ||
endfunction " }}}1 | ||
|
||
command! -bar Helptags :call pathogen#helptags() | ||
|
||
" Like findfile(), but hardcoded to use the runtimepath. | ||
function! pathogen#rtpfindfile(file,count) "{{{1 | ||
let rtp = pathogen#join(1,pathogen#split(&rtp)) | ||
return fnamemodify(findfile(a:file,rtp,a:count),':p') | ||
endfunction " }}}1 | ||
|
||
function! s:find(count,cmd,file,...) " {{{1 | ||
let rtp = pathogen#join(1,pathogen#split(&runtimepath)) | ||
let file = pathogen#rtpfindfile(a:file,a:count) | ||
if file ==# '' | ||
return "echoerr 'E345: Can''t find file \"".a:file."\" in runtimepath'" | ||
elseif a:0 | ||
let path = file[0:-strlen(a:file)-2] | ||
execute a:1.' `=path`' | ||
return a:cmd.' '.fnameescape(a:file) | ||
else | ||
return a:cmd.' '.fnameescape(file) | ||
endif | ||
endfunction " }}}1 | ||
|
||
function! s:Findcomplete(A,L,P) " {{{1 | ||
let sep = pathogen#separator() | ||
let cheats = { | ||
\'a': 'autoload', | ||
\'d': 'doc', | ||
\'f': 'ftplugin', | ||
\'i': 'indent', | ||
\'p': 'plugin', | ||
\'s': 'syntax'} | ||
if a:A =~# '^\w[\\/]' && has_key(cheats,a:A[0]) | ||
let request = cheats[a:A[0]].a:A[1:-1] | ||
else | ||
let request = a:A | ||
endif | ||
let pattern = substitute(request,'\'.sep,'*'.sep,'g').'*' | ||
let found = {} | ||
for path in pathogen#split(&runtimepath) | ||
let matches = split(glob(path.sep.pattern),"\n") | ||
call map(matches,'isdirectory(v:val) ? v:val.sep : v:val') | ||
call map(matches,'v:val[strlen(path)+1:-1]') | ||
for match in matches | ||
let found[match] = 1 | ||
endfor | ||
endfor | ||
return sort(keys(found)) | ||
endfunction " }}}1 | ||
|
||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Ve :execute s:find(<count>,'edit<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vedit :execute s:find(<count>,'edit<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vsplit :execute s:find(<count>,'split<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vvsplit :execute s:find(<count>,'vsplit<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vtabedit :execute s:find(<count>,'tabedit<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vpedit :execute s:find(<count>,'pedit<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vread :execute s:find(<count>,'read<bang>',<q-args>) | ||
command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vopen :execute s:find(<count>,'edit<bang>',<q-args>,'lcd') | ||
|
||
" vim:set ft=vim ts=8 sw=2 sts=2: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
Copyright 2008-2011 (c) Meikel Brandmeyer. | ||
All rights reserved. | ||
|
||
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. |
Oops, something went wrong.