Hiển thị dấu cách trong vim


10

Tôi muốn có một màn hình đẹp và ngọt ngào của khoảng trắng kéo dài trong thiết bị đầu cuối của tôi. Điều này sẽ cho phép tôi loại bỏ chúng trước khi đóng tệp.

Tôi biết rằng câu hỏi này khá phổ biến và tôi đã tìm thấy hàng tá câu trả lời trên SO. Thật không may, tôi chưa tìm thấy một thỏa mãn nào ...

Vì vậy, tôi sẽ cố gắng tóm tắt các thông tin thu thập được và các giải pháp tôi tìm thấy.

Giải pháp 1: Làm nổi bật các không gian dấu bằng tay

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

Làm nổi bật dấu trắng

Ưu điểm:

  • Dễ sử dụng
  • Nhanh
  • Tương thích với cursorline

Nhược điểm:

  • Màu được chọn không tương thích với các bảng màu khác vì màu được đặt thủ công thành red
  • Khối nền lớn màu đỏ không thẩm mỹ

Giải pháp 2: Sử dụng tính năng danh sách

set list
set listchars+=trail:◦

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Ưu điểm:

  • Dễ sử dụng
  • Nhanh

Nhược điểm:

  • Vấn đề nếu :set cursorlineđược kích hoạt
  • Màu chuyên dụng cho list/trailkhông thể cấu hình. Phải giống như các bảng liệt kê khác

Giải pháp 3: Sử dụng tính năng che giấu

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Ưu điểm:

  • Đẹp hơn giải pháp đầu tiên

Nhược điểm:

  • Nền không giống với nền con trỏ
  • Có thể can thiệp vào các quy tắc che giấu khác
  • Màu sắc được chọn không phải lúc nào cũng tương thích với bảng màu
  • Không tương thích với phiên bản cũ hơn của Vim

Câu hỏi của tôi

Mà một trong những giải pháp được liệt kê là phù hợp nhất về hiệu suất và khả năng tương thích và làm thế nào tôi có thể nhận được tất cả các ưu và không có nhược điểm nào?

Nói cách khác, tôi muốn tìm một giải pháp trong đó:

  • Màu sắc nổi bật phù hợp với màu sắc đã chọn
  • Màu này có thể nhìn thấy rõ nhưng không quá hung dữ đối với mắt
  • Tương thích với cursorline(nền và tiền cảnh) `
  • Tương thích với các plugin khác có thể sử dụng che giấu
  • Char trailing có thể được đặt thành bất kỳ char Unicode nào

Nếu bạn không thích màu đỏ, thì hãy chọn một màu khác. Nếu bạn muốn màu tương thích với các bảng màu khác nhau, thì hãy liên kết với một tên nhóm màu thay vì sử dụng một màu cụ thể, ví dụ : :hi link ExtraWhitespace CursorLine. Xem :help hi-link.
garyjohn

Câu trả lời:


4

Về mặt hiệu suất, không ai trong số này nên tạo ra sự khác biệt. Vim chủ yếu bị sa lầy bởi các mẫu cú pháp phức tạp; mô hình ở đây khá đơn giản.

Để làm cho màu nổi bật đồng ý với bảng màu đã chọn, sử dụng :hi linkcho một nhóm hiện có; thông thường, đó sẽ là Error. Tất nhiên, bất kỳ điều này chỉ quan trọng nếu bạn thường xuyên chuyển đổi màu sắc (khá khác nhau); mặt khác, sử dụng màu sắc phù hợp trực tiếp (như trong giải pháp 1 của bạn) cũng sẽ tốt thôi.

Giải pháp 1: Làm nổi bật các không gian dấu bằng tay

Tôi sẽ làm điều này, nhưng sử dụng matchadd()thay vì :match; Điều này để lại sau để làm nổi bật tùy chỉnh. Ngoài ra, clearmatches()là quá thô; nó xóa tất cả các kết quả khớp và do đó có thể ảnh hưởng đến các plugin. Bạn có thể sử dụng / xem qua plugin ShowTrailingWhitespace của tôi để triển khai rõ ràng và mạnh mẽ (cũng bao gồm các ngoại lệ cho một số kiểu tệp nhất định). Vâng, đó là một giải pháp lớn hơn nhiều, nhưng tôi chưa nhận thấy bất kỳ tác động nào.

Giải pháp 2: Sử dụng tính năng danh sách

Bản thân đây là một tính năng hữu ích và việc giữ nó vĩnh viễn có tác dụng đối với việc định vị con trỏ trên các ký tự Tab, vì vậy tôi không khuyến nghị điều đó.

Giải pháp 3: Sử dụng tính năng che giấu

Điều đó chắc chắn sẽ can thiệp vào một số cú pháp và plugin bằng tính năng này. Ý kiến ​​tồi.


Vì vậy, từ câu trả lời của bạn, tôi hiểu rằng có một giải pháp cho phép sử dụng char Unicode tùy chỉnh để đánh dấu các khoảng trắng thừa. Câu hỏi này thực sự khó khăn hơn mà tôi nghĩ ban đầu.
nowox 31/05/2015

Phải, chars tùy chỉnh chỉ làm việc với 'listchars'. Đối với tôi, việc làm nổi bật là quá đủ (đặc biệt là với màu sắc hung hăng).
Ingo Karkat
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.