Sto provando a fare un codice piuttosto che il filtro della stampante (ad esempio perltidy) accetta opzioni arbitrarie a seconda delle variabili vim. Il mio obiettivo è passare le opzioni specifiche del progetto a un comando esterno utilizzato come filtro (:!) In modalità visiva.Come utilizzare le variabili vim in un comando di filtro esterno in modalità visiva?
Di seguito esprime la mia intenzione (l'ultima riga è problematica):
" set b:perltidy_options based on dirname of the currently edited file
function! SetProjectVars()
if match(expand("%:p:h"), "/project-foo/") >= 0
let b:perltidy_options = "--profile=$HOME/.perltidyrc-foo --quiet"
elseif match(expand("%:p:h"), "/project-bar/") >= 0
let b:perltidy_options = "--profile=$HOME/.perltidyrc-bar --quiet"
else
let b:perltidy_options = "--quiet"
endif
endfunction
" first set the project specific stuff
autocmd BufRead,BufNewFile * call SetProjectVars()
" then use it
vnoremap ,t :execute "!perltidy " . b:perltidy_options<Enter>
Tuttavia, l'ultima riga (vnoremap) è un errore in vim, perché si espande a:
:'<,'>execute "!perltidy " . b:perltidy_options
e il comando execute non può accettare un intervallo. Ma mi piacerebbe avere questo:
:execute "'<,'>!perltidy " . b:perltidy_options
Come posso fare questo?
p.s. Il mio perltidy è configurato per agire come un filtro unix e io uso vim 7.3.