อะไร: set background = dark ทำอะไร


35

ฉันไม่ได้ใส่ในของฉันcolor xxx ดังนั้นผมจึงเห็นนี้เมื่อครั้งแรกที่ผมเปิดของฉัน.vimrc.vimrc

:colorให้ฉันdefaultที่นี่ ก่อนอะไร

:color darculaแล้วฉันพิมพ์ และมันเปลี่ยนไปเป็นแบบนี้

:colorให้ฉันdarculaที่นี่ (โดยธรรมชาติ) เปลี่ยน colorcheme

:set background=darkแล้วฉันพิมพ์ และมันเปลี่ยนไปเป็นแบบนี้

:colorให้ฉันdefaultที่นี่ (น่าอัศจรรย์) เปลี่ยนพื้นหลัง

ดังนั้นคำถามของฉันคือ:set background=darkทำอะไรกันแน่

ฉันพยายาม:h backgroundและไม่พบสิ่งใดที่เป็นประโยชน์ ฉันเข้าใจว่าคำสั่งนี้ไม่ได้เปลี่ยนพื้นหลังจริงเพียงกลุ่มจะเปลี่ยนสีตาม แต่ฉันยังต้องการถามคำถามนี้ เพราะฉันมีความสุขจริงๆที่มีสีหลัง:color darculaและ:set background=darkดังนั้นผมจึงสงสัยว่าจะเขียนโทนสีของตัวเองโดยไม่ต้องใส่ในของฉันset background=dark.vimrc

ผมเอาคำแนะนำจาก @statox และใส่ที่บรรทัดสุดท้ายของฉันset background=dark darcula.vimจากนั้นcolor darculaให้ภาพหน้าจอที่สามให้ฉัน อย่างไรก็ตามเมื่อฉันวางไว้ที่บรรทัดแรกcolor darculaให้ภาพหน้าจอที่สองให้ฉัน นอกจากนี้ยังset bg=darkมีการเปลี่ยนแปลงไปยังหน้าจอที่สาม

ฉันสันนิษฐานโดยวางไว้ที่บรรทัดแรกฉันบอกเป็นกลุ่มว่า colorcheme นี้ถูกออกแบบมาสำหรับพื้นหลังสีเข้ม โดยการวางไว้ที่บรรทัดสุดท้ายในทางตรงกันข้ามฉันปล่อยให้สันนิษฐานว่า colorcheme นี้ถูกออกแบบมาสำหรับพื้นหลังแสงแล้วทำให้เป็นกลุ่มเปลี่ยนแปลงบางส่วนด้วยตัวเอง (เมื่อมันประมวลผลบรรทัดสุดท้าย)

หากสิ่งที่ฉันคิดว่าเกิดขึ้นจริงคำถามของฉันยังไม่ได้ตอบ เสียงเรียกร้องอะไรที่เปลี่ยนแปลงไปอย่างแน่นอนเมื่อฉันใช้set bg=darkAFTER มันได้โหลด colorcheme แสงหรือไม่

การกำหนดค่า vim ทั้งหมดของฉันมีอยู่ที่https://github.com/MichaelMa2014/.vim


1
สำเนาที่เป็นไปได้ของทำไมลำดับของ: set bg = dark และ: set bg = light matter?
muru

@muru ทักทาย! ฉันได้อ่านคำถามนี้ก่อนถามฉัน มันถูกกล่าวถึงในโพสต์นั้น:set bg=lightและ:set bg=darkไม่ได้ตรงกันข้าม แต่สิ่งที่พวกเขาจะไม่อธิบาย นอกจากนี้ยังโพสต์นั่นคือเหตุผลที่ฉันต้องการที่จะหลีกเลี่ยงในของฉัน:set background=dark .vimrc
Michael Ma

คำตอบ:


32

จะเกิดอะไรขึ้นเมื่อคุณ :set background

