分页: 2 / 3
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2010-11-02 17:53
由 lilydjwg
好吧,硬编码进去就硬编码,我现在来报 bug:
结果
代码: 全选
测试呵呵—
—可以
不??????????????????
1. 破折号和省略号中间会被断开。
2. 如果像上面这样打一串不能放在行首的标点,文本将会超出 tw 很多。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2010-11-03 11:00
由 poet
Strange 写了:
有一个原则是 提供机制而不是限制。
试想万一有人排版不想用禁则怎么办。有人除了"。",还想把";"留在行末怎么办。
再说日文韩文和中文标点符号差异还是有的。
拿日文来说,",“”"这些都是没有的,取而代之的是"、「」",你准备把这些字符也硬编码吗?
就是因为不知道设置是否和日韩用户冲突,所以更要提供选项。
不管怎么样说,像硬编码这样的做法,是不符合 Vim is a highly configurable text editor 的风格的。
你这个理解是错误的。
基于标点符号的行禁则,确实是硬编码到 vim 中,无需额外配置的。对于除了中日韩以外的所有语言,目前都已经这么做了。现在要做的只是把中日韩禁则增加进去而已。
关于什么符号是标点符号的问题,在 unicode 中有明确定义,也就是说,不论中日韩,这些标点符号在 unicode 中的定义都是确定的。如果你不希望中文的句号出现在行首,你也一定不会希望日文的句号出现在行首。这个规则可通用。而且在 Unicode 字符集中,我发现的事实是不同语言的相同标点符号都被编码到相同的unicode字符,如果我理解有错的,请指出。
C 中的 iswpunct() 函数可以对多字符集的标点符号进行判定,而这个判定是基于当前的 locale,因此,事实上即便使用非 unicode 的编码,也可以实现正确判定。
我比较疑惑的是楼主认为只能支持 utf-8,但是以我的理解,不论读入的文本是什么编码集, vim 内部在缓冲区层面都是用 unicode 处理的。只是在保存和装载时进行编码转换。所以,貌似不应当只能支持 utf-8 字符集。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2010-11-03 14:06
由 yswzing.
lilydjwg 写了:好吧,硬编码进去就硬编码,我现在来报 bug:
结果
代码: 全选
测试呵呵—
—可以
不??????????????????
1. 破折号和省略号中间会被断开。
这确实是一个 bug,我忘了考虑 …… 和 —— 了,谢谢提醒!
2. 如果像上面这样打一串不能放在行首的标点,文本将会超出 tw 很多。
这个英文也一样的,试试 `ok?????????????????????????????????',我认为这里不断行是正确的行为,断行才奇怪了。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2010-11-03 14:11
由 yswzing.
poet 写了:
C 中的 iswpunct() 函数可以对多字符集的标点符号进行判定,而这个判定是基于当前的 locale,因此,事实上即便使用非 unicode 的编码,也可以实现正确判定。
我比较疑惑的是楼主认为只能支持 utf-8,但是以我的理解,不论读入的文本是什么编码集, vim 内部在缓冲区层面都是用 unicode 处理的。只是在保存和装载时进行编码转换。所以,貌似不应当只能支持 utf-8 字符集。
vim 内部使用的是 encoding 变量所指定的编码来存储 buffer 的内容的。你可以在 vim 中用 ga 命令查看光标下字符的内部存储代码。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2010-11-03 17:14
由 lilydjwg
yswzing. 写了:
这个英文也一样的,试试 `ok?????????????????????????????????',我认为这里不断行是正确的行为,断行才奇怪了。
查了半天,发现Vim似乎没有gedit的“不将一个单词拆在两行”这样的选项。我现在对编辑器没什么兴趣了,不知道其他编辑器是怎么处理过长单词的。只记得当初EditPad Pro把中文当成长单词回绕让我非常不爽(目前还没有发现修正了此问题的破解版)。反正我觉得,当规定 tw 时,应当有选项控制使行不超过 tw。目前我只发现现在回帖的这个评论框在火狐3.6.12下是会强行折断长单词的。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2010-11-28 9:33
由 Fermat618
补丁已经打上了。非常感谢楼主,这个功能我期待已久。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-02-24 18:40
由 wutong
这个功能我期待已久,但是如何使用你的补丁呢?
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-02-25 8:24
由 wutong
我明白了如何打补丁,即先下载原代码,然後将fix_break7.txt 移到vim 文件夹中。
然後命令
patch -p1 < fix_break7.txt
make
sudo make install
但是编译後的vim 不支持中文,这是怎么回事?
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-02-25 9:16
由 poet
wutong 写了:我明白了如何打补丁,即先下载原代码,然後将fix_break7.txt 移到vim 文件夹中。
然後命令
patch -p1 < fix_break7.txt
make
sudo make install
但是编译後的vim 不支持中文,这是怎么回事?
自己编译的 vim 要想支持中文,需要使用 feature big 以上,或者手动编辑 Makefile 增加 multibyte 支持。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-02-25 12:51
由 wutong
poet 写了:wutong 写了:我明白了如何打补丁,即先下载原代码,然後将fix_break7.txt 移到vim 文件夹中。
然後命令
patch -p1 < fix_break7.txt
make
sudo make install
但是编译後的vim 不支持中文,这是怎么回事?
自己编译的 vim 要想支持中文,需要使用 feature big 以上,或者手动编辑 Makefile 增加 multibyte 支持。
开始用的是
hg clone
https://vim.googlecode.com/hg/ vim
不行,後來易水博客的一篇文章
《在Ubuntu 上编译vim 7.3》中见到的命令是
hg clone
https://vim.googlecode.com/hg/ vim73
然後依照易水先生的方法,终于编译成功。现在中文标点符号不会出现在句首了。十分感谢诸位!
[BUG] Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-10-25 23:27
由 lilydjwg
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-11-13 16:03
由 lilydjwg
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2011-12-04 11:22
由 zhou13
Windows下经测试有效。。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2012-05-08 17:17
由 wutong
最近发现这个禁则没有处理数学中常用的符号「.」。「.」相当于句号。
Re: 处理 vim 中文行禁则的一个 Patch
发表于 : 2013-05-16 17:45
由 lilydjwg
wutong 写了:最近发现这个禁则没有处理数学中常用的符号「.」。「.」相当于句号。
OK, 我更新了。