我想要制作一个代码美化器过滤器(如perltidy),以便根据vim变量接受任意选项。我的目标是将项目特定选项传递给在可视模式下用作过滤器(:!)的外部命令。
以下是我的意图(最后一行存在问题):
然而,在vim中,最后一行(vnoremap)是一个错误,因为它会扩展成:
我该怎么做?
附注:我的 perltidy 配置成像 Unix 过滤器一样工作,我使用 vim 7.3。
以下是我的意图(最后一行存在问题):
" 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>
然而,在vim中,最后一行(vnoremap)是一个错误,因为它会扩展成:
:'<,'>execute "!perltidy " . b:perltidy_options
并且 execute 命令无法接受范围参数。但是我想要这个:
:execute "'<,'>!perltidy " . b:perltidy_options
我该怎么做?
附注:我的 perltidy 配置成像 Unix 过滤器一样工作,我使用 vim 7.3。