vim unicode bufread / bufwrite脚本

时间:2010-04-21 11:11:30

标签: vim unicode

问题:

我希望我的unicode字符存储在磁盘上(而不是tan utf8 / 16编码)

\u####

但是,我希望他们在vim中打开时显示为unicode字符。

我认为最简单的方法是自动执行一些bufopen / bufwrite脚本:

on opening, convert \u#### to unicode character

on writing, convert unicode characters into \u####

但是,我不知道要调用什么函数来实现这一点。有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

我为你制作了这个插件!

http://www.vim.org/scripts/script.php?script_id=909

用于使用unicode代码编辑文件的Vim文件插件。

它将所有代码更改为重音字符以供查看,并在编写时将所有重音字符转换为代码。

e.g。它在查看时更改为é,并在写入时放置\ u00E9(java样式编码)。设置g:ucs_encode_java(在.vimrc文件中)

默认情况下,它适用于Unicode Latin-1补充中的所有重音字符,但您可以根据需要快速更改它。

您还可以将其设置为使用html编码(& #nnn;)。设置g:ucs_encode_html(在.vimrc文件中)

您也可以将其设置为将重音字符转换为八进制编码(\ 340)。在你的设置中设置g:ucs_encode_octal .vimrc文件

罗杰

答案 1 :(得分:1)

您需要一个外部工具来转换这两种格式。我推荐Bill Poser的uni2ascii

$ echo täßt | uni2ascii -q -a L
t\u00E4\u00DFt
$ echo täßt | uni2ascii -q -a L | ascii2uni -q -a L
täßt

然后你必须告诉Vim使用那个过滤器。这只是最基本的方法(我对vim脚本的那部分不擅长):

autocmd BufNewFile,Bufread *.u :%!ascii2uni -q -a L
autocmd BufWritePre        *.u :%!uni2ascii -q -a L
autocmd BufWritePost       *.u :%!ascii2uni -q -a L

将文件名模式更改为适合您的情况。

文档中包含的相关问题有一个更高级的示例::help hex-editing。可以在Vim wiki中找到对此方法的讨论和更好的解决方案。