Vim以编程方式保存不同的文件扩展名

时间:2012-09-09 21:55:23

标签: bash vim

我正在Vim中编写苗条文件,我希望它们在我保存时编译并另存为html文件。将此添加到我的.vimrc会使当前目录中的文件发生:

au BufWritePost *.slim silent !slimrb % > $(echo % | cut -d'.' -f1).html

由于cut命令将其转换为具有../file.slim之类路径的文件,因此不起作用 ./file.slim

我需要使用parameter expansions,但在Vim中执行外部命令时,%字符是为当前文件路径保留的。

如何将精简文件编译并保存到html文件,而不管文件的目录是什么?

2 个答案:

答案 0 :(得分:1)

我意识到我可以使用%:r修剪Vim中的扩展名。要自动编译并将slim文件保存为html文件,我使用

au BufWritePost *.slim silent !slimrb % > %:r.html

答案 1 :(得分:1)

au BufWritePost *.slim :silent call system('slimrb '.shellescape(expand('%')).' > '.shellescape(expand('%:r').'.html'))

。在gvim中,文件名不包含特殊字符,这就像silent !slimrb % > %:r.html一样,但在终端vim中它不会使屏幕空白(silent不会阻止这种情况),并且当文件名包含除换行符之外的任何特殊字符时起作用。要处理换行,您必须使用以下内容:

au BufWritePost *.slim :execute 'silent !slimrb' shellescape(@%, 1) '>' shellescape(expand('%:r').'.html', 1) | redraw!

或编写自定义shellescape功能。