我喜欢使用代码清理脚本; perldidy; uglifierjs等我先前在我的vimrc中运行了这些...
map <leader>pt :!perltidy<CR>
map <leader>jt :!uglifyjs -b<CR>
map <leader>pjt :!python -mjson.tool<CR>
map <leader>ct :!column -t<CR>
这个功能如何运作;它在CLI程序中运行当前选定的文本,并用输出替换选择。工作得非常好;但正如你所看到的,我现在必须停下来思考我想要运行什么美化,并记住我所拥有的nemonic。这让我觉得必须有更好的方法。所以我试过这个......
map <leader>jt :call RunTidy()<cr>
function! RunTidy()
if (&ft == "javascript")
echo 'is js..'
:'<,'>!ulifyjs -b
endif
if (&ft == "json")
echo 'is json'
:'<,'>!python -mjson.tool
endif
endfunction
这个问题不起作用;每行执行一次而不替换内容..任何人都知道更好的方法吗?我觉得这应该是一个解决的问题...
答案 0 :(得分:2)
使用ftplugins。您需要在vimrc中使用filetype plugin indent on
。
在~/.vim/ftplugin/<filetype>.vim
中创建文件。设置文件类型时将获取这些文件。
例如,使用javascript将以下内容放入~/.vim/ftplugin/javascript.vim
noremap <buffer> <leader>jt :!uglifyjs -b<CR>
在所有javascript缓冲区中将<leader>jt
映射到:!uglifyjs -b<CR>
。这不会出现在其他文件类型中。
您将对所有其他文件类型执行相同的操作。
您可以使用setlocal
。
查看:h ftplugin
答案 1 :(得分:2)
augroup filters
autocmd!
autocmd FileType perl map <buffer> <leader>t :!perltidy<CR>
autocmd FileType javascript map <buffer> <leader>t :!uglifyjs -b<CR>
autocmd FileType json map <buffer> <leader>t :!python -mjson.tool<CR>
augroup END
或将这些映射都放在不同的~/.vim/after/ftplugin/{filetype}.vim
中。所有这些映射都使用相同的lhs。