From 7b2ae78bd71d6e49e66fd4fc4f1e1af206291573 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sun, 21 Jun 2015 15:12:39 -0400 Subject: [PATCH] Add command line maps --- plugin/fireplace.vim | 72 ++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/plugin/fireplace.vim b/plugin/fireplace.vim index 359a658..11bceae 100644 --- a/plugin/fireplace.vim +++ b/plugin/fireplace.vim @@ -1336,35 +1336,51 @@ function! fireplace#findfile(path) abort return '' endfunction -function! s:GF(cmd, file) abort - if a:file =~# '^\w[[:alnum:]_/]*$' && +function! fireplace#cfile() abort + let file = expand('') + if file =~# '^\w[[:alnum:]_/]*$' && \ synIDattr(synID(line("."),col("."),1),"name") =~# 'String' let file = substitute(expand('%:p'), '[^\/:]*$', '', '').a:file.'.'.expand('%:e') - elseif a:file =~# '^[^/]*/[^/.]*$' && a:file =~# '^\k\+$' - let [file, jump] = split(a:file, "/") + elseif file =~# '^[^/]*/[^/.]*$' && file =~# '^\k\+$' + let [file, jump] = split(file, "/") if file !~# '\.' try - let file = fireplace#evalparse('((ns-aliases *ns*) '.s:qsym(file).' '.s:qsym(file).')') + let file = tr(fireplace#evalparse('((ns-aliases *ns*) '.s:qsym(file).' '.s:qsym(file).')'), '.', '/') catch /^Clojure:/ endtry endif - let file = fireplace#findfile(file) + elseif file =~# '^\w[[:alnum:]-]\+\.[[:alnum:].-]\+$' + let file = tr(file, '.', '/') + endif + if exists('jump') + return '+sil!dj\ ' . jump . ' ' . fnameescape(file) else - let file = fireplace#findfile(a:file) + return fnameescape(file) endif - if file ==# '' - let v:errmsg = "Couldn't find file for ".a:file - return 'echoerr v:errmsg' - endif - return a:cmd . - \ (exists('jump') ? ' +sil!\ djump\ ' . jump : '') . - \ ' ' . fnameescape(file) . - \ '| let &l:path = ' . string(&l:path) endfunction -nnoremap FireplaceEditFile :exe GF('edit', expand('')) -nnoremap FireplaceSplitFile :exe GF('split', expand('')) -nnoremap FireplaceTabeditFile :exe GF('tabedit', expand('')) +function! s:Find(find, edit) abort + let cfile = fireplace#cfile() + let prefix = matchstr(cfile, '^\%(+\%(\\.\|\S\)*\s\+\)') + let file = fireplace#findfile(expand(strpart(cfile, len(prefix)))) + if file =~# '^zipfile:' + let setpath = 'let\ &l:path=getbufvar('.bufnr('').",'&path')" + if prefix =~# '^+[^+]' + let prefix = substitute(prefix, '+', '\="+".setpath."\\|"', '') + else + let prefix = '+'.setpath.' '.prefix + endif + endif + if len(file) + return (len(a:edit) ? a:edit . ' ' : '') . prefix . fnameescape(file) + else + return len(a:find) ? a:find . ' ' . cfile : "\\" + endif +endfunction + +nnoremap FireplaceEditFile :exe Find('find','edit') +nnoremap FireplaceSplitFile :exe Find('sfind','split') +nnoremap FireplaceTabeditFile :exe Find('tabfind','tabedit') function! s:set_up_go_to_file() abort if expand('%:e') ==# 'cljs' @@ -1373,11 +1389,23 @@ function! s:set_up_go_to_file() abort setlocal suffixesadd=.clj,.cljc,.cljx,.cljs,.java endif + cmap