โหลด colorcheme ที่แตกต่างกันเมื่อใช้ vimdiff


142

vimdiffวิธีการโหลดสกีมสีที่แตกต่างกันเมื่อทำ

ฉันต้องการสิ่งนี้เนื่องจากชุดสีปัจจุบันของฉันไม่แสดงความแตกต่างอย่างถูกต้องในvimdiffFor. เช่นความแตกต่างบางอย่างจะแสดงด้วยสี fg / bg เดียวกัน สิ่งนี้ทำให้ยากที่จะเข้าใจความแตกต่าง ดังนั้นทุกครั้งที่ฉันทำvimdiffฉันต้องทำ:colorscheme some_other_scheme

สามารถทำได้ใน.vimrcไฟล์หรือไม่?

คำตอบ:


125

หากคุณกำลังโทรvimdiffจากบรรทัดคำสั่งให้ใส่สิ่งต่อไปนี้ใน.vimrc:

if &diff
    colorscheme some_other_scheme
endif

หากคุณกำลังใช้ vimdiff จากภายในกลุ่มคุณอาจจะต้องลบล้างคำสั่งที่คุณใช้ในการเริ่ม / หยุด (เช่นdiffthis, diffoff) โดยใช้:cnoreabbr(นอกจากนี้ยังมีปลั๊กอิน ) หรือใช้ autocommand:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre ถูกเรียกก่อนกรองผ่านโปรแกรมภายนอก (ยูทิลิตี้ diff) และ&diff-option ถูกตั้งค่าโดยกลุ่มเมื่อเข้าสู่โหมด diff (อื่น ๆ ดู:help diff)

ฉันไม่แน่ใจว่าจะใช้คำสั่งอัตโนมัติใดเพื่อกลับไปใช้ชุดสีเดิม


เป็นไปได้หรือไม่ที่จะเรียกคำสั่งมากกว่าหนึ่งคำสั่งระหว่างสองท่อ "|"? ฉันสนใจที่จะกลับไปใช้ colorcheme ดั้งเดิมหลังจากใช้ vimdiff จาก vim ด้วย ...
คนยังใช้ MS-DOS ของคุณ

1
ไปป์เป็นสิ่งทดแทนสำหรับบรรทัดใหม่คล้ายกับ;ในเชลล์สคริปต์ดังนั้นคุณสามารถเพิ่ม 'บรรทัด' ใหม่:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith

1
colorscheme some_other_schemecolor/some_other_scheme.vimจะมองผ่านเส้นทางรันไทม์ของคุณสำหรับ คุณสามารถดูรันไทม์พา ธ ของคุณได้:set runtimepath?จากภายในกลุ่ม
pabo

1
สำหรับผู้ใช้คอนโซล (เช่นตัวฉันเอง) ฉันพบว่า 'vividchalk' เป็นชุดสีที่ดีที่สุด (จากชุดการติดตั้งเริ่มต้น) สำหรับการรักษาความเปรียบต่างระหว่างความแตกต่างที่ไฮไลต์และไวยากรณ์ที่ไฮไลต์อย่างน้อยสำหรับเชลล์สคริปต์ วินาทีสุดท้ายคือ 'ตอนเย็น' หวังว่าจะช่วยได้
Conrad Meyer

ปัญหาของฉันคือการขาดความแตกต่างกับการเน้นไวยากรณ์ซึ่งทำให้ข้อความทั้งหมดหายไปในการระบายสีที่แตกต่างกัน ฉันใช้ ': syntax off' ตามที่จำเป็นในอดีต แต่เพิ่งเพิ่มลงใน. vimrc ของฉันในเพรดิเคต 'if & diff' และตอนนี้บันทึกการกดแป้นบางส่วน
qneill

168

ฉันไม่รู้ว่าเหตุใดกลุ่มหนึ่งจึงใช้สีจำนวนมากในการไฮไลต์มันไม่ได้ช่วยให้คุณเข้าใจว่าเกิดอะไรขึ้น

ฉันแก้ไข colorcheme ของฉันให้ใช้เพียงสีเดียวในการไฮไลต์ (และอีกสีหนึ่งเพื่อแสดงว่ามีความแตกต่างภายในเส้นตรงไหน) และมันสร้างความแตกต่างทั้งหมด

ก่อน

ป้อนคำอธิบายภาพที่นี่

หลังจาก

colorcheme_sc screenshot

ฉันทำได้โดยเพิ่มสิ่งต่อไปนี้ที่ส่วนท้ายของไฟล์ colorscheme ของฉัน ( ~/.vim/colors/mycolorscheme.vim)

highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
  • cterm - กำหนดสไตล์
  • ctermfg - ตั้งค่าสีข้อความ
  • ctermbg - ตั้งค่าการเน้น
  • DiffAdd - เพิ่มบรรทัดแล้ว
  • DiffDelete - สายถูกลบออก
  • DiffChange - บางส่วนของบรรทัดมีการเปลี่ยนแปลง (ไฮไลต์ทั้งบรรทัด)
  • DiffText - ส่วนที่แน่นอนของเส้นที่เปลี่ยนไป

ฉันใช้ลิงค์นี้เป็นข้อมูลอ้างอิงสำหรับตัวเลขสี

หมายเหตุ: ฉันไม่ได้ตั้งค่าตัวเลือก gui เพราะฉันใช้ colorcheme อื่นสำหรับ macvim / gvim


2
ขอบคุณ! แบบนี้ดูดีขึ้นมาก!
vitaluha

4
เช่นเดียวกับที่ pabo กล่าวในความคิดเห็นอื่นคุณอาจต้องตั้งชื่อไฟล์โทนสีของคุณเช่น mycolorscheme.vim โดยมีนามสกุล. vim อยู่ท้าย
David Winiecki

ขอบคุณ! ผู้เยาว์: ฉันคิดว่าคุณทำ "guibg" ทั้งหมดโดยไม่ได้ตั้งใจ คุณตั้งใจที่จะมีสองสี - หนึ่งสีสำหรับ DiffText และอีกสีสำหรับส่วนที่เหลือหรือไม่?
Kapil Arya

6
ทำไมเมื่อใช้สีตัวเลข (ctermbg = 17) ไม่ได้ผล แต่เมื่อใช้คำ (ctermbg = blue) - ได้ผล? .. วิธีแก้: เทอร์มินอลมี 8 สีเท่านั้น 1-7
Ricky Levi

3
MacOS โดยใช้ iTerm2 ไม่ว่าฉันจะทำอะไรฉันได้รับ: ไม่พบโทนสี '~ / .vim / colors / mycolorscheme' การคัดลอกรหัสสีโดยตรงระหว่างคำสั่ง "if & diff" ใน ~ / .vimrc เป็นเคล็ดลับ
Tony Barganski


22

ฉันพบวิธีที่ง่ายที่สุดคือวางซับในไฟล์ ~ / .vimrc ของฉัน:

" Fix the difficult-to-read default setting for diff text highlighting.  The
" bang (!) is required since we are overwriting the DiffText setting. The highlighting
" for "Todo" also looks nice (yellow) if you don't like the "MatchParen" colors.
highlight! link DiffText MatchParen

3
ทางออกที่ดี! ฉันเลือกTodoแทนMatchParenเพราะมันโดดเด่นกว่า
Mihai Capotă

18

หากคุณกำลังพบกับโครงร่างสีที่อ่านไม่ออก (ไม่ใช่แค่น่าเกลียด แต่อ่านไม่ออกเช่นข้อความสีขาวบนพื้นหลังสีชมพู) การแก้ไขง่ายๆอาจใช้ 16 สีแทน 256 สี จากนั้นคุณไม่ต้องยุ่งกับโทนสี

เหตุผลก็คือโทนสี vimdiff เริ่มต้นกำหนดDiffChange bgเป็น "LightMagenta" ซึ่งจะจับคู่กับสีชมพูอ่อนมากถึง 256 สี ที่ไม่สามารถอ่านได้ด้วยข้อความสีขาว ด้วย 16 สี "LightMagenta" จะถูกจับคู่กับสีม่วงแดงตัวหนาซึ่งข้อความสีขาวจะแสดงได้ดีกว่ามาก

คุณสามารถทดสอบอย่างรวดเร็วโดยทำสิ่งนี้:

vimdiff <file1> <file2>
:set t_Co?    " print current setting (256 by default)
:highlight    " print highlighting scheme
:set t_Co=16  " set to 16 colors
:highlight    " print highlighting scheme

ภาพหน้าจอ 256 สี ป้อนคำอธิบายภาพที่นี่

ภาพหน้าจอ 16 สี ป้อนคำอธิบายภาพที่นี่

อย่างที่คุณเห็นสีทั้ง 16 สีนั้นอ่านได้ง่ายกว่ามากโดยไม่ต้องเปลี่ยนโทนสี

ที่จะทำให้ถาวรนี้คุณสามารถเพิ่มset t_Co=16ที่คุณ.vimrc


2
ขอบคุณมากสำหรับเคล็ดลับนี้แม้ว่าในกรณีของฉันมันจะเป็นวิธีอื่นก็ตาม t_Coถูกตั้งค่าเป็น 8 เพิ่มขึ้นเพื่อset t_Co=256ปรับปรุงการอ่านอย่างมาก
Olaf Dietsche

11

molokai: โทนสีโมโลไก github: โทนสี github สองธีม github และ molokai มีความสวยงามไม่แพ้กัน

curl -fLo ~/.vim/colors/molokai.vim --create-dirs https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim
curl -fLo ~/.vim/colors/github.vim --create-dirs https://raw.githubusercontent.com/endel/vim-github-colorscheme/master/colors/github.vim

ใส่รหัสต่อไปนี้ใน ~ / .vimrc ของคุณคุณสามารถเลือก github หรือ molokai (บรรทัดที่ขึ้นต้นด้วย "คือความคิดเห็น):

if &diff
"   colorscheme github
    colorscheme molokai
endif

วิธีแก้ปัญหาใหม่ที่ฉันชอบสำหรับปัญหาเก่านี้!
Stabledog

10

สำหรับผู้ที่ใช้ธีมSolarized ที่ยอดเยี่ยมมีตัวเลือกที่เปิดการมองเห็นสูงสำหรับโหมด diff:

" ~/vim.rc
" Set high visibility for diff mode
let g:solarized_diffmode="high"

"ปกติ" ป้อนคำอธิบายภาพที่นี่

"สูง" ป้อนคำอธิบายภาพที่นี่

"ต่ำ" ป้อนคำอธิบายภาพที่นี่


1
คุณจะไม่ได้ภาพหน้าจอของความแตกต่างนี้?
Victor Zamanian

7

อีกแนวทางหนึ่งคือการแก้ไขโทนสีนั้น

เท่าที่ฉันรู้มักจะมีกลุ่มไฮไลต์สี่กลุ่มที่สัมพันธ์กับความแตกต่าง: DiffAdd, DiffChange, DiffDelete และ DiffText หากคุณไม่ต้องการกังวลเกี่ยวกับไวยากรณ์หรือปรับแต่งสีตามความชอบของคุณคุณอาจคัดลอกชุดสีเริ่มต้นของคุณภายใต้ชื่ออื่นไปที่ ~ / .vim / colors (สร้างไดเร็กทอรีหากไม่มี) และ คัดลอกวางคำสั่งที่เกี่ยวข้อง: hi จากชุดรูปแบบสีทางเลือกของคุณไปยังจุดสิ้นสุดของชุดสีที่กำหนดเองใหม่ของคุณเลือกที่จะแสดงความคิดเห็นในข้อความที่เกี่ยวข้องกับความแตกต่างอื่น ๆ ในนั้น

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


นักพัฒนากลุ่มนี้ได้รับข้อร้องเรียนและข้อเสนอแนะมากมายเกี่ยวกับการที่ colorcheme เริ่มต้นปรากฏบนพื้นหลังสีเข้ม แต่น่าเศร้าที่ยังได้รับการแก้ไข
Stefan Lasiewski

7

colorcheme ปัจจุบันของฉันไม่แสดงความแตกต่างอย่างถูกต้องใน vimdiff, For เช่นความแตกต่างบางอย่างจะแสดงด้วยสี fg / bg เดียวกัน

อันที่จริงฉันพบว่าผู้ร้ายหลักสำหรับสี fg / bg เดียวกันนั้นเป็นเพราะความขัดแย้งระหว่างการเน้นไวยากรณ์ของรหัสและชุดสีที่แตกต่างกัน คุณสามารถลองเปลี่ยนชุดสีที่แตกต่างกันได้ แต่อาจเป็นเกมตีตุ่นเมื่อคุณเปิดไฟล์ประเภทต่างๆ (ด้วยการเน้นไวยากรณ์ของรหัสที่แตกต่างกัน)

ทางออกที่แน่นอนคือปิดการใช้งานการเน้นไวยากรณ์ใน vimdiff คุณสามารถพิมพ์:

:syntax off

หรือหากคุณต้องการทำสิ่งนี้โดยอัตโนมัติทุกครั้งให้เพิ่มสิ่งนี้ต่อท้าย~/.vimrc:

if &diff
    syntax off
endif

6

/etc/vim/vimrcหรือ~/.vimrc: หากใช้พื้นหลังสีเข้มภายในพื้นที่แก้ไขและการเน้นไวยากรณ์ให้เปิดตัวเลือกนี้ด้วยset background=dark


3

ฉันใช้สิ่งต่อไปนี้เมื่อใช้ vimdiff จากภายในกลุ่ม:

au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif

ส่วนที่มีคำสั่ง else มีความสำคัญเนื่องจากเป็นวิธีที่คุณย้อนกลับไปยังการกำหนดค่าก่อนหน้าของคุณหลังจากที่คุณทำ diff'ing เสร็จแล้ว ดังนั้นคุณสามารถแทนที่syntax offและsyntax onด้วยcolorschemeคำสั่งที่เกี่ยวข้อง autocmd นี้จัดการเปลี่ยนการตั้งค่าและย้อนกลับเมื่อออกจาก vimdiff (ฉันเคยGdiffแม่นยำ)


3

หากต้องการขยายเกี่ยวกับ @dean และคำตอบอื่น ๆ ที่นี่ให้เพิ่มสิ่งนี้ใน.vimrc:

if &diff
  " colorscheme evening
  highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
endif
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.