Hiển thị màu nền khác trong Vim qua 80 ký tự


134

Tôi đã thấy các mối quan tâm về bố cục cột Vim 80 , nhưng câu trả lời chỉ nêu bật nội dung thực tế vượt quá 80 ký tự. Tôi muốn mở cửa sổ Vim trên 100 cột với 80 cột ngoài cùng bên trái bằng cách sử dụng nền bình thường và bất cứ điều gì đã qua sử dụng nền hơi khác. Nền của cửa sổ Vim phải là một màu khác, không chỉ là văn bản vượt quá điểm 80 ký tự. Điều này sẽ cho thấy mức độ tôi đến gần điểm 80 mà không cần phải đi qua điểm đó trước.

Tôi không nghĩ rằng điều này hiện có thể, nhưng tôi nghĩ tôi chỉ hỏi trong trường hợp này.

Có lẽ nó có thể được thực hiện với một plugin?

TextMate Ví dụ về đánh dấu lề phải mong muốn của Vim

Bằng cách chọn "Đánh dấu lề phải" trong tùy chọn chung của TextMate, bạn có thể thấy một ví dụ về hành vi Vim mong muốn.

Ví dụ đánh dấu lề phải của TextMate


Câu trả lời:


223

Nếu bạn có Vim> = v7.3, bạn chỉ cần thêm phần này .vimrcvào phần tô sáng 81 trở đi (vì vậy 80 là cột hợp lệ cuối cùng của bạn):

let &colorcolumn=join(range(81,999),",")

Nếu bạn không nhìn thấy một điểm nổi bật, bạn có thể không có một ColorColumnbộ màu nổi bật. Thêm cái này (điều chỉnh cho phù hợp với sở thích của bạn):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Bây giờ tôi muốn làm nổi bật cột 80 cũng như 120 trở đi, vì vậy tôi có các dấu "cảnh báo" và "nguy hiểm" riêng biệt. Bạn có thể làm như vậy:

let &colorcolumn="80,".join(range(120,999),",")

Thí dụ

Đây là một ảnh chụp màn hình của GVim chỉnh sửa của tôi .vimrc.

GVim chỉnh sửa .vimrc của tôi

Tôi sử dụng phông chữ Ubuntu Mono 11 và bảng màu molokai . Bạn có thể tìm thấy cấu hình vim của tôi và tất cả các dotfiles của tôi trên GitHub.


3
colorcolumn được giới hạn ở 256 định nghĩa, mỗi :help colorcolumn... ngoài ra, cài đặt của tôi dường như bị cắt ngắn ở một độ dài nào đó khi sử dụng kỹ thuật nối của bạn, mặc dù tôi không thể được tìm kiếm thông qua nguồn của vim để tìm ra độ dài đó là bao nhiêu. Ngoài ra, vim phân tích giá trị của cài đặt này dưới dạng chuỗi mỗi lần vào cửa sổ, khởi tạo bộ đệm, v.v., vì vậy đây là một cách tốn kém để đạt được kết quả mong muốn.
cptstubing06

15
Dotfiles của bạn là HOT.
obfk

1
Cảm ơn bạn đã đăng bài này, chính xác là những gì tôi đang tìm kiếm! Chỉ còn một câu hỏi nữa, có cách nào để không đặt quy tắc này thành một loại tệp cụ thể (.md) không?
David Dias

1
@DavidDias Chắc chắn! Bạn có thể làm một cái gì đó như autocmd FileType markdown let &colorcolumn=""để bỏ đặt nó hoàn toàn.
Justin Force

1
cập nhật liên kết đến cấu hình vim
reergymerej

78

Đánh dấu cột 81

:set textwidth=80
:set colorcolumn=+1

Bạn cũng có thể thực hiện một số kiểu dáng:

:hi ColorColumn guibg=#2d2d2d ctermbg=246

2
Điều này và cũng có thể làm nổi bật lên tới 256 cột, nhưng thật không may, nó cần một danh sách các cột để làm nổi bật và không có tốc ký nào cho nó, vì vậy bạn sẽ phải làm gì đó như vân vân :set colorcolumn=+1,+2,+3,+4,+5,+6có thể +256mở rộng ra bạn nghĩ rằng bạn thích lề phải của bạn. Tuy nhiên, điều này sẽ chỉ làm nổi bật các dòng tồn tại trong bộ đệm, không phải tất cả các dòng trong cửa sổ.
mkomitee

1
@Dyslexic Tangent: Tại sao không làm nổi bật 80 cột đầu tiên thay thế?
brice

1
Tôi đã không nghĩ về điều đó. Đặt nền của bạn thành màu bạn muốn sử dụng để tô sáng> 80 cột và đặt màu sắc cho tất cả các cột từ 1-80 và đặt nhóm tô sáng cho màu sắc thành màu bạn muốn làm nền bình thường.
mkomitee

2
Một câu hỏi, trong khi tôi có thể đặt màu chính xác bằng cách nhập :hi colorcolumn ...nó dường như không hoạt động khi tôi đặt nó vào .vimrc. Bạn có biết làm thế nào để làm điều đó?
robbrit

Tôi đang gặp vấn đề tương tự như robbrit - Nếu tôi chạy lệnh tô sáng ở chế độ ex, nó có vẻ tốt, nhưng nếu tôi có nó trong tệp vimrc của mình, nó sẽ phá hủy màu sắc của tôi ...
Bennidhamma

16

Giải pháp đề xuất trong nhận xét trên. Làm nổi bật nền của bạn trước sau đó làm nổi bật màu đen ColorColumn dưới dạng lớp phủ. Đặt màu của bạn thành các dòng 1-80.

hi Normal guibg=#32322f ctermbg=236
hi NonText guibg=#32322f ctermbg=236
hi ColorColumn guibg=#000000 ctermbg=0
let &colorcolumn=join(range(1,80),",")

1
Điều này là đơn giản nhưng rực rỡ. Cảm ơn!
không kích

8

thử:

:/\%>80v./+

nó sẽ đánh dấu +80 ký tự là lỗi


Thật thông minh trong một nhúm. Tôi thích nó vì nó thích nghi với sự thay đổi chủ đề. Cảm ơn.
Benjamin

0

Tôi không nghĩ rằng có thể có những gì bạn muốn, nhưng tôi làm theo câu hỏi này vì bản thân tôi quan tâm đến một điều như vậy.

Có thể, tôi đang nói rõ ràng, nhưng bạn có thể thiết lập mức cao nhất trong các cột thứ 70 + để có được một dấu hiệu cho thấy bạn tiến gần đến cột thứ 80 như thế nào.


0

Đối với những người sử dụng onedark.vim như tôi muốn có giải pháp được đăng bởi Conner, tôi đã thêm những dòng này vào tệp vimrc của mình

let &colorcolumn=join(range(1,80),",")
let g:onedark_color_overrides = {
  \ "black": {"gui": "#2C323C", "cterm": "236", "cterm16": "8"},
  \ "cursor_grey": {"gui": "#282C34", "cterm": "235", "cterm16": "0"}
  \ }

Tôi chỉ trao đổi hai giá trị, lấy nó từ mã nguồn của onedark

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.