处理 vim 中文行禁则的一个 Patch
发表于 : 2010-10-29 13:53
这个 Patch 有两个功能,第一个是处理中文排版时的行禁则问题,第二个是去掉 Join 时 中文标点和英文之间多余的空格。目前仅支持 UTF8,是在最新 mercurial 仓库代码基础上做的 patch。
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
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