C ++ 14 memberi kita pilihan untuk menggunakan tanda kutip tunggal untuk memisahkan digit literal angka besar. Ini mematahkan penyorotan sintaks Vim.
Misalnya, pertimbangkan program C ++ 14 berikut:
#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;
}
Ketika saya melihat ini di Vim, saya melihat penyorotan sintaks berikut (perhatikan bahwa saya menggunakan beberapa skrip penyorotan tambahan ):
Saya ingin semua angka huge_number_again
tampak merah. Apakah ada modifikasi yang dapat saya lakukan pada salah satu file sintaks saya atau saya ~/.vimrc
untuk memperbaikinya?
Saya melihat beberapa dukungan untuk C ++ 14 ditambahkan dalam v7.4.923 (literal biner). Tapi sepertinya bukan pemisah angka: - / File C ++ terbaru dari sini juga tampaknya belum memilikinya.
—
Martin Tournoij
Untuk memperbaiki cepat, Anda mungkin dapat menambahkan
—
muru
syn match cNumber display contained "\d\(\d\|'\)*\(u\=l\{0,2}\|ll\=u\)\>"
ke ~/.vim/syntax/cpp.vim
. (Btw, kalau itu C ++, gunakan cstdlib
, bukan stdlib.h
.)
Saya baru memperhatikan ada masalah terbuka sejak Mei 2014 btw.
—
Martin Tournoij
@uru Itu tampaknya telah memperbaiki masalah. Saya baik-baik saja dengan menggunakan peretasan cepat untuk saat ini. Terima kasih!
—
Jake
@Carpetsmoker Saya tidak yakin dengan sintaks yang cocok untuk mengetahui apa yang dilakukan perubahan saya. Saya pikir itu hanya akan cocok dengan digit diikuti sejumlah digit atau tanda kutip tunggal, ditambah
—
muru
ull
bulu, tetapi saya tidak tahu apakah itu akan cocok dengan beberapa kasus yang tidak valid. Dan ternyata C ++ 14 memungkinkan pemisah dalam oktal, biner, hex literal dan mengapung dan setelah titik desimal dalam mengapung. Itu jauh lebih banyak daripada yang saya bersedia lakukan.