Không làm gì: đặt nền = tối làm gì?


35

Tôi đã không đặt color xxxtrong của tôi .vimrc. Vì vậy, tôi thấy điều này khi lần đầu tiên mở .vimrc.

:colorđưa tôi defaultđến đây Trước bất cứ điều gì

Rồi tôi gõ :color darcula. Và nó thay đổi điều này.

:colorcho tôi darculaở đây (tự nhiên). Thay đổi màu sắc

Rồi tôi gõ :set background=dark. Và nó thay đổi điều này.

:colorcho tôi defaultở đây (đáng kinh ngạc). Thay đổi nền

Vì vậy, câu hỏi của tôi là, chính xác những gì :set background=darklàm?

Tôi đã thử :h backgroundvà không tìm thấy bất cứ điều gì hữu ích. Tôi hiểu rằng lệnh này không thực sự thay đổi nền, chỉ vim sẽ thay đổi màu sắc tương ứng. Nhưng tôi vẫn muốn hỏi câu hỏi này. Bởi vì tôi thực sự hài lòng với màu sắc sau đó :color darcula:set background=darkvì vậy tôi tự hỏi làm thế nào để viết bảng màu của riêng tôi mà không cần phải đặt set background=darkvào .vimrc.

Tôi đã nhận lời khuyên từ @statox và đặt set background=darkở dòng cuối cùng của tôi darcula.vim. Sau đó color darculađưa cho tôi ảnh chụp màn hình thứ ba. Tuy nhiên khi tôi đặt nó ở dòng đầu tiên, color darculađưa cho tôi ảnh chụp màn hình thứ hai. Cũng set bg=darkthay đổi nó để ảnh chụp màn hình thứ ba.

Tôi giả sử bằng cách đặt nó ở dòng đầu tiên, tôi nói với vim rằng màu sắc này được thiết kế cho một nền tối. Bằng cách đặt nó ở dòng cuối cùng, ngược lại, tôi cho vim giả định rằng màu sắc này được thiết kế cho nền sáng và sau đó làm cho vim tự thay đổi một số trong đó (khi nó xử lý dòng cuối cùng).

Nếu những gì tôi cho là đã xảy ra là đúng, câu hỏi của tôi vẫn chưa được trả lời. Chính xác thì vim đã thay đổi điều gì, khi tôi sử dụng set bg=darkSAU KHI nó đã tải một bảng màu sáng?

Toàn bộ cấu hình vim của tôi có sẵn tại https://github.com/MichaelMa2014/.vim



@muru Chúc mừng! Tôi đã đọc câu hỏi này trước khi hỏi tôi. Nó được đề cập trong bài đăng đó :set bg=light:set bg=darkkhông đối nghịch, nhưng chính xác những gì họ không được giải thích. Ngoài ra bài viết đó là lý do tại sao tôi muốn tránh :set background=darktrong của tôi .vimrc.
Michael Ma

Câu trả lời:


32

Điều gì xảy ra khi bạn :set background

Cơ chế :set backgroundhoạt động cơ bản thực sự khá đơn giản và được ghi lại (mặc dù không đặc biệt rõ ràng) :help 'background'.

Khi 'nền' được đặt, Vim sẽ điều chỉnh các nhóm màu mặc định cho giá trị mới. Nhưng màu sắc được sử dụng để làm nổi bật cú pháp sẽ không thay đổi. g: colors_name
Khi một lược đồ màu được tải (biến "g: colors_name" được đặt) thiết lập 'nền' sẽ khiến cho bảng màu được tải lại. Nếu bảng màu điều chỉnh theo giá trị của 'nền' thì nó sẽ hoạt động. Tuy nhiên, nếu bảng màu tự đặt 'nền', hiệu ứng có thể được hoàn tác.

Vì vậy, những gì thực sự xảy ra khi 'background'tùy chọn được thay đổi là:

Nếu không có bảng màu hiện đang được tải

Vim tải lại các màu mặc định, sử dụng các màu nền trước được coi là phù hợp cho cài đặt mới của 'background'

Nếu một bảng màu hiện đang được tải

Vim tải lại bảng màu. Khi bảng màu được tải, bảng màu sẽ đặt màu phù hợp với cài đặt mới 'background'hoặc bảng màu đặt lại 'background' giá trị cũ.

Như bạn đã mô tả, 'background'tùy chọn này không có ý định đặt nền, mà thay vào đó để thông báo cho Vim xem nền có tối hay sáng không.

