Memuat skema warna yang berbeda saat menggunakan vimdiff

137

Cara memuat skema warna yang berbeda saat melakukan vimdiff.

Saya menginginkan ini karena skema warna saya saat ini tidak menunjukkan beberapa perbedaan dengan benar di vimdiff, For. misal beberapa diff ditunjukkan dengan warna fg / bg yang sama. Ini membuatnya sangat sulit untuk memahami perbedaannya. Jadi setiap kali saya melakukan vimdiffsaya harus melakukannya:colorscheme some_other_scheme

Bisakah ini dilakukan dalam .vimrcfile?

Hujan Code
sumber

Jawaban:

118

Jika Anda menelepon vimdiffdari baris perintah, masukkan yang berikut ini di .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Jika Anda menggunakan vimdiff dari dalam vim, Anda harus mengganti perintah yang Anda gunakan untuk memulai / menghentikannya (misalnya diffthis, diffoff) menggunakan :cnoreabbr(ada juga sebuah plugin ) atau menggunakan perintah otomatis:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre dipanggil sebelum memfilter melalui program eksternal (utilitas diff) dan &diff-pilihan diatur oleh vim ketika masuk ke mode-diff (antara lain, lihat :help diff)

Saya tidak yakin autocommand mana yang harus digunakan untuk kembali ke colorscheme asli.

DataWraith
sumber
Apakah mungkin untuk memanggil lebih dari satu perintah antara dua pipa "|"? Saya akan tertarik untuk kembali ke colorscheme asli setelah menggunakan vimdiff dari vim juga ...
Seseorang masih menggunakan Anda MS-DOS
1
Pipa-pipa tersebut adalah substitues untuk baris baru, mirip dengan ;skrip shell, jadi Anda bisa menambahkan 'baris' baru:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith
1
colorscheme some_other_schemeakan mencari jalur runtime Anda color/some_other_scheme.vim. Anda dapat melihat runtimepaths Anda :set runtimepath?dari dalam vim.
pabo
1
Untuk pengguna konsol (seperti saya), saya menemukan 'vividchalk' sebagai skema warna terbaik (di luar rangkaian instalasi default) untuk mempertahankan kontras antara diff yang disorot dan sintaks yang disorot, setidaknya untuk skrip shell. Detik kedua adalah 'malam.' Semoga itu bisa membantu.
Conrad Meyer
Masalah saya selalu kurangnya kontras dengan penyorotan sintaks, yang kehilangan seluruh potongan teks dalam pewarnaan berbeda. Saya menggunakan ': sintaks off' seperti yang diperlukan di masa lalu, tetapi hanya menambahkannya ke .vimrc saya dalam predikat 'if & diff' dan sekarang menyimpan beberapa penekanan tombol
qneill
166

Saya tidak tahu mengapa vim menggunakan begitu banyak warna untuk disorot, itu tidak benar-benar membantu Anda mengetahui apa yang terjadi.

Saya memodifikasi skema warna saya untuk hanya menggunakan satu warna untuk menyorot (dengan yang lain untuk menunjukkan di mana ada perbedaan dalam satu garis) dan itu membuat semua perbedaan.

Sebelum

masukkan deskripsi gambar di sini

Setelah

colorscheme_screenshot

