【发布时间】:2012-02-08 21:52:06
【问题描述】:
我正在尝试使代码漂亮的打印机过滤器(例如 perltidy)接受取决于 vim 变量的任意选项。我的目标是在可视模式下将项目特定选项传递给用作过滤器 (:!) 的外部命令。
以下表达我的意图(最后一行有问题):
" 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>
但是最后一行(vnoremap)在vim中是一个错误,因为它展开为:
:'<,'>execute "!perltidy " . b:perltidy_options
并且执行命令不能接受范围。 但我想要这个:
:execute "'<,'>!perltidy " . b:perltidy_options
我该怎么做?
附言我的 perltidy 被配置为像 unix 过滤器一样工作,我使用 vim 7.3。
【问题讨论】:
标签: vim