无法解释的 VIM 或 GCC 行为
unexplained behaviour of vim or gcc
我运行了这个简单的程序:
#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 仍然使用原始页面中的一些选项,这些选项确实在这里并且是格式化的,但:set list
没有显示它们?
破折号不一样。注释的较长,由不同的字符表示,因此解释不同。常见的复制+粘贴错误。
http://en.wikipedia.org/wiki/Dash
掉行中的-
字符是 U+2013 EN DASH,而不是 ASCII 破折号 U+002d。
由于我使用的位图字体有限,打开文件时 Unicode 字符已经卡住,但您可以使用 g8
命令在光标下打印字符的 UTF-8 编码值,或使用 :call search('[^x00-x7F]')
查找下一个非 ASCII 字符。
代码粘贴到文本编辑器中时,我立即看到注释行中的第一个 [A-Z] 实际上使用了长破折号。
你想要一个简单的破折号,这就是你输入的。
您似乎对:set list
的目的感到困惑.它不是为了显示一般的"奇怪"字符而设计的:只有一个非常小的集合(制表符,不间断空格,尾随空格......),有关详细信息,请参阅:help 'list'
。
在这种情况下,set list
无济于事。
常规空格转换为不间断空格由set list
负责,但是从 Web 或 PDF 或邮件客户端和文本处理器复制粘贴时,您应该担心其他特殊字符:"
经常被 ”
替换,'
被 ’
等替换......前几天我有很长的一段话,所有的'
或’
都替换为¹
。在这种情况下很容易发现,但在其他情况下很容易错过。
- gcc Atomic在gcc 4.1.1中内置了奇怪的行为
- 带有 gcc 和 clang 的可变参数宏扩展的奇怪行为
- 在MSVC和GCC上使用VSNPRINTF时不同的行为
- 未定义的行为或 gcc 优化错误
- 不同的内在行为取决于 GCC 版本
- MSVC 和 GCC 之间的矢量行为不同
- 依赖GCC/LLVM的"-fexceptions"在技术上是未定义的行为吗?
- 对于具有绝对路径的库的GCC行为是什么?
- const成员初始化之前的用法是GCC和Clang的这种预期行为
- 使用 lambda 的错误 gcc 行为
- GCC 和 Clang 在 constexpr 构造函数上的不同行为
- 无法解释的 VIM 或 GCC 行为
- 在哪里查找 GCC 实现定义行为的实现?
- __has_trivial_copy在clang和gcc中的行为不同.谁'是吗
- gcc-O2的奇怪整数行为
- gcc 4.7.0中std::vector::resize()的奇怪行为
- 混合使用C和C++代码会在GCC中产生意想不到的行为
- GCC和clang(SFINAE)之间的过载解决行为差异
- 不同的 constexpr 行为 vs2015u2 与 gcc
- __attribute((const))的gcc行为不一致