กลไกพื้นฐานโดยที่:set backgroundทำงานเป็นจริงง่ายสวยและเป็นเอกสาร (ถึงแม้จะไม่ได้โดยเฉพาะอย่างเห็นได้ชัด) :help 'background'ใน

เมื่อตั้งค่า 'พื้นหลัง' เป็นกลุ่มจะปรับกลุ่มสีเริ่มต้นสำหรับค่าใหม่ แต่สีที่ใช้สำหรับการเน้นไวยากรณ์จะไม่เปลี่ยนแปลง g: colors_name
เมื่อมีการโหลดชุดรูปแบบสี (ตัวแปร "g: colors_name" ถูกตั้งค่าไว้) การตั้งค่า 'พื้นหลัง' จะทำให้ชุดรูปแบบสีถูกโหลดใหม่ หากโทนสีปรับเป็นค่าของ 'พื้นหลัง' สิ่งนี้จะทำงาน อย่างไรก็ตามหากโทนสีชุด 'พื้นหลัง' ตัวเองผลอาจจะยกเลิก

ดังนั้นสิ่งที่เกิดขึ้นจริงเมื่อ'background'ตัวเลือกมีการเปลี่ยนแปลงคือ:

หากไม่มีโครงร่างสีถูกโหลดในปัจจุบัน

Vim โหลดสีเริ่มต้นใหม่โดยใช้สีพื้นหน้าซึ่งถือว่าเหมาะสมสำหรับการตั้งค่าใหม่ของ 'background'

หากโทนสีถูกโหลดในปัจจุบัน

เป็นกลุ่มโหลดรูปแบบสี เมื่อโทนสีถูกโหลดชุดรูปแบบสีจะตั้งค่าสีที่เหมาะสมกับการตั้งค่าใหม่'background'หรือชุดรูปแบบสีจะรีเซ็ต 'background'เป็นค่าเก่า

ตามที่คุณได้อธิบายไปแล้ว'background'ตัวเลือกไม่ได้มีวัตถุประสงค์เพื่อตั้งค่า พื้นหลัง แต่ให้แจ้ง Vim แทนว่าพื้นหลังมืดหรือสว่าง

ดังนั้นหากโทนสีรีเซ็ต'background', 'background'กลุ่มจะใช้เวลานี้หมายความว่าโทนสีก็ไม่ได้สนับสนุนการตั้งค่าใหม่ของ เนื่องจากผู้ใช้ระบุว่าพวกเขากำลังใช้พื้นหลังดังกล่าวซึ่งหมายความว่าโทนสีในปัจจุบันไม่เหมาะสมอีกต่อไปดังนั้นเสียงเรียกเข้าจะไม่ถูกลบ g:colors_nameแล้วจึงโหลดสีเริ่มต้น

หากคุณต้องการที่จะสำรวจรหัสจริงที่ทำงานเมื่อ'background'มีการตั้งค่าที่คุณสามารถเริ่มต้นที่นี่

เกิดอะไรขึ้นในการติดตั้งของคุณ

พฤติกรรมแปลก ๆ ที่คุณอธิบาย (ในรุ่นแรกของคำถามของคุณ) สามารถอธิบายได้จากบรรทัดนี้ในเอกสารที่ยกมาด้านบน:

เมื่อโหลดชุดรูปแบบสี(ตัวแปร "g: colors_name" ถูกตั้งค่าไว้)

ปัญหาคือว่าคุณcolors/darcula.vimไฟล์ไม่ได้กำหนดค่านี้และดังนั้นแม้ว่าสีเปลี่ยนไปเมื่อคุณเรียก:color darcula, เสียงเรียกเข้าไม่ได้พิจารณาโทนสีให้ขณะโหลด

ดังนั้นเมื่อคุณเรียกใช้:set background=darkVim ดำเนินการตามขั้นตอนในส่วน "หากไม่มีชุดรูปแบบสีที่กำลังโหลด" ด้านบนและตั้งค่าสีเริ่มต้นสำหรับพื้นหลังสีเข้ม นี้อธิบายว่าทำไมรายงานแล้ว:color default

