SpecialKey foreground color w / rollerline set


8

Trong phần hỏi đáp này , người ta nhận thấy rằng có một nhóm đánh dấu CursorLineNr, áp dụng cho số dòng cho dòng con trỏ khi set cursorlinebật.

Tôi nhận thấy rằng việc sử dụng con trỏ cũng thay đổi màu sắc cho một nhóm đánh dấu khác SpecialKey, áp dụng nếu bạn có, ví dụ:

 set list listchars=tab:\|_,trail:-

Vấn đề với tôi là tôi sử dụng nền tối (và do đó, một con trỏ tối). SpecialKeyCài đặt bình thường của tôi cũng rất tối, do đó các listcharbiểu tượng chỉ hiển thị bên lề. Nhưng sử dụng cursorline chúng là màu trắng , khiến cho trailchar không thể phân biệt được với việc thực sự đánh -. Ký tự dấu vết được sử dụng mỗi khi bạn nhập một khoảng trắng ở cuối dòng, vì vậy đây không chỉ là vấn đề nhỏ; thông thường việc gõ một dòng từ đầu đến cuối bao gồm một số khoảng trắng nên dễ dàng phân biệt với một lỗi đánh máy trong khi làm việc (hoặc ngược lại, một lỗi đánh máy không gian khi bạn dự định một dấu gạch ngang).

Vì không có nhóm nổi bật nào khác dường như bị ảnh hưởng, nên một cái gì đó giống như CursorLineNrđược áp dụng, nhưng nhìn qua hidanh sách tôi không thấy gì phù hợp.

Có ai biết đây là gì? Tốt hơn nữa, có ai biết cách sửa đổi bất kỳ nhóm tô sáng nào cho con trỏ không?


2
Tôi chỉ làm nổi bật dòng con trỏ một thời gian ngắn sau khi tôi đã nhảy 2 dòng trở lên. Khi tôi đang chỉnh sửa văn bản, con trỏ sẽ tắt. Nếu bạn có thể quen với hành vi đó, nó có thể giảm thiểu vấn đề của bạn.
joeytwiddle

Câu trả lời:


8

Tôi đã vật lộn với hành vi đó trong một thời gian dài .

Về cơ bản, màu nền trước của SpecialKeydòng hiện tại được thay đổi thành màu nền trước của Normalif:

  • các cursorlinetùy chọn được kích hoạt,
  • các CursorLinenhóm nổi bật có một bộ màu nền.

Tôi chưa bao giờ có thể sửa chữa hành vi đó, bất kể tôi đã cố gắng gì. Vấn đề nằm ở đâu đó trong mã nguồn của Vim.


1
Đó không phải là câu trả lời tôi muốn! Tôi đã thay đổi char trail của mình thành ~ít gây nhầm lẫn hơn (cũng có thể tìm một số char unicode tối nghĩa để sử dụng).
goldilocks

Tôi đã thấy hành vi này ngay cả khi không có màu nền cho nhóm CthonLine. Tôi đã cố gắng vô hiệu hóa nó (tức là none), cố gắng để lại giá trị mặc định của nó (nó được gạch chân), các khoảng trắng vẫn thay đổi màu nền trước của chúng
user907860

2

Điều làm việc cho tôi là những dòng sau đây trong tôi .vimrc(dựa trên câu trả lời của Igor Mikushkin ).

autocmd BufNewFile,BufRead * call matchadd('SpecialKey', '\s\+')
autocmd BufNewFile,BufRead * call matchadd('NonText', '\n\+')

VimEnterchỉ hoạt động cho tệp đầu tiên bạn mở, không hoạt động cho các tệp / tab bạn mở sau đó. BufNewFile,BufReadđã làm việc cho đến nay cho tất cả các bộ đệm tôi đã mở.

Dòng đầu tiên bao gồm các ký tự khoảng trắng. Vim làm nổi bật họ trong SpecialKeynhóm, vì vậy chúng tôi áp dụng những phong cách đó cho họ.

Dòng thứ hai bao gồm các dòng mới. Vim làm nổi bật họ trong NonTextnhóm, vì vậy chúng tôi áp dụng những phong cách đó cho họ. Bạn chỉ thực sự cần dòng thứ hai nếu các NonTextký tự của bạn được tô sáng khác với các SpecialKeyký tự.


Đây nên là câu trả lời.
hozza

1

Các dòng sau trong .vimrc đã khắc phục sự cố cho tôi.

au VimEnter * call matchadd('SpecialKey', '^\s\+', -1)
au VimEnter * call matchadd('SpecialKey', '\s\+$', -1)

Nó ghi đè ứng dụng kiểu khác cho các tab và dấu cách trong một dòng con trỏ.


Tại sao bạn lưu trữ matchadd()kết quả trong một biến, nếu bạn không sử dụng nó?
Christian Brabandt

@ChristianBrabandt Cảm ơn bạn, nó đã được sửa bây giờ.
Igor Mikushkin

Điều này làm việc cho tôi quá sử dụng NeoVim.
hakunin

0

Vẫn còn một "giải pháp" khác, thực sự là một loại bùn cho vấn đề này.

Tôi có các nhóm cú pháp tùy chỉnh cho những thứ như "listchars".

Như thế này:

hi WhiteSpaceChar ctermfg=251 guifg=#999999
call matchadd("WhiteSpaceChar", "[ \t]")

Bạn có thể làm một cái gì đó như thế này (mặc dù tôi đã không kiểm tra nó):

hi TrailChar ctermfg=251 guifg=#999999
" the \v in the regex is Vim's flag to use Perl-like regex syntax
call matchadd("TrailChar", "\v +$")

Nhưng có ít nhất hai vấn đề với phương pháp này:

  1. khi bạn tách một cửa sổ hoặc tạo một tab mới, v.v., phần tô sáng sẽ bị hỏng trong cửa sổ hiện tại, như thế này:

làm nổi bật không gian màu trắng bị phá vỡ, khi một cửa sổ mới mở ra

Để khắc phục điều này tôi có các chức năng đặc biệt như:

fun! ResetHiglightJS()
  set syntax=javascript
  "these are for the IndentLine plugin
  "IndentLinesDisable
  "IndentLinesEnable
endfun

cho mỗi nhóm cú pháp mà tôi thường sử dụng để sửa lỗi tô sáng bằng tay. Bạn có thể làm điều này theo cách khác như autocommands hoặc tự đặt giá trị cho tùy chọn cú pháp. Để làm cho cú pháp đặt lại công việc người ta cũng phải có điều này:

call matchadd("WhiteSpaceChar", "[ \t]")

trong mỗi tệp cú pháp tương ứng, như ~/.vim/after/syntax/javascript.vim

  1. Cách tiếp cận này không hoạt động bình thường với ít nhất một plugin - IndentLine, vì vậy tôi buộc phải sử dụng phiên bản cũ của nó bằng cách cài đặt thủ công let g:indentLine_newVersion = 0, trong đó plugin hoạt động bình thường.

Nhưng theo cách khác, cách tiếp cận này hoạt động bình thường mà không cần plugin IndentLine:

khoảng trắng có màu mong muốn trong dòng con trỏ

Và chấp nhận được với nó:

màu indentLine trong dòng con trỏ

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.