2011-09-08 11 views
7

Tôi tìm thấy mã sau đây sẽ làm nổi bật tất cả khoảng trống không cần thiết, nhưng tôi thực sự muốn nó cũng làm nổi bật tất cả các tab trong mã của tôi. Tôi chơi xung quanh với rất nhiều biến thể không hoạt động nhưng tôi không thể tìm thấy một regex có thể làm cả hai. Bất kỳ ý tưởng?Làm thế nào tôi có vim làm nổi bật không gian trắng dư thừa và tất cả các tab?

highlight RedundantWhitespace ctermbg=red guibg=red 
match RedundantWhitespace /\s\+$\| \+\ze\t/ 

Edit: thêm mẫu theo yêu cầu:

Được rồi vì vậy trong các mẫu dưới đây, tôi đang sử dụng \ t để đại diện cho tab và% đại diện cho một khoảng trắng đuôi mà tôi muốn vim để làm nổi bật màu đỏ.

/tOh hi here is some text%%%% 
/t/tHere is some indented text%%% 

Vì vậy, trên dòng đầu tiên có 1 tab sẽ có khoảng trắng được đánh dấu màu đỏ và 4 dấu cách để đánh dấu màu đỏ. Trên dòng thứ hai có 2 tab và 3 dấu trắng phía sau để đánh dấu màu đỏ.

+0

Nếu bạn có thể đưa ra một số mẫu và mẫu đối chiếu sẽ giúp việc so khớp các mẫu được nói với một regex dễ dàng hơn. Thử nghiệm theo hướng phát triển;) –

+0

Sau khi đấu tranh với điều này tôi phải đề cập đến điều này đã được trong .gvimrc, không phải .vimrc! – philant

Trả lời

4

Từ nhận xét của bạn về câu trả lời khác:

Không Tôi đang tìm nó để làm nổi bật tất cả các tab và tất cả các dấu không gian. Tôi thực sự muốn xác định bất kỳ và tất cả các tab

Điều này có làm những gì bạn muốn không?

match RedundantWhitespace /\s\+$\|\t/ 

Về con người, đây là:

trận đấu bất kỳ dấu cách ở phần cuối của một dòng, hoặc bất kỳ tab bất cứ nơi nào

Dường như để chọn khoảng trắng trong ví dụ của bạn .

+0

Tôi đã tìm ra và trả lời câu hỏi của mình. Điều đó làm nó hoàn hảo. Tôi đã quen với việc sử dụng regex | cho hay vì vậy tôi nghĩ \ | đã trốn thoát nó nhưng không phải vậy. Đó thực sự vẫn là một hoặc. Dù sao, tôi upvoted tất cả những người đã gửi một câu trả lời và tôi đánh giá cao sự giúp đỡ của mọi người. Đây là những gì tôi cần mặc dù. Cảm ơn –

+0

@ John: Vâng. Như bạn đã nói, '\ |' là dành cho "hoặc" trong VIM. '|' không phải là - nó là ký tự chữ. Gõ ': help regex' và đây là điều đầu tiên bật lên :) Điều này cũng có thể giúp: http://vimdoc.sourceforge.net/htmldoc/usr_27.html –

+1

Thay vì sử dụng ký tự' \ | ', tôi sẽ tìm thấy nó rõ ràng hơn để có hai câu lệnh đối sánh riêng biệt, một cho dấu cách trắng và một cho các tab. Điều này làm cho nó minh bạch hơn và dễ bảo trì hơn. Nhưng đó chỉ là sở thích cá nhân của tôi. –

8

Tôi khuyên bạn nên sử dụng listchars thay vì làm nổi bật cú pháp. Điều này sẽ làm việc trên bảng cho tất cả các loại tệp. Bạn có thể sử dụng listchars cho dấu không gian quá, và gây rối với các màu sắc cũng như:

set listchars=tab:»·,trail:· 
set list 
hi SpecialKey ctermbg=red ctermfg=red guibg=red guifg=red 

Lưu ý rằng nền và foreground màu sắc đều giống nhau ở đây, vì vậy bạn kết thúc nhìn thấy màu đỏ "khối" cho dấu không gian và các tab .

+0

Ahh đó là một con số thấp. Tôi thực sự chỉ muốn các nhân vật được đánh dấu màu đỏ và đó là nó. Điều này cho biết thêm một loạt các biểu tượng –

+0

Câu hỏi hay hơn: Có cách nào để làm cho màu này trở nên chắc chắn để bạn không thể thấy bất kỳ thứ gì khác ngoài màu đỏ? Có nghĩa là không có màu nền trước? –

+0

Đặt màu nền trước và màu nền giống nhau? Tôi đã cập nhật ví dụ trên để thực hiện việc này.Các ký tự vẫn ở đó, nhưng chúng chỉ xuất hiện dưới dạng các khối màu đỏ trừ khi bạn đặt con trỏ lên chúng. – overthink

1

Tôi nghĩ rằng bạn muốn sử dụng \zs (đối với "bắt đầu") chứ không phải là \ze (đối với "kết thúc"):

highlight RedundantWhitespace ctermbg=red guibg=red 
match RedundantWhitespace /\s\+$\| \+\zs\t/ 

Điều đó sẽ vẫn chỉ làm nổi bật tab đó đều bắt đầu bằng một hoặc nhiều không gian, mặc dù . Không chắc chắn nếu đó là những gì bạn muốn hay không. Dưới đây là một phiên bản đó sẽ làm nổi bật tất cả các tab:

highlight RedundantWhitespace ctermbg=red guibg=red 
match RedundantWhitespace /\s\+$\|\t/ 
+0

Không, tôi đang tìm kiếm nó để làm nổi bật mọi tab và tất cả các dấu cách. Tôi thực sự đang tìm cách xác định bất kỳ và tất cả các tab. –

+0

Sau đó, chỉ cần thay đổi sang phiên bản thứ hai mà tôi đã thêm ở trên. . . –

+0

Phiên bản của bạn thực sự dường như không làm nổi bật bất kỳ tab nào cả. –