Estoy tratando de hacer que un código bonito filtro de impresora (por ejemplo, perltidy) acepte opciones arbitrarias según las variables vim. Mi objetivo es pasar opciones específicas del proyecto a un comando externo utilizado como filtro (:!) En modo visual.¿Cómo usar variables vim en un comando de filtro externo en modo visual?
El siguiente expresa mi intención (la última línea es problemático):
" 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>
Sin embargo, la última línea (vnoremap) es un error en vim, porque se expande a:
:'<,'>execute "!perltidy " . b:perltidy_options
y el comando de ejecución no puede aceptar un rango. Pero me gustaría tener esto:
:execute "'<,'>!perltidy " . b:perltidy_options
¿Cómo puedo hacer esto?
p.s. Mi perltidy está configurado para actuar como un filtro unix y yo uso vim 7.3.