C ++ 14 ทำให้เรามีตัวเลือกในการใช้เครื่องหมายคำพูดเดี่ยวเพื่อแยกตัวเลขของตัวอักษรตัวเลขขนาดใหญ่ สิ่งนี้จะหยุดยั้งการเน้นไวยากรณ์ของ Vim
ตัวอย่างเช่นพิจารณาโปรแกรม C ++ 14 ต่อไปนี้:
#include <stdlib.h>
int main(int argc, char** argv) {
// small numbers are fine
int normal_number = 5;
// large numbers have the correct highlighting but they're hard to visually parse
int huge_number = 1000000000;
// apostrophes help with visual parsing but mess up syntax higlighting
int huge_number_again = 1'000'000'000;
return EXIT_SUCCESS;
}
เมื่อฉันดูสิ่งนี้ใน Vim ฉันเห็นการเน้นไวยากรณ์ต่อไปนี้ (โปรดทราบว่าฉันกำลังใช้สคริปต์การเน้นเพิ่มเติมบางส่วน):
ฉันต้องการให้ตัวเลขทั้งหมดเป็นhuge_number_again
สีแดง มีการแก้ไขที่ฉันสามารถทำกับหนึ่งในไฟล์ไวยากรณ์ของฉันหรือ~/.vimrc
เพื่อแก้ไขนี้ได้หรือไม่
ฉันเห็นการสนับสนุนบางอย่างสำหรับ C ++ 14 ถูกเพิ่มใน v7.4.923 (ตัวอักษรไบนารี) แต่ดูเหมือนจะไม่ใช่ตัวคั่นตัวเลข: - / ไฟล์ C ++ ล่าสุดจากที่นี่ดูเหมือนจะยังไม่มี
—
Martin Tournoij
สำหรับการแก้ไขอย่างรวดเร็วคุณอาจจะสามารถเพิ่มการ
—
Muru
syn match cNumber display contained "\d\(\d\|'\)*\(u\=l\{0,2}\|ll\=u\)\>"
~/.vim/syntax/cpp.vim
(Btw ถ้านั่นคือ C ++, การใช้งานcstdlib
, ไม่ stdlib.h
.)
ฉันเพิ่งสังเกตเห็นว่ามีปัญหาเปิดตั้งแต่พฤษภาคม 2014 btw
—
Martin Tournoij
@muru ดูเหมือนว่าจะแก้ไขปัญหาได้แล้ว ตอนนี้ฉันสบายดีแล้วที่ใช้แฮ็คอย่างรวดเร็ว ขอบคุณ!
—
Jake
@Carpetsmoker ฉันไม่แน่ใจว่าการจับคู่ไวยากรณ์จะรู้ว่าการเปลี่ยนแปลงของฉันทำอะไร ฉันคิดว่ามันจะตรงกับตัวเลขตามจำนวนตัวเลขใด ๆ หรือคำพูดเดียวบวกกับ
—
muru
ull
ปุย แต่ฉันไม่รู้ว่ามันจะตรงกับกรณีที่ไม่ถูกต้อง และเห็นได้ชัดว่า C ++ 14 อนุญาตให้ตัวแยกเป็นแปดฐานแปดตัวอักษรฐานสิบหกและลอยและหลังจุดทศนิยมในลอย นั่นมากเกินกว่าที่ฉันจะยอมทำ