处理 vim 中文行禁则的一个 Patch

Vim、Emacs配置和使用
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 处理 vim 中文行禁则的一个 Patch

#16

帖子 lilydjwg » 2010-11-02 17:53

好吧,硬编码进去就硬编码,我现在来报 bug:

代码: 全选

:set tw=10
结果

代码: 全选

测试呵呵—
—可以
不??????????????????
1. 破折号和省略号中间会被断开。
2. 如果像上面这样打一串不能放在行首的标点,文本将会超出 tw 很多。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: 处理 vim 中文行禁则的一个 Patch

#17

帖子 poet » 2010-11-03 11:00

Strange 写了: 有一个原则是 提供机制而不是限制。
试想万一有人排版不想用禁则怎么办。有人除了"。",还想把";"留在行末怎么办。
再说日文韩文和中文标点符号差异还是有的。
拿日文来说,",“”"这些都是没有的,取而代之的是"、「」",你准备把这些字符也硬编码吗?
就是因为不知道设置是否和日韩用户冲突,所以更要提供选项。
不管怎么样说,像硬编码这样的做法,是不符合 Vim is a highly configurable text editor 的风格的。
你这个理解是错误的。

基于标点符号的行禁则,确实是硬编码到 vim 中,无需额外配置的。对于除了中日韩以外的所有语言,目前都已经这么做了。现在要做的只是把中日韩禁则增加进去而已。

关于什么符号是标点符号的问题,在 unicode 中有明确定义,也就是说,不论中日韩,这些标点符号在 unicode 中的定义都是确定的。如果你不希望中文的句号出现在行首,你也一定不会希望日文的句号出现在行首。这个规则可通用。而且在 Unicode 字符集中,我发现的事实是不同语言的相同标点符号都被编码到相同的unicode字符,如果我理解有错的,请指出。

C 中的 iswpunct() 函数可以对多字符集的标点符号进行判定,而这个判定是基于当前的 locale,因此,事实上即便使用非 unicode 的编码,也可以实现正确判定。

我比较疑惑的是楼主认为只能支持 utf-8,但是以我的理解,不论读入的文本是什么编码集, vim 内部在缓冲区层面都是用 unicode 处理的。只是在保存和装载时进行编码转换。所以,貌似不应当只能支持 utf-8 字符集。
yswzing.
帖子: 8
注册时间: 2010-10-29 13:49

Re: 处理 vim 中文行禁则的一个 Patch

#18

帖子 yswzing. » 2010-11-03 14:06

lilydjwg 写了:好吧,硬编码进去就硬编码,我现在来报 bug:
结果

代码: 全选

测试呵呵—
—可以
不??????????????????
1. 破折号和省略号中间会被断开。
这确实是一个 bug,我忘了考虑 …… 和 —— 了,谢谢提醒!
2. 如果像上面这样打一串不能放在行首的标点,文本将会超出 tw 很多。
这个英文也一样的,试试 `ok?????????????????????????????????',我认为这里不断行是正确的行为,断行才奇怪了。
附件
fix_line_break7.txt
(11.26 KiB) 已下载 220 次
yswzing.
帖子: 8
注册时间: 2010-10-29 13:49

Re: 处理 vim 中文行禁则的一个 Patch

#19

帖子 yswzing. » 2010-11-03 14:11

poet 写了: C 中的 iswpunct() 函数可以对多字符集的标点符号进行判定,而这个判定是基于当前的 locale,因此,事实上即便使用非 unicode 的编码,也可以实现正确判定。

我比较疑惑的是楼主认为只能支持 utf-8,但是以我的理解,不论读入的文本是什么编码集, vim 内部在缓冲区层面都是用 unicode 处理的。只是在保存和装载时进行编码转换。所以,貌似不应当只能支持 utf-8 字符集。
vim 内部使用的是 encoding 变量所指定的编码来存储 buffer 的内容的。你可以在 vim 中用 ga 命令查看光标下字符的内部存储代码。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 处理 vim 中文行禁则的一个 Patch

#20

帖子 lilydjwg » 2010-11-03 17:14

yswzing. 写了: 这个英文也一样的,试试 `ok?????????????????????????????????',我认为这里不断行是正确的行为,断行才奇怪了。
查了半天,发现Vim似乎没有gedit的“不将一个单词拆在两行”这样的选项。我现在对编辑器没什么兴趣了,不知道其他编辑器是怎么处理过长单词的。只记得当初EditPad Pro把中文当成长单词回绕让我非常不爽(目前还没有发现修正了此问题的破解版)。反正我觉得,当规定 tw 时,应当有选项控制使行不超过 tw。目前我只发现现在回帖的这个评论框在火狐3.6.12下是会强行折断长单词的。
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: 处理 vim 中文行禁则的一个 Patch

#21

帖子 Fermat618 » 2010-11-28 9:33

补丁已经打上了。非常感谢楼主,这个功能我期待已久。
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
wutong
帖子: 345
注册时间: 2007-10-22 16:54

Re: 处理 vim 中文行禁则的一个 Patch

#22

帖子 wutong » 2011-02-24 18:40

这个功能我期待已久,但是如何使用你的补丁呢?
wutong
帖子: 345
注册时间: 2007-10-22 16:54

Re: 处理 vim 中文行禁则的一个 Patch

#23

帖子 wutong » 2011-02-25 8:24

我明白了如何打补丁,即先下载原代码,然後将fix_break7.txt 移到vim 文件夹中。

然後命令
patch -p1 < fix_break7.txt

make
sudo make install

但是编译後的vim 不支持中文,这是怎么回事?
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: 处理 vim 中文行禁则的一个 Patch

#24

帖子 poet » 2011-02-25 9:16

wutong 写了:我明白了如何打补丁,即先下载原代码,然後将fix_break7.txt 移到vim 文件夹中。
然後命令
patch -p1 < fix_break7.txt
make
sudo make install
但是编译後的vim 不支持中文,这是怎么回事?
自己编译的 vim 要想支持中文,需要使用 feature big 以上,或者手动编辑 Makefile 增加 multibyte 支持。
wutong
帖子: 345
注册时间: 2007-10-22 16:54

Re: 处理 vim 中文行禁则的一个 Patch

#25

帖子 wutong » 2011-02-25 12:51

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

然後依照易水先生的方法,终于编译成功。现在中文标点符号不会出现在句首了。十分感谢诸位!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

[BUG] Re: 处理 vim 中文行禁则的一个 Patch

#26

帖子 lilydjwg » 2011-10-25 23:27

yswzing., Windows 下无效。详见 http://lilydjwg.is-programmer.com/posts ... ment159318
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 处理 vim 中文行禁则的一个 Patch

#27

帖子 lilydjwg » 2011-11-13 16:03

改用这个autofmt插件好了。
zhou13
帖子: 42
注册时间: 2007-06-21 13:03

Re: 处理 vim 中文行禁则的一个 Patch

#28

帖子 zhou13 » 2011-12-04 11:22

Windows下经测试有效。。
wutong
帖子: 345
注册时间: 2007-10-22 16:54

Re: 处理 vim 中文行禁则的一个 Patch

#29

帖子 wutong » 2012-05-08 17:17

最近发现这个禁则没有处理数学中常用的符号「.」。「.」相当于句号。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 处理 vim 中文行禁则的一个 Patch

#30

帖子 lilydjwg » 2013-05-16 17:45

wutong 写了:最近发现这个禁则没有处理数学中常用的符号「.」。「.」相当于句号。
OK, 我更新了。
回复