Vì vậy, nếu bảng màu đặt lại 'background', Vim lấy điều này có nghĩa là bảng màu đơn giản là không hỗ trợ cài đặt mới 'background'. Vì người dùng đã chỉ ra rằng họ đang sử dụng một nền như vậy, điều này có nghĩa là bảng màu hiện tại không còn phù hợp nữa, và vì vậy Vim bỏ cài đặt g:colors_namevà sau đó tải lại các màu mặc định.

Nếu bạn muốn khám phá mã thực tế được chạy khi 'background'được đặt, bạn có thể bắt đầu ở đây .

Những gì đang xảy ra trong cài đặt của bạn

Hành vi kỳ quặc mà bạn mô tả (trong phiên bản đầu tiên của câu hỏi của bạn) có thể được giải thích bằng dòng này trong tài liệu được trích dẫn ở trên:

Khi một bảng màu được tải (biến "g: colors_name" được đặt)

Vấn đề là colors/darcula.vimtệp của bạn không đặt giá trị này và do đó, mặc dù màu sắc thay đổi khi bạn gọi :color darcula, Vim không xem xét một bảng màu hiện đang được tải.

Do đó, khi bạn gọi :set background=darkVim, hãy thực hiện bước trong phần "Nếu không có bảng màu hiện đang được tải" ở trên và đặt màu mặc định cho nền tối. Điều này giải thích tại sao :colorsau đó báo cáo default.

(Tuy nhiên, lưu ý rằng cài đặt màu mặc định sẽ không , như bạn mong đợi, sẽ xóa tất cả các màu đã được đặt trước đó và đây là lý do tại sao bạn kết thúc với kết quả bạn nhìn thấy, thay vì màu được hiển thị khi bạn bắt đầu Vim ở nơi đầu tiên. Có một số thảo luận về vấn đề này ở đây )

Nói tóm lại, bảng màu của bạn bị định cấu hình sai: Xem :edit $VIMRUNTIME/colors/README.txt(cụ thể là phần ở phía dưới) để biết thêm chi tiết về điều này và về sự tương tác giữa 'background'và phối màu.


Cảm ơn bạn rất nhiều! Tôi cảm thấy hoàn toàn hiểu khi bạn nói nó "không, như bạn có thể mong đợi, loại bỏ tất cả các màu đã được thiết lập trước đó". Tôi chắc chắn sẽ đi đọc các cuộc thảo luận!
Michael Ma

4

Tài liệu tại :h 'background' nên cung cấp tất cả thông tin bạn cần:

Khi được đặt thành "tối", Vim sẽ cố gắng sử dụng các màu trông đẹp trên nền tối. Khi được đặt thành "ánh sáng", Vim sẽ cố gắng sử dụng các màu trông đẹp trên nền sáng. Bất kỳ giá trị khác là bất hợp pháp.

Màu sắc của bạn xác định 2 nhóm màu: nhóm màu được sử dụng trên nền sáng và nhóm màu được sử dụng trên nền tối. Các backgroundtùy chọn sẽ cho vim mà nhóm các màu sắc được xác định bởi colorscheme của bạn nên được sử dụng.

Đặt tùy chọn này không thay đổi màu nền, nó cho Vim biết màu nền trông như thế nào. Để thay đổi màu nền, xem :h :hi-normal.

Khi 'nền' được đặt, Vim sẽ điều chỉnh các nhóm màu mặc định cho giá trị mới. Nhưng màu sắc được sử dụng để làm nổi bật cú pháp sẽ không thay đổi.

Đó là phần tiếp theo của đoạn trước: Đó là bảng màu xác định các nhóm màu và backgroundchọn một trong các nhóm này.

Cuối cùng, nếu bạn muốn viết bảng màu của riêng mình mà không cần phải đặt set background=darkvimrc, hãy nhớ rằng colorcheme không gì khác hơn là một chương trình trong vimscript, vì vậy không có gì ngăn bạn sử dụng lệnh trực tiếp trong mã của colorcheme của bạn, ví dụ như thạch hoặc học nghề


1
Cảm ơn bạn! Tôi đưa set background=darkvào darcula.vimvà tạo ra hiệu ứng giống như khi tôi đặt nó vào .vimrc. Nhưng tôi vẫn tò mò, chính xác thì Vim "cố gắng sử dụng màu sắc trông đẹp như thế nào trên nền tối"? Có một bản đồ hoặc một cái gì đó giống như được xác định ở đâu đó?
Michael Ma
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.