[英]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
不顯示它們?
破折號不一樣。 評論的那些更長並且由不同的字符表示,因此被不同地解釋。 常見復制+粘貼錯誤。
那個-
注釋掉的行中的字符是U + 2013 EN DASH ,而不是ASCII短划線U + 002d。
由於我使用的位圖字體有限,打開文件時Unicode字符已經突出,但您可以使用g8
命令打印光標下字符的UTF-8編碼值,或使用:call search('[^\\x00-\\x7F]')
找到下一個非ASCII字符。
當我在我的文本編輯器中粘貼代碼時,我立即看到注釋行中的第一個[AZ]實際上是使用長划線。
你想要一個簡單的破折號,這就是你輸入的內容。
您似乎對以下目的感到困惑:set list
。 它不是為了顯示“怪異”字符而設計的:只有一個非常小的集合(制表符,不間斷空格,尾隨空格......),請參閱:help 'list'
了解詳細信息。
在這種情況下, set list
不會有幫助。
常規空間變成不間斷的空間由set list
但是當從Web或PDF或郵件客戶端和文本處理器進行復制粘貼時,您應該擔心其他特殊字符: "
通常被替換為”
, '
通過'
等等...前幾天我有一個很長的段落,其中所有'
或'
用¹
替換。在這種情況下很容易發現,但在其他情況下很容易錯過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.