• Re: 关于中文标点禁则的一些建议

    我也是忘了在哪里看到的了,总之是一些排版时候的禁忌,不知道排版业的术语是什么。

    【 在 happyTC (沉迷于TC中) 的大作中提到: 】

    : 就是punctuation taboo的中文翻译

    : 又如typesetting taboo 就是排版禁则

    : 这样子的翻译,非常地学院化,也是中国人直接“拿”小日本的翻译

    2010-11-10
  • Re: 关于中文标点禁则的一些建议

    对这一点非常赞同,应该是要提供一个通用的框架,然后将中文纳入这个框架之中。

    edyfox 果然是牛人,对 unicode 的东西这么熟悉,学习了。等我有空的时候把这个好好研究一下。

    繁体中文的标点是居中的今天是第一次看到,查了一下,不得不佩服 edyfox 的博学。不过增加这个功能确实能够让排出来的文本块看起来更漂亮一些,即使标点居中,也比缩减当前行稍好看一些,当然这是个人品味了。另外,我看 emacs 中的断行实现中也有类似选项。textwidth 违反的问题应该没有那么严重吧,我觉得增加一个 formatoptions 标志来强制遵从 textwidth 就可以了,可以将这个标志设为默认。

    我先把这个功能去掉之后提交第一个版本,如果接纳的话再试试能不能把这个功能也提交。

    因为 vim 中以前已经对多字节字符的断行进行了处理,如果采用这种方式的话,相当于使用了一套新方法,改动可能会更大。

    这个你不说我还真不知道,等有空了搞一下。

    感谢 Bram 等造出 vim 这个好用的编辑器!我这点雕虫小技,还上不了台面。主要是最近写 tex 文档的时候再也无法忍受标点符号跑到行首的事情了。做这个 patch 主要还是解决自己用 vim 时遇到的问题,如果能够对大家有所帮助,那是最好了。

    【 在 edyfox (滇狐) 的大作中提到: 】

    : 本。因此,我们不能将这个功能定义为“中文特有”,必须拉全世界语言作为我

    : 们的垫背,这样才能名正言顺进入官方代码库。要达到这个目的,希望 yswzing

    : 能抽点时间看一下 Unicode 断行标准,然后我们按照这个标准来实现,这样就

    : 可以有非常充分的理由加入官方版本库了。

    : 再次,yswzing 实现了中文行尾悬挂的功能。但是,这个功能要想进入官方版本

    : 的话,是必须去掉的。理由有三,其一,这个功能破坏了 textwidth 的标准定

    : 义。其二,这个功能仅仅对于简体中文有意义,因为仅有简体中文规定全角标点

    : 符号放在字符渲染区域左下角,把整个右边都空出来。所有其它具有全角标点的

    : 语言包括繁体中文,标点都是居中的,行尾悬挂并不能做到像简体中文那样“让

    : 排版更美观一些”,反而会让版式很古怪。其三,行尾悬挂导致整个实现复杂不

    : 少,让测试的成本大大提高了。因此,希望 yswzing 能去掉这个功能,我理解

    : yswzing 为实现这个功能付出了不少劳动,但很多时候这是比较无奈的事情。

    : 少对已有代码进行修改,而尽可能多用已有的代码。如果我们能通过 Unicode

    : 的标准找出一段文本里存在的所有“允许拆分点”的话,断行的操作其实就可以

    : fall-back 成为之前的旧的英文断行的操作了,唯一需要处理的就是断开的行重

    : 新被拼接的时候是否要添加空格的问题。如果按照这样的方式修改,也许对已有

    : 代码的修改可以减小到一个非常小的范围内,这样加入版本库会相对容易很多。

    :这些都实现完毕后,建议可以提供一些测试用例。参看 Vim 原码目录下的测试

    :用例,按照那个格式编写就好。

    : 最后再次感谢 yswzing 为 Vim 项目作出的贡献!

    2010-11-10
  • 支持中文的 f/t 命令 [Patch rev.1]

    f/t 是 vim 中非常常用的命令,然而处理中文时,f/t 命令需要输入一个完整的中文字,这就要切换输入法,用着就不是很方便了。如果能使用汉字拼音的首字母作为 f/t 命令的参数来搜索汉字,难道不是会方便许多吗?或者你使用五笔,那也可以用五笔的第一个字根的字母来搜索汉字。

    附带的 patch 为 vim 增加了这个功能,添加了一个 option: csearchtable(cstab),将这个 option 设为指向一个文件,文件中记录了每个汉字所对应的搜索字母,一般是某种输入法下输入该汉字所需的第一个字母。vim 启动的时候会读取这个文件,在内部构造一个表,用户使用 f/t 命令的时候,就可以根据这个表来使用 ascii 字符搜索汉字。

    因为这个表不需要经常改,所以其中使用的是 charset codepoint 值,而不是汉字的编码,并且字符码值必须按升序排列。不支持直接使用编码过的汉字,因为这样就难以保证字符码值按升序排列,导致在 vim 启动的时候需要做一个排序。

    注意:cstab 的值必须是一个绝对路径的文件名

    2010-11-10
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[8]**]

    我后面又改了好多,看感兴趣的人不多,就没有更新了。现在发一个新的:

    1. 修正了 —— 和 …… 双字符标点中间断行的问题;

    2. 修正了半角标点情况下的行禁则违反;

    3. 增加了更多的标点符号支持;

    4. 增加对中文句子的支持,可以使用 ) 和 das 之类的命令;

    5. 重构了代码,使用二分搜索匹配标点符号。

    【 在 shenmue (开心网还没倒呢?) 的大作中提到: 】

    : 打了这个 patch,简单测试了下,确实好多了

    : 但是下面这个例子里面,标点 (;) 还是出现在了句首

    : VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2010 17:04:44)

    : ...................

    2010-11-05
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[5]**]

    Vim 内建了一个表,将所有 unicode 码点的字符类型标识了出来。因为 unicode 编码不是比较规则的,所以这个表很小。它只区分了 Space, Latin letter, Chinese, Japanese, Koren, Punctuation 等几类。如果发现一段话字符类不连续的话就会认为是一个 word 的边界。因此,可以识别出中文的标点符号。但是这只是 UTF8 编码的情况,CP936是没有这个功能的。见 utf_class() 和 dbcs_class() 函数(mbyte.c)。

    虽然可以像你所说的那样将一些常用断词字加入到标点一类(或一个新类型),但是这个方法太 Hack 了,很难进入 upstream。要想彻底解决这个问题,只有加入中文分词的支持,这个又太 heavy 了。并且中文分词目前没有标准的实现进入各大发行版,所以这个问题难啊!

    【 在 anhnmncb (来碗,药。) 的大作中提到: 】

    : 在补全时,vim 都能区分出中文字和中文标点,所以移动和补全里与中文有关的,都是以一句话为一个整体,不知 vim 是怎么做到的。如果把一些常用字,比如"的"也加到与中文标点一个类别就好了,这样在移动和补全时会更适合和方便于中文的习惯。

    2010-11-02
  • Re: 最近打算转过来,问几个简单的,求帮忙

    这个很容易改,先装上 color-theme,如果对其中的配色还不满意的话,打开

    /usr/share/emads/site-lisp/emacs-goodies-el/color-theme-library.el

    提取出来一个基础方案放到自己的配置文件中,照着改就是了。主要是改如下的部分:

    (font-lock-builtin-face ((t (:bold t :foreground "PaleGreen"))))

    (font-lock-comment-face ((t (:foreground "LightBlue"))))

    (font-lock-constant-face ((t (:foreground "Aquamarine"))))

    (font-lock-doc-string-face ((t (:foreground "LightSalmon"))))

    (font-lock-function-name-face ((t (:bold t :foreground "Aquamarine"))))

    先在 emacs 中使用 M-x describe-char 查看你想要修改的语法元素的 face 是什么类型,然后在这里相应的修改。

    【 在 Linging (灵灵) 的大作中提到: 】

    : 3,配色怎么改?cperl-mode下面的配色方案好像比较难看,明显不如vim的

    2010-11-02
  • Re: 大家觉得笔记本键盘对VIM影响大还是对emacs影响大?

    用 vim 不把 capslock 换成  ESC 吗?

    【 在 yaksa (少壮太努力,长大做I.T.) 的大作中提到: 】

    : -_-!

    : 脑残的T41啊,ESC放在F1上面

    2010-10-31
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[5]**]

    1. 为 formatoptions 增加一个选项 `]',如果设置的话表示严格遵守 textwidth,不设置(默认)的话可以将标点悬挂到一行的末尾;

    2. 修复 rev.4 中 Refactoring 引入的一个手误;

    【 在 yswzing (yswzing) 的大作中提到: 】

    : Refactoring

    : 与 vim 其它部分对多字节编码的处理保持一致。

    2010-10-31
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[4]**]

    Refactoring

    与 vim 其它部分对多字节编码的处理保持一致。

    2010-10-30
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[3]**]

    这个如果真的有需要的话是可以做,目前觉得如果有人懂日文或韩文的话,可以将相关的标点也加进去。

    这是个不错的想法,我先看看再说。

    【 在 anhnmncb (来碗,药。) 的大作中提到: 】

    : 还是觉得能设为 option 最好了,可能有人有少见的标点或其他需求呢?

    : 我说的是和这个 patch 完全无关的另外的和中文有关的 feature 了 :) 比如用 e 移到词尾,目前 vim 对一个完全是中文句子的处理是移到标点处(中文标点一样有效,不知怎么实现的),如果在这种情况,e 是移动某个中文的词尾,比如"什么什么的"里的"的"后就好了。

    2010-10-29
  • Re: 处理中文行禁则的一个 Patch

    非常欢迎 review,这部分代码非常 tricky,尤其是将标点悬挂到一行的最后的功能,

    有人 review 是非常有帮助的。

    【 在 edyfox (滇狐) 的大作中提到: 】

    : 大赞!期待这个功能很久了。

    : 等我有空 review 一下,然后处理加入官方代码库的相关后续事宜,嘿嘿。

    2010-10-29
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[3]**]

    我开始也是这么想的,后来想想其实也没有什么必要,标点符号就那么些,设置好了就不用改动了。

    这里没有看懂什么意思,中文是每个字的位置都可以断行的,没有必要分词断行吧。

    【 在 anhnmncb (来碗,药。) 的大作中提到: 】

    : 不会 C,看了下,感觉能把那些中文标点换成用户可设置项就好了。

    : 还有,能增加中文分词和句功能吗?从最简单的开始,把一些常用的字,比如"的",做为词的结尾,这样至少比一整句的跳动好多了。

    2010-10-29
  • Re: 处理中文行禁则的一个 Patch [**修复Bug[3]**]

    修正了一些细微的问题:

    1) 标点是一段最后一个字符并且悬挂时,会多换一行的问题;

    2) 前面全是英文且没有空格,后面接着一个行尾标点时也会换行的问题;

    3) 输入时换行延迟的问题。

    2010-10-29
  • Re: 处理中文行禁则的一个 Patch

    只会用 C,不知道 vim 的插件怎么搞。

    先测试测试,如果稳定的话就反馈给官方,能加到官方源里是最好了。

    【 在 happyTC (沉迷于TC中) 的大作中提到: 】

    : 这种方式,其实绝大多数用vim的中国用户

    : 都不会(两种意思都是)自己编译源码的

    : 建议,能不能可能,搞成插件形式的

    : ...................

    2010-10-29
  • Re: 处理中文行禁则的一个 Patch

    如果刚好 textwidth 之后的字符是一个行尾标点(,。之类),这时缩短上一行的话,上一行行尾会有一个空缺,显得不是很整齐。加长上一行会使得行的长度最多比 textwidth 多一个标点的宽度,严格意义上讲,确实违反了 textwidth 设定。但是我觉得这样排版出来整齐一些,Emacs 中也是这么处理的。举个例子:

    ----------------

    一旦你开始考虑这个问题,你就要面临一系列头痛的事情。假如酷

    头发的老板要全面思考这个问题,那会让他的脑袋炸开。而只要他

    继续认定所有的语言都是等价的,他就可以选择最流行的,流行实

    际上是一个关于时尚的问题,所以就连他也差不多能找到正确答案。

    但如果语言是有差别的,那么他就要解决两个联立方程,在两件他

    都不懂的事情之间找到最佳平衡:评估二十多种可用的语言对于要

    解决的问题的适宜度;分析对每个语言找到合适的库和程序员等等

    的可能性。如果这就是推开门之后要面临的问题,酷头发的老板不

    愿意打开这扇门就一点都不奇怪了。

    ----------------

    vs

    ----------------

    一旦你开始考虑这个问题,你就要面临一系列头痛的事情。假如酷

    头发的老板要全面思考这个问题,那会让他的脑袋炸开。而只要他

    继续认定所有的语言都是等价的,他就可以选择最流行的,流行实

    际上是一个关于时尚的问题,所以就连他也差不多能找到正确答

    案。但如果语言是有差别的,那么他就要解决两个联立方程,在两

    件他都不懂的事情之间找到最佳平衡:评估二十多种可用的语言对

    于要解决的问题的适宜度;分析对每个语言找到合适的库和程序员

    等等的可能性。如果这就是推开门之后要面临的问题,酷头发的老

    板不愿意打开这扇门就一点都不奇怪了。

    ----------------

    这一点是针对中英文混排时喜欢在中英文之间加空格的人,此时一般会使用 B 标志,即保留中英文之间的空格,去掉中文之间的空格。但是如果是中文标点和英文相邻,vim 默认仍然加上空格,就不是想要的行为了。这个 patch 的作用就是在使用 B 标志的时候,不在中文标点符号和英文之间加空格。这是对 B 标志不当行为的修正,所以没有必要另加一个标志。

    对于没有这种习惯的人,一般都使用 M 标志,这个 patch 就没有太大意义了,它不影响 M 标志的行为。

    【 在 milksea (减肥 >_<~~~) 的大作中提到: 】

    : 有中文标点的禁则很好,不过处理方式似乎与常见的方式相反:一般是减小一行的内容

    : 避免标点在行首,而不是增加。也就是仍然保证 textwidth 有效吧。

    : 在 Join 时中文标点与英文之间的空格问题。这个不是应该设置 formatoptions 么?

    : ...................

    2010-10-29
  • Re: 处理中文行禁则的一个 Patch [**修复Bug**]

    修正 Bug,重新发一次。

    【 在 yswzing (yswzing) 的大作中提到: 】

    : 这个 Patch 有两个功能,第一个是处理中文排版时的行禁则问题,第二个是去掉 Join 时 中文标点和英文之间多余的空格。目前仅支持 UTF8。

    : 1 中文行禁则的问题

    : Vim 对中文的行禁则支持的不好,在写中文文本的时候,经常会出现逗号、句号等跑到行首 的情况。使用 gq 系列命令重排文本的时候,也会发生这种情况。因为英文的行禁则很简单, 只在空格处断行,而中文不同,可以在任何地方断行,但是必须遵守行禁则。vim 实现了可 以在中文的任何地方断行,但是没有考虑行禁则。

    : ...................

    2010-10-28
  • Re: 处理中文行禁则的一个 Patch

    我想先等大家测试一下,确定没有什么大的问题之后再提交到官方。

    【 在 happyTC (沉迷于TC中) 的大作中提到: 】

    : 最好能给加入到官方的patch

    2010-10-27
  • Re: 处理中文行禁则的一个 Patch

    忘了说了,这个  patch 是针对 mercurial 仓库中的最新(2010.10.26)代码的,

    老版本的可能打不上。

    【 在 gyping (水瓶) 的大作中提到: 】

    : 很好很强大, 热烈地顶一下.

    : 只是我只在Linux下编译源代码安装Vim. Windows下的编译怎么搞? 我一般都是在官网下

    : 载安装包.

    2010-10-27
  • Re: SimpleScalar能不能运行Java程序?

    编译后的 Java 程序是字节码,只能使用 Java 虚拟机才能运行。除非你把 simplescalar 变成 jave 虚拟机,不然是没戏的。

    【 在 bellework (bellework) 的大作中提到: 】

    : 诸位,SimpleScalar通过拓展能不能运行Java程序?

    : 我用Gcc4.1.1编译了一个Java的Helloworld程序,发现不能直接在SS上运行

    : 其程序内部有一些创建进程的系统调用,这些在原来的SS上是没有的

    : ...................

    2010-10-27
  • 处理中文行禁则的一个 Patch

    这个 Patch 有两个功能,第一个是处理中文排版时的行禁则问题,第二个是去掉 Join 时 中文标点和英文之间多余的空格。目前仅支持 UTF8。

    1 中文行禁则的问题

    Vim 对中文的行禁则支持的不好,在写中文文本的时候,经常会出现逗号、句号等跑到行首 的情况。使用 gq 系列命令重排文本的时候,也会发生这种情况。因为英文的行禁则很简单, 只在空格处断行,而中文不同,可以在任何地方断行,但是必须遵守行禁则。vim 实现了可 以在中文的任何地方断行,但是没有考虑行禁则。

    这个 Patch 在 vim 中加入了中文行禁则支持,并且支持标点符号右悬挂,即本应该在一个 句号之前断行时,不是将句号和它之前的一个字符移到下一行,而是将句号悬挂在上一行后 面。

    例子(set tw=34):

    原来的 vim:

    Vim 对中文的行禁则支持的不好,在写

    中文文本的时候,经常会出现逗号、句

    号等跑到行首的情况。使用 gq 系列命

    令重排文本的时候,也会发生这种情况

    。因为英文的行禁则很简单,只在空格

    处断行,而中文不同,可以在任何地方

    断行,但是必须遵守行禁则。vim 实现

    了可以在中文的任何地方断行,但是没

    有考虑行禁则。

    打了 Patch 之后:

    Vim 对中文的行禁则支持的不好,在写

    中文文本的时候,经常会出现逗号、句

    号等跑到行首的情况。使用 gq 系列命

    令重排文本的时候,也会发生这种情况。

    因为英文的行禁则很简单,只在空格处

    断行,而中文不同,可以在任何地方断

    行,但是必须遵守行禁则。vim 实现了

    可以在中文的任何地方断行,但是没有

    考虑行禁则。

    2 Join 时中文标点和英文之间多余空格问题

    此 Patch 只针对在 formatoptions 选项中加了 B 标志的情况。如果你使用的是 M 标志, 那么这个 Patch 对你没有任何影响。

    在使用 J 命令,或者 gq 系列命令时,会先将行连接起来。连接的时候,如果前一行尾或下一行首的两个字符,一个是中文标点或符号,另一个是英文字符,就会在中间插入一个多余 的空格。原因也是 vim 将所有中文字符一视同仁,没有考虑普通字符和标点符号的不同。这 个 Patch 会处理这种情况,避免在中文标点或符号与英文字符之间插入空格,但是仍然保留 普通中文字符和英文字符之间的空格。

    例子:

    令重排文本的时候,也会发生这种情况。

    Vim 对中文的行禁则支持的不好,在写

    原来的 vim:

    令重排文本的时候,也会发生这种情况。 Vim 对中文的行禁则支持的不好,在写

    打了 Patch 之后:

    令重排文本的时候,也会发生这种情况。Vim 对中文的行禁则支持的不好,在写

    欢迎大家试用,多提宝贵意见!有 Bug 或改进意见的话发邮件给我: yswzing at gmail.com

    2010-10-27