vim或gcc的无法解释的行为

时间:2012-12-04 11:57:35

标签: c++ regex linux vim

我运行了这个简单的程序:

#include <iostream>
#include <string>
using namespace std;

#include <boost/regex.hpp>

int main ()
{

//    boost::regex fullname_regex ("[A–Z]+[a–z]*, [A-Z][a–z]*");
boost::regex fullname_regex ("[A-Z]+[a-z]*, [A-Z][a-z]*");

string name;
cout << "Enter you full name: " << flush;

getline (cin, name);
if (! regex_match (name, fullname_regex))
{
    cout << "Error: name not entered correctly" << endl;
}

return 0;
}

我刚从某处复制过的。当我取消注释注释行(原始复制/粘贴的一部分)并注释下一个(由我自己键入)时,程序始终拒绝该名称。否则它按预期工作。我正在使用vim。我做了:set list看到隐藏的字符并且线条相同。我在原始行之前插入一个长注释,以便将其向下移动,怀疑磁盘故障(非常旧的系统),但我仍然得到了同样的错误。这是一个没有gui的ubuntu服务器,我用putty来做这个。我不习惯linux下的这类问题,如果有人知道什么可以解释这种奇怪的行为,请告诉我。也许vim仍然使用原始页面中的一些选项,here并且格式化了,但:set list没有显示它们?

4 个答案:

答案 0 :(得分:6)

破折号不一样。评论的那些更长并且由不同的字符表示,因此被不同地解释。常见复制+粘贴错误。

http://en.wikipedia.org/wiki/Dash

答案 1 :(得分:3)

注释掉的行中的-字符是U + 2013 EN DASH ,而不是ASCII短划线U + 002d。

由于我使用的位图字体有限,打开文件时Unicode字符已经突出,但您可以使用g8命令打印光标下字符的UTF-8编码值,或使用:call search('[^\x00-\x7F]')找到下一个非ASCII字符。

答案 2 :(得分:1)

当我在我的文本编辑器中粘贴代码时,我立即看到注释行中的第一个[A-Z]实际上是使用长划线。

你想要一个简单的短划线,这就是你输入的内容。

答案 3 :(得分:1)

您似乎对:set list的目的感到困惑。它的设计通常不会显示“怪异”字符:只有非常小的一组(制表符,不间断空格,尾随空格......),详见:help 'list'

set list在这种情况下无济于事。

set list处理常规空间变为不间断空格,但是当从网络或PDF或邮件客户端和文本处理器进行复制粘贴时,您应该担心其他特殊字符:{{ 1}}经常被"取代,取代'等等......有一天,我有一个长段,其中'替换的地方。在这种情况下很容易发现,但在其他情况下可能很容易错过。