2008-12-27 34 views
17

Tôi muốn vim tô màu các đường "dài" cho tôi. Sử dụng 80 cột làm ví dụ, tôi muốn làm nổi bật các dòng vượt quá độ dài đó. Dưới đây là những gì tôi nghĩ rằng các tập tin .vimrc nên chứa, mặc dù nó (1) không hoạt động, và (2) sử dụng cú pháp regex Perl để minh họa quan điểm của tôi, bởi vì tôi không biết Vim cũng đủ:Màu cú pháp Vim: Làm thế nào để tô sáng các dòng dài?

... 
highlight Excess ctermbg=0 
au Syntax * syn match Excess /.{80,}$/ 
... 

Điều này (trong tâm trí của tôi ít nhất) nên đánh dấu các dòng vượt quá 80 cột. Những gì tôi lý tưởng nhất là khả năng tô màu chỉ một phần của dòng vượt quá 80 cột, vì vậy nếu một dòng là 85 cột, thì cột 81 đến 85 sẽ được tô sáng.

Tôi chắc chắn rằng Vim có thể làm điều này, không phải với tôi ở vị trí lãnh đạo.

+1

+1. Câu hỏi tuyệt vời! Bây giờ, tôi không có đầu mối về câu trả lời, nhưng tôi sẽ tiếp tục theo dõi. – PEZ

+1

Có thể colorcolumn có thể là một cái gì đó cho bạn. –

Trả lời

26

tôi cần autocomand để làm việc cho tôi:

augroup vimrc_autocmds 
    autocmd BufEnter * highlight OverLength ctermbg=darkgrey guibg=#111111 
    autocmd BufEnter * match OverLength /\%75v.*/ 
augroup END 

Cũng giống như ý tưởng của việc sử dụng 75 nếu bạn đang nhắm tới 80 cột trung bình.

Trích từ:

http://blog.ezyang.com/2010/03/vim-textwidth/

lý do có thể khiến nó không thành công mà không BufEnter: đánh dấu + trận đấu chỉ có thể được sử dụng một lần. Nhiều cách sử dụng có nghĩa là những cái cũ bị ghi đè. How to add multiple highlights

+0

Cảm ơn. Đã không làm việc cho tôi cho đến khi tôi sử dụng giải pháp của bạn. – jononomo

+0

Để tránh làm nổi bật ký tự cuối dòng, bạn nên thay đổi regex thành: '/ \%> 74v. \ + /' Http://stackoverflow.com/questions/235439/vim-80-column-layout-concerns# comment2448229_235970 – Wex

1

tôi sử dụng phương pháp sau đây:

hi gitError ctermbg=Red 
match gitError /^.*\s$/ 
2match gitError /^.\{120\}.*$/ 

(Những trận đấu một số git trước cam kết móc)

Dòng thứ hai nên có interrest cho bạn.

+0

Cảm ơn bạn. Điều này (/^.\{120\}.*$/) làm nổi bật toàn bộ dòng - bất kỳ ý tưởng nào về việc chỉ làm nổi bật từ các ký tự 121 trở đi? –

+0

Xin lỗi, không có ý kiến. Vấn đề là nó có thể không được thực hiện với regexps. Bạn biết đấy, nó sẽ đòi hỏi một máy xếp chồng. – terminus

+0

Bạn chỉ có thể đánh dấu 80 ký tự đầu tiên. Tôi biết, không chính xác những gì bạn muốn, nhưng bạn sẽ thấy dư thừa khá rõ ràng anyway. – PEZ

15

Tôi có điều này trong vimrc của mình.
tôi tìm thấy nó ở đây: Vim 80 column layout concerns

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9 
match OverLength /\%81v.*/ 

Bạn có thể muốn điều chỉnh màu sắc để sở thích của bạn.

+2

+1.Bây giờ, nếu ai đó có thể giải thích lý do tại sao công trình đó sẽ giúp tôi rất nhiều bởi vì tôi không hiểu. – PEZ

+10

Điều này chỉ hoạt động đối với tệp đầu tiên bạn mở trong bất kỳ bộ đệm nào có sẵn – gravitation

+1

@BrandonThomson có cách nào đó không? Hoặc một cách khác? –

2

Vì tôi không thích điểm đánh dấu cột Vim 7.3, tôi chỉ sử dụng văn bản đánh dấu sau cột 80 ... ít nhất đó là những gì tôi muốn 95% thời gian.

Đối với 5% còn lại của thời điểm đó, tôi đã viết phần mở rộng nhỏ này cũng phải có một cách nhanh chóng để vô hiệu hóa nổi bật:

https://gist.github.com/fgarcia/9704429#file-long_lines-vim

+0

Tôi chỉ đang tìm kiếm một cách nhanh chóng để chuyển đổi điều đó. Plugin của bạn thật tuyệt vời. –

+0

Mặc dù tôi muốn nó nếu chuyển đổi các tab đã không kích hoạt lại đánh dấu nếu tôi đã tắt nó. –

+1

Tôi nghĩ rằng nên được giải quyết bằng cách sử dụng BufRead (có thể BufAdd ??) thay vì BufEnter trong dòng đầu tiên. Hãy cho tôi biết nếu điều đó phù hợp với bạn – SystematicFrank

1

này sử dụng một autocommand để điều chỉnh giá trị OverLength để phù hợp với bạn loại tệp.

" highlight lines longer than `textwidth` size for each filetype 
autocmd FileType * 
    \ if &textwidth | 
    \ exec 'match OverLength /\%' . string(&textwidth+2) . 'v.*/' | 
    \ endif 
Các vấn đề liên quan