Làm nổi bật cú pháp Vim của chữ số với dấu phân cách chữ số đơn


9

C ++ 14 cung cấp cho chúng tôi tùy chọn sử dụng dấu ngoặc đơn để phân tách các chữ số của chữ số lớn. Điều này phá vỡ cú pháp tô sáng của Vim.

Ví dụ, hãy xem xét chương trình C ++ 14 sau đây:

#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;
}

Khi tôi xem phần này trong Vim, tôi thấy phần tô sáng cú pháp sau (lưu ý rằng tôi đang sử dụng một số tập lệnh tô sáng bổ sung ):

Làm nổi bật cú pháp Vim cho chương trình được mô tả ở trên

Tôi muốn tất cả các chữ số huge_number_againxuất hiện màu đỏ. Có một sửa đổi nào tôi có thể thực hiện đối với một trong các tệp cú pháp của mình hoặc để tôi ~/.vimrcsửa lỗi này không?


Tôi thấy một số hỗ trợ cho C ++ 14 đã được thêm vào v7.4.923 (chữ nhị phân). Nhưng dường như không phải là dấu phân cách số: - / Các tệp C ++ mới nhất từ đây dường như chưa có.
Martin Tournoij

4
Để khắc phục nhanh, có lẽ bạn có thể thêm syn match cNumber display contained "\d\(\d\|'\)*\(u\=l\{0,2}\|ll\=u\)\>"vào ~/.vim/syntax/cpp.vim. (Btw, nếu đó là C ++, cstdlibthì không , sử dụng stdlib.h.)
muru

3
Tôi chỉ nhận thấy có một vấn đề mở từ tháng 5 năm 2014 btw.
Martin Tournoij

@muru Điều đó dường như đã khắc phục vấn đề. Bây giờ tôi ổn với việc sử dụng hack nhanh chóng. Cảm ơn!
Jake

2
@Carpetsmoker Tôi không chắc chắn về việc kết hợp cú pháp để biết chính xác những thay đổi của tôi. Tôi nghĩ rằng nó sẽ chỉ khớp với một chữ số theo bất kỳ số chữ số hoặc dấu ngoặc đơn nào, cộng với ulllông tơ, nhưng tôi không biết liệu nó có khớp với một số trường hợp không hợp lệ hay không. Và rõ ràng C ++ 14 cho phép dấu phân cách theo số bát phân, nhị phân, hex và phao và sau dấu thập phân trong số float. Đó là nhiều hơn nhiều so với tôi sẵn sàng đảm nhận.
muru

Câu trả lời:


4

Các vim-jp / vim-cpp repo bao gồm sự thay đổi này trong tháng 7 năm 2016:

syn match   cNumber     display contained "\d\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match   cNumber     display contained "0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match   cNumber     display contained "0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"

Nếu bạn không muốn sử dụng repo này, bạn có thể thêm các dòng này vào ~/.vim/syntax/cpp.vim.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.