关于更适合中文用户、更适合非编程用户的vim的讨论(1、2)终于取得了一点实质性结果:支持非等款字体、支持金山词霸、有道词典取词的 windows gvim.exe v7.3 终于出现了。感谢 Dieken、湖间小筑的技术研究、动手制作。
一、gvim的屏幕取词
问题描述:
Windows下,金山词霸、有道词典启用屏幕取词功能,但在gvim窗口中无法取词,或不能准确地取出完整单词。
原因分析:
程序沟通问题。
跨平台、跨语言的gvim考虑了更复杂的情况(但没有区分):并非所有文字都是从左向右阅读,某些语言会从右向左,如阿拉伯语等。而金山词霸、有道未充分考虑此情况。
Dieken @ newsmth,2007-01-29, via
gvim 7.0.188 版本 gui_w32.c:gui_mch_draw_string():2255 这两行判断太严格了:
if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
foptions |= ETO_IGNORELANGUAGE;这个是为了 Hebrew 和 Arabic 文本加的,但是并没有加这个的判断, 我用
if (
#ifdef FEAT_RIGHTLEFT
curwin->w_p_rl &&
#endif
os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
foptions |= ETO_IGNORELANGUAGE;
实验了一下,在有两个窗口,一个没有设置 rightleft,一个设置了rightleft,当光标处于后者时,还是不能取词,需要光标挪到没有设置 rightleft 的窗口内才行,这个问题还不知道怎么改,交给邮件列表处理。对于大多数人来说,不会用到 rightleft 特性,所以可以直接把那两句注释掉,然后就可以正常取词了。
二、gvim支持非等款字体
说明一:gvim 并非不能支持非等宽字体,而是在编译时,默认忽略了非等宽字体(Ignore non-monospace fonts without further ado)。在多个平台中,gtk2下的gvim是默认支持非等宽字体的,其他平台默认不支持。
说明二:无论字体是否等宽,vim都会重新对齐。即显示效果仍然是等宽的。因此,『支持非等宽字体』的gvim,可以换用更丰富的字体,并不可以得到非等宽效果。
解决办法一:非等宽字体编译时加 -DFEAT_PROPORTIONAL_FONTS 就可以了。make 的时候加一个参数。[via milksea @ newsmth](这2句话是同一回事吗?哪位帮助整理成更准确、书面语的表述?)
解决办法二:修改源代码,取消对非等宽字体的忽略。比如,在 os_mswin.c 中查找mono,会看到一处注释说忽略非等宽字体(Ignore non-monospace fonts without further ado),把下面一行注释掉即可。via
三、下载及讨论
支持非等宽字体、支持屏幕取词的 gvim.exe v7.3 下载,及相关讨论,敬请访问
让win下的vim支持非等宽字体|湖间小筑
====
(完。初稿2007-01-23;更新2009-02-06;更新2009-05-07;更新2010-09-19)>
《 “支持非等宽字体、屏幕取词的gvim v7.3” 》 有 20 条评论
支持一下,希望其它功能也能陆续实现,功德无量!
支持!确实是功德无量的大好事。
打个包就完美了 :)
希望能看到完美的适用性高的vim
爽了,呵呵
对于非等宽字体的修改,并不是在os_win.c里面,而是os_mswin.c
(xbeta注:多谢,本文已改正。
另对非等宽字体一节补充了更多信息。)
没注意,在文章里写错了,已经改正了,谢谢指正~
说明二:无论字体是否等宽,vim都会重新对齐。即显示效果仍然是等宽的。因此,『支持非等宽字体』的gvim,可以换用更丰富的字体,并不可以得到非等宽效果。
————————————————————————
即便是用了非等宽的字体,效果还是等宽的,很多字母重叠在一起,效果反而更差了
VIM根本不支持非等宽的,主要为了计算方便,特别是换行的时候,支持非等宽字体会浪费额外的内存。
那这个版本的所谓「支持非等宽字体」意义何在?
这个仅仅是说我可以显示了,但是你输入i和M的宽度是一样的,看起来会很丑,基本上没人会用的
的确没什么用,强制显示很难看;
自己合并个等宽字体用好了。
使用非等宽中文字体,在 Makefile 中加 -DFEAT_PROPORTIONAL_FONTS 选项:
o Make_ming.mak 在
# See feature.h for a list of options.
# Any other defines can be included here.
之后的
DEFINES=-DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
-DHAVE_PATHDEF -DFEAT_$(FEATURES)
之后插入
DEFINES+=-DFEAT_PROPORTIONAL_FONTS
o Make_mvc.mak 在
INCL = vim.h os_win32.h ascii.h feature.h globals.h keymap.h macros.h
proto.h option.h structs.h term.h $(SNIFF_INCL) $(CSCOPE_INCL)
$(NBDEBUG_INCL)
前插入
CFLAGS = $(CFLAGS) -DFEAT_PROPORTIONAL_FONTS
不用修改源代码。
[…] “支持非等宽字体、屏幕取词的gvim v7.3” 一文,以及水木社区VIM版对屏幕取词和重新编译的相关讨论,修改 […]
我编译了个 gvim for win32, 与官方版的不同有以下几点:
* 使用 mingw32 编译
* 使用目前最新版(7.3.75)的 vim 源代码编译
* 支持非等宽字体
* 用 :set guifont=* 打开的字体选择对话框中的字体列表包含非等宽字体
* 关闭不常用的 ole, xpm_w32 特性, 由于关闭了 ole 特性, 所以可以作绿色软件使用
* 关闭 arabic, farsi, rightleft 特性, 以支持金山词霸等的屏幕取词
* 解决了 encoding 设置为 utf-8 时使用如 :!echo 中文 命令的乱码问题
* 解决了 encoding 设置为 utf-8 时气泡提示的乱码问题
* 打开了 lua/dyn 特性
* 使用目前最新版的 python, python3, perl, tcl, lua, ruby 编译 vim 的相应支持:
* python-2.7.1
* python-3.1.3
* ActivePerl-5.12.2.1202-MSWin32-x86-293621
* ActiveTcl8.5.9.1.294121-win32-ix86-threaded
* lua-5.1.4
* rubyinstaller-1.9.2-p0
链接: http://public.bay.livefilestore.com/y1pln3qRYglWUtX7zyFBkypFeGeKJ1crLRxeLKRqk9dhrjM7VI6VFxs1dfD36eiLgyTh-FHDHwxcO_WXPCbUm_o9A/vim73.zip
to 楼上, 支持屏幕取词的就支持 gdi++ 了
我也遇到了上面所说的编码的问题,在GVIM中如果使用正常的编码,虽然字体比较好看,但是无法执行带有中文字的外部命令文件了。而上面所提到的编译后的gvim又无法下载(链接已失效),是否作者又有了新的版本?希望能提供下载地址给我。
http://storage.live.com/items/77BF089510416203!203?filename=vim73.zip
试试这个链接吧
@Lane East,
谢谢,刚看到,正在下载。
Lane East 朋友编译的版本哪里还有下载?所提供的地址不能下载了。。。
目前用不到这方面的知识,刚开始学习Gvim,只能算是刚入门而已,只是在研究功能,以后再潜心扩展吧!
[…] 下 hg clone https://vim.googlecode.com/hg/vimhg pullhg update参考了善用佳软 “支持非等宽字体、屏幕取词的gvim v7.3” 一文,以及水木社区VIM版对屏幕取词和重新编译的相关讨论,修改 […]