发现一个Vim代码缩进的BUG

Vim、Emacs配置和使用
回复
fy0
帖子: 190
注册时间: 2011-06-27 0:57

发现一个Vim代码缩进的BUG

#1

帖子 fy0 » 2011-12-31 17:11

试着做一个脚本解释器的时候发现的,示例如下:

代码: 全选

    if (!c) {
        // 当字符为 # 时 ...
        if (c=='#') {
            // 当字符为 { 时 ...
        } else if(c=='{') {
            // 当字符为其他
        }
    }
缩进(输入=gg)之后发现……

代码: 全选

    if (!c) {
        // 当字符为 # 时 ...
        if (c=='#') {
            // 当字符为 { 时 ...
        } else if(c=='{') {
            // 当字符为其他
        }
        }
光标移动到注释中的 “{”时候,发现这个{和下面的}居然对应起来了。
版本:VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 6 2011 10:20:05)
谁帮忙报告下……谢了。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 发现一个Vim代码缩进的BUG

#2

帖子 lilydjwg » 2011-12-31 17:19

自己报告去。
fy0
帖子: 190
注册时间: 2011-06-27 0:57

Re: 发现一个Vim代码缩进的BUG

#3

帖子 fy0 » 2011-12-31 17:23

lilydjwg 写了:自己报告去。
不知道该怎么做,而且E文无力,描述不清楚
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 发现一个Vim代码缩进的BUG

#4

帖子 lilydjwg » 2011-12-31 18:00

fy0 写了:
lilydjwg 写了:自己报告去。
不知道该怎么做,而且E文无力,描述不清楚
到这里填表: http://code.google.com/p/vim/issues/entry
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

Re: 发现一个Vim代码缩进的BUG

#5

帖子 Strange » 2011-12-31 18:45

这个或许不算bug

代码: 全选

// 当字符为 { 时 ...
主要是在注释里面也有一个 '{' ,干扰了 = 的缩进判断。
ニンニク入れますか?
x60 with gentoo
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 发现一个Vim代码缩进的BUG

#6

帖子 lilydjwg » 2011-12-31 21:47

Strange 写了:这个或许不算bug

代码: 全选

// 当字符为 { 时 ...
主要是在注释里面也有一个 '{' ,干扰了 = 的缩进判断。
如果这都不算 bug,还有什么可修改?
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: 发现一个Vim代码缩进的BUG

#7

帖子 Fermat618 » 2011-12-31 23:10

lilydjwg 写了: 如果这都不算 bug,还有什么可修改?
对于缩进来说,这个应该算bug了,因为缩进明显是与语义相关的东西,对于不同的程序语言它是不同的。

对%应该就不算bug.
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 发现一个Vim代码缩进的BUG

#8

帖子 自由建客 » 2012-01-01 4:48

代码: 全选

if (!c) {
	// 当字符为 # 时 ...
	if (c=='#') { 		//
		// 当字符为 { 时 ...
	} else if(c=='{') {	// }
	// 当字符为其他
	}
}
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 发现一个Vim代码缩进的BUG

#9

帖子 fanhe » 2012-01-02 0:20

不算 bug
vim 不能快速检查注释里面的干扰字符的
所以,它的很多语法算法并不是100% 准确的
因为,需要 100% 的准确的话,必须从头开始遍历文件
而 vim 选了个快速而近似的算法

能用就行了,例如 gd 的准确率就很低
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 发现一个Vim代码缩进的BUG

#10

帖子 fanhe » 2012-01-02 0:25

代码: 全选

#define aaa(x)

aaa(ange)
例如这个,你在 aaa(ange) 之后的所有缩进都是错的
vim 哪会处理宏啊,别要求太多了
回复