当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : TxtBrowser现在可以正常处理Windows下文件名带中文字符的标题标签
帖子发表于 : 2010-02-21 13:30 

注册: 2010-01-05 22:47
帖子: 23
送出感谢: 0 次
接收感谢: 0 次
以下文字摘自TxtBrowser最新版(v1.1.7)的帮助文档(用:help txt-faqs查看详请), 谢谢
xbeta的大力帮助.

6.2 在Window下taglist不能正常处理带中文字符的文件名

问: Windows操作系统下如果路径或文件名里有中文字符, taglist不能正常显示

答: 这是taglist的问题, 最简单的解决办法是下载附件里修正的taglist.vim(基于v4.5),
替换你正在使用的taglist.vim, 如果你熟悉diff和patch命令, 也可以用后面给出的diff
自己修改你的taglist.vim文件.

Windows操作系统下不能正确显示taglist是由下面两个原因引起的, 下面是是问题分析和
用于修改的diff文件(基于taglist.vim v4.5):

1) taglist.vim在从版本4.1升级到4.2的过程中, 加了一个逻辑: Windows下, taglist不
是直接把命令传给cmd, 而是先写到一个临时文件, 再执行这个临时文件, 这是引起命令
不能正确解析的主要原因, 放心把这部分删掉就可以了, 应该不会引起什么问题(谁遇到
问题请报告给我, 谢谢).

2) 如果你用enc=utf8做为默认的编码方式, 由于Windows系统默认使用cp936编码, 所以
taglist在给ctags传送命令的时候会把中文路径名解释成乱码, 所以引起不能正确处理中
文路径名. 解决的办法为在传送命令给给Windows命令行之前加一个iconv()函数先转换一
下, 将编码方式转换成Windows可接受的cp936编码, 就可以正常工作了.

但是由于在管在Windows下, 还是在Linux下, 都是拿enc的值传给操作系统, 而操作系统
只接受fenc的编码格式, 所以要想让你的中文标题能在taglist里正确显示, 请确保文件
的enc和fenc的值是一样的. 其实可以做到不一样, 在处理前拿iconv()函数转换一下就可
以了, 只是这个我还没有来的及研究, 可能会在下一个版本研究下, 到时候再给大家发布
. 大家先忍忍吧:-)欢迎提供技术支持.

也可以直接patch下面的diff解决这个问题(基于taglist.vim v4.5):
|
|Index: taglist.vim
|===================================================================
|RCS file: /cygdrive/d/cvsroot/docu/script/vim/taglist/taglist.vim,v
|retrieving revision 1.1.1.1
|diff -u -p -r1.1.1.1 taglist.vim
|--- taglist.vim 13 Mar 2009 04:16:54 -0000 1.1.1.1
|+++ taglist.vim 19 Feb 2010 11:01:04 -0000
|@@ -2264,8 +2264,7 @@ function! s:Tlist_Process_File(filename,
| set noshellslash
| endif
|
|- if has('win32') && !has('win32unix') && !has('win95')
|- \ && (&shell =~ 'cmd.exe')
|+ if 0
| " Windows does not correctly deal with commands that have more than 1
| " set of double quotes. It will strip them all resulting in:
| " 'C:\Program' is not recognized as an internal or external command
|@@ -2285,6 +2284,11 @@ function! s:Tlist_Process_File(filename,
|
| call s:Tlist_Log_Msg('Cmd: ' . ctags_cmd)
|
|+ "win32 need pass 'cp936' characters to cmd.
|+ if has('win32') && !has('win32unix') && (&enc != 'cp936')
|+ let ctags_cmd = iconv(ctags_cmd, &enc, "cp936")
|+ endif
|+
| " Run ctags and get the tag list
| let cmd_output = system(ctags_cmd)

--
我的blog, Vim和pp:
http://guoyoooping.blog.163.com


附件:
文件注释: 这是修正后的taglist.vim(基于版本v4.5), 解压后替换原来的文件. 请事先对原文件进行备份
taglist.zip [31.05 KiB]
被下载 51 次
页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译