(อย่างไรก็ตามโปรดทราบว่าการตั้งค่าสีเริ่มต้นไม่เป็นไปตามที่คุณคาดไว้ให้ลบสีทั้งหมดที่เคยตั้งค่าไว้ก่อนหน้านี้และนี่คือสาเหตุที่คุณลงเอยด้วยผลลัพธ์ที่คุณเห็นแทนที่จะเป็นสีที่ปรากฏเมื่อคุณ เริ่มต้น Vim เป็นครั้งแรกมีการสนทนาของปัญหานี้ที่นี่ )

ในระยะสั้นรูปแบบสีของคุณถูกกำหนดค่าไม่ถูกต้อง: ดู:edit $VIMRUNTIME/colors/README.txt(โดยเฉพาะในส่วนที่ด้านล่าง) สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนี้และการโต้ตอบระหว่าง'background'และชุดรูปแบบสี


ขอบคุณมาก! ฉันรู้สึกเข้าใจอย่างสมบูรณ์เมื่อคุณพูดว่า "ไม่อย่างที่คุณคาดหวังเอาสีทั้งหมดที่เคยตั้งค่าไว้" ฉันจะไปอ่านการสนทนาอย่างแน่นอน!
Michael Ma

4

เอกสารที่:h 'background' ควรให้ข้อมูลทั้งหมดที่คุณต้องการ:

เมื่อตั้งค่าเป็น "dark" Vim จะพยายามใช้สีที่ดูดีบนพื้นหลังสีเข้ม เมื่อตั้งค่าเป็น "light" Vim จะพยายามใช้สีที่ดูดีบนพื้นหลังสีอ่อน ค่าอื่นใดที่ผิดกฎหมาย

colorscheme ของคุณกำหนด 2 กลุ่มสี: สีที่ใช้บนพื้นหลังสีอ่อนและสีที่ใช้บนพื้นหลังสีเข้ม backgroundตัวเลือกที่จะบอกเป็นกลุ่มซึ่งกลุ่มของสีที่กำหนดโดยสกีมสีของคุณควรจะใช้

การตั้งค่าตัวเลือกนี้จะไม่เปลี่ยนสีพื้นหลัง แต่จะแจ้งให้ Vim ทราบว่าสีพื้นหลังเป็นอย่างไร :h :hi-normalสำหรับการเปลี่ยนสีพื้นหลังให้ดู

เมื่อตั้งค่า 'พื้นหลัง' เป็นกลุ่มจะปรับกลุ่มสีเริ่มต้นสำหรับค่าใหม่ แต่สีที่ใช้สำหรับการเน้นไวยากรณ์จะไม่เปลี่ยนแปลง

นั่นคือการติดตามของย่อหน้าก่อนหน้า: มันเป็น colorcheme ที่กำหนดกลุ่มของสีและbackgroundเลือกหนึ่งในกลุ่มเหล่านี้

ในที่สุดหากคุณต้องการที่จะเขียนชุดสีของคุณเองโดยไม่ต้องใส่set background=darkvimrc ของคุณจำไว้ว่า colorscheme ไม่มีอะไรมากไปกว่าโปรแกรมใน vimscript ดังนั้นจึงไม่มีอะไรหยุดคุณจากการใช้คำสั่งโดยตรงในรหัสของ colorcheme เช่นjellybeansหรือฝึกงาน


1
ขอขอบคุณ! ฉันใส่set background=darkในการผลิตและผลเช่นเดียวกับเมื่อฉันใส่ไว้ในdarcula.vim .vimrcแต่ฉันก็ยังอยากรู้อยากเห็นว่า "ลองใช้สีที่ดูดีบนพื้นหลังสีดำ" ได้อย่างไร? มีการทำแผนที่หรืออะไรทำนองนั้นที่กำหนดไว้ที่ไหนสักแห่ง?
Michael Ma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.