缓冲区加载和缓冲区保存的触发命令

时间:2013-01-03 14:36:54

标签: vim

我想编写一个vim插件,在编辑器中对文本进行某些文本转换,但我不希望这些转换在文件中可见。

例如,请考虑我要编辑的文本文件中的单词Gnarly。在加载时,我希望我的vim脚本将其更改为G,但是当我保存缓冲区时,我希望它扩展回Gnarly

我的场景有点复杂,因为它涉及一个外部脚本,但我想知道如何调用它。

此外,我希望能够将此更改仅应用于基于其扩展名的某些文件。

2 个答案:

答案 0 :(得分:3)

请参阅:h autocmd。您需要的活动是BufReadBufWrite

也许你会对:h conceal感兴趣。

答案 1 :(得分:2)

首先,定义您自己的文件类型,例如gnarly。请阅读:help new-filetype了解详细信息,但基本上就是这个autocmd:

:autocmd BufRead,BufNewFile *.gnarly        set filetype=gnarly

然后,Vim 7.3中引入的隐藏功能是可行的方法。编写语法脚本~/.vim/syntax/gnarly.vim。对于您的示例,它将包含:

:syntax keyword gnarlyConceal Gnarly conceal cchar=G

但您也可以使用:syntax match来获得更复杂的模式。

最后,隐藏默认是关闭的。要打开它,请将以下命令放入~/.vim/ftplugin/gnarly.vim(您也可以将其放入语法文件中,但建议使用Vim附带的所有完整插件完成此分离):

:setlocal conceallevel=1

您也可以自定义'concealcursor'行为。如果您仍需要帮助,请查看帮助页面或使用隐藏的现有插件。