Saya melakukan ini dengan menambahkan berikut ini di akhir file colorscheme saya ( ~/.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 - mengatur gaya
  • ctermfg - mengatur warna teks
  • ctermbg - atur sorotan
  • DiffAdd - baris ditambahkan
  • DiffDelete - garis telah dihapus
  • DiffChange - bagian dari garis telah diubah (menyoroti seluruh baris)
  • DiffText - bagian persis garis yang berubah

Saya menggunakan tautan ini sebagai referensi untuk nomor warna.

Catatan: Saya tidak mengatur opsi gui karena saya menggunakan colorcheme yang berbeda untuk macvim / gvim

Dekan
sumber
1
Terima kasih! Ini terlihat jauh lebih baik!
vitaluha
4
Seperti pabo katakan dalam komentar lain, Anda mungkin perlu memberi nama file skema warna Anda seperti mycolorscheme.vim, dengan ekstensi .vim di akhir.
David Winiecki
Terima kasih! Minor nit: Saya pikir Anda secara tidak sengaja membuat semua "guibg" merah. Apakah Anda bermaksud memiliki dua warna - satu untuk DiffText dan satu untuk sisanya?
Kapil Arya
6
Mengapa ketika menggunakan angka (ctermbg = 17) warna tidak berfungsi, tetapi ketika menggunakan kata-kata (ctermbg = biru) - itu berhasil? .. solusi: terminal hanya memiliki 8 warna 1-7
Ricky Levi
3
MacOS menggunakan iTerm2. Apa pun yang saya lakukan, saya dapat: Tidak dapat menemukan skema warna '~ / .vim / colors / mycolorscheme' Menyalin kode warna secara langsung di antara pernyataan "if & diff" di ~ / .vimrc melakukan trik.
Tony Barganski
59

Untuk menjawab pertanyaan saya sendiri:

if &diff
    colorscheme evening
endif
Hujan Code
sumber
Warna yang bagus untuk saya!
skytree
22

Saya menemukan cara termudah adalah menempelkan satu-liner ini ke file ~ / .vimrc saya:

" 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
Alan Thompson
sumber
3
Solusi bagus! Saya memilih Todobukan MatchParenkarena lebih menonjol.
Mihai Capotă
18

Jika Anda menemukan skema warna yang tidak dapat dibaca (tidak hanya jelek, tetapi tidak dapat dibaca seperti teks putih pada latar belakang merah muda), perbaikan yang mudah mungkin menggunakan 16 warna, bukan 256 warna. Maka Anda tidak perlu mengacaukan skema warna.

Alasannya adalah bahwa skema warna vimdiff default DiffChange bgditetapkan sebagai "LightMagenta", yang dipetakan ke warna pink yang sangat terang dalam 256 warna. Itu tidak dapat dibaca dengan teks putih. Dengan 16 warna, "LightMagenta" dipetakan ke magenta tebal, yang teks putihnya tampak jauh lebih baik.

Anda dapat memberikan tes cepat dengan melakukan sesuatu seperti ini:

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

Tangkapan layar 256 warna masukkan deskripsi gambar di sini

Tangkapan layar 16-warna masukkan deskripsi gambar di sini

Seperti yang Anda lihat, 16 warna jauh lebih mudah dibaca, tanpa mengubah skema warna.

Untuk menjadikan ini permanen, Anda dapat menambahkan set t_Co=16ke.vimrc

wisbucky
sumber
2
Terima kasih banyak untuk tip ini, meskipun dalam kasus saya itu sebaliknya. t_Codiatur ke 8, meningkatkannya untuk set t_Co=256meningkatkan keterbacaan sangat.
Olaf Dietsche
11

molokai: skema warna molokai github: skema warna github Kedua tema github dan molokai sama-sama cantik.

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

Masukkan kode berikut ke ~ / .vimrc Anda, Anda dapat memilih github atau molokai (baris yang dimulai dengan "adalah komentar):

if &diff
"   colorscheme github
    colorscheme molokai
endif
iceblue
sumber
Solusi favorit baru saya untuk masalah lama ini!
Stabledog
10

Untuk orang-orang yang menggunakan tema Solarized yang sangat baik ada opsi yang mengaktifkan visibilitas tinggi untuk mode diff:

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

"normal" masukkan deskripsi gambar di sini

"tinggi" masukkan deskripsi gambar di sini

"rendah" masukkan deskripsi gambar di sini

mandrake
sumber
1
Anda tidak akan memiliki tangkapan layar dari perbedaan yang terjadi?
Victor Zamanian
7

colorscheme saya saat ini tidak menunjukkan beberapa diffs dengan benar di vimdiff, For. misal beberapa diff ditunjukkan dengan warna fg / bg yang sama

Sebenarnya, saya telah menemukan bahwa penyebab utama untuk warna fg / bg yang sama adalah karena konflik antara penyorotan sintaksis kode dan warna yang berbeda. Anda dapat mencoba mengubah skema warna-warna yang berbeda, tetapi ini mungkin merupakan permainan whack-a-mole ketika Anda membuka berbagai jenis file (dengan penyorotan sintaksis kode yang berbeda).

Solusi yang pasti adalah menonaktifkan penyorotan sintaks di vimdiff. Anda dapat mengetik:

:syntax off

Atau jika Anda ingin secara otomatis melakukan ini setiap waktu, kemudian tambahkan ini ke akhir ~/.vimrc:

if &diff
    syntax off
endif
wisbucky
sumber
6

Pendekatan lain adalah memperbaiki skema warna itu.

Sejauh yang saya tahu, biasanya ada empat kelompok sorotan relatif terhadap diff'ing: DiffAdd, DiffChange, DiffDelete, dan DiffText. Jika Anda tidak ingin repot dengan sintaks atau mengubah warna sesuai keinginan Anda, Anda mungkin bisa menyalin skema warna default Anda di bawah nama lain ke ~ / .vim / colors (buat direktori jika tidak ada) dan salin tempel yang sesuai: hi perintah dari skema warna alternatif Anda ke akhir skema warna kustom baru Anda, opsional mengomentari pernyataan berbeda terkait lainnya di dalamnya.

Dan jika hasilnya adalah peningkatan yang jelas, kirim email ke pengelola skema warna Anda dengan perubahan Anda dan minta dia untuk melihat masalahnya. Ada kesempatan baik bahwa dia akan berterima kasih atas minat Anda dan bahwa dia akan memperbaiki skema warnanya sehingga pengguna lain juga akan mendapat manfaat ..

guv '
sumber
Pengembang vim telah menerima banyak keluhan dan saran tentang bagaimana warna defaultcheme muncul pada latar belakang yang gelap, tetapi sayangnya ini belum diperbaiki.
Stefan Lasiewski
6

/etc/vim/vimrcatau ~/.vimrc: Jika menggunakan latar belakang gelap dalam area pengeditan dan penyorotan sintaks, aktifkan opsi ini jugaset background=dark

Dmitry Ershov
sumber
3

Saya menggunakan yang berikut saat menggunakan vimdiff dari dalam vim:

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

Bagian dengan pernyataan lain penting karena itulah cara Anda kembali ke konfigurasi sebelumnya setelah selesai dengan diff'ing. Jadi Anda bisa mengganti syntax offdan syntax ondengan colorschemeperintah masing-masing . Autocmd ini menangani perubahan pengaturan dan mengembalikannya ketika berhenti vimdiff (saya menggunakan Gdifftepatnya).

kebanyakan
sumber
3

Untuk membuka @dean dan beberapa jawaban lain di sini, tambahkan ini ke .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
thouliha
sumber