Menampilkan warna latar yang berbeda di Vim hingga 80 karakter

134

Saya telah melihat kekhawatiran tata letak kolom Vim 80 , tetapi jawabannya di sana hanya menyoroti konten aktual yang melampaui tanda 80 karakter. Saya ingin memiliki 100 + kolom jendela Vim terbuka dengan 80 kolom paling kiri menggunakan latar belakang normal dan masa lalu yang menggunakan latar belakang yang sedikit berbeda. Latar belakang jendela Vim harus memiliki warna yang berbeda, bukan hanya teks yang melampaui titik 80 karakter. Ini akan menunjukkan seberapa dekat saya sampai ke titik 80-char tanpa harus pergi lebih dulu.

Saya tidak berpikir ini saat ini mungkin, tetapi saya pikir saya akan bertanya berjaga-jaga.

Mungkin itu bisa dilakukan dengan plugin?

TextMate Contoh Sorotan Margin Kanan Vim yang Diinginkan

Dengan memilih "Sorot margin kanan" di preferensi umum TextMate, Anda dapat melihat contoh perilaku Vim yang diinginkan.

TextMate Right Margin Highlighted Contoh

Doug
sumber

Jawaban:

223

Jika Anda memiliki Vim> = v7.3, Anda bisa menambahkan ini ke Anda .vimrcuntuk menyorot 81 dan seterusnya (jadi 80 adalah kolom terakhir yang valid):

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

Jika Anda tidak melihat highlight, Anda mungkin tidak memiliki ColorColumnset warna highlight. Tambahkan ini (sesuaikan dengan preferensi Anda):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Sekarang saya ingin menyorot kolom 80 serta 120 dan seterusnya, jadi saya memiliki penanda "peringatan" dan "bahaya" yang terpisah. Anda dapat melakukannya dengan demikian:

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

Contoh

Berikut adalah screenshot dari pengeditan GVim saya .vimrc.

GVim mengedit .vimrc saya

Saya menggunakan font Ubuntu Mono 11 dan skema warna molokai . Anda dapat menemukan konfigurasi vim saya dan semua dotfile saya di GitHub.

Justin Force
sumber
3
colorcolumn terbatas pada 256 definisi, per :help colorcolumn... selain itu, pengaturan saya tampaknya akan terpotong-potong ketika menggunakan teknik bergabung Anda, meskipun saya tidak dapat mencari untuk mencari melalui sumber vim untuk mengetahui berapa panjang itu. Juga, vim mem-parsing nilai pengaturan ini sebagai string setiap kali memasuki jendela, menginisialisasi buffer, dll, jadi ini adalah cara yang mahal untuk mencapai hasil yang diinginkan.
cptstubing06
15
Dotfile Anda HOT.
obfk
1
Terima kasih telah memposting ini, persis apa yang saya cari! Hanya satu pertanyaan lagi, apakah ada cara untuk tidak menetapkan aturan ini ke jenis file tertentu (.md)?
David Dias
1
@ David Jelas Tentu! Anda dapat melakukan sesuatu seperti autocmd FileType markdown let &colorcolumn=""menghapusnya sepenuhnya.
Justin Force
1
tautan yang diperbarui ke vim config
reergymerej
78

Sorot 81 kolom

:set textwidth=80
:set colorcolumn=+1

Anda juga dapat membuat beberapa gaya:

:hi ColorColumn guibg=#2d2d2d ctermbg=246
Andrew
sumber
2
Ini, dan itu juga memungkinkan untuk menyorotnya hingga 256 kolom, tetapi sayangnya dibutuhkan daftar kolom untuk disorot dan tidak ada singkatan untuk itu, jadi Anda harus melakukan sesuatu seperti :set colorcolumn=+1,+2,+3,+4,+5,+6etcetera mungkin semua jalan sampai +256seberapa lebar Anda pikir Anda ingin margin kanan Anda. Namun ini hanya akan menyoroti garis yang ada di buffer, tidak semua garis di jendela.
mkomitee
1
@Dentlexic Tangent: Mengapa tidak menyorot 80 kolom pertama saja?
brice
1
Saya tidak memikirkan itu. Atur latar belakang Anda ke warna yang ingin Anda gunakan untuk menyorot> 80 kolom, dan atur colorcolumn untuk semua kolom dari 1-80, dan atur grup highlight untuk colorcolumn menjadi warna yang Anda inginkan sebagai latar belakang normal Anda.
mkomitee
2
Satu pertanyaan, sementara saya bisa mengatur warna dengan benar dengan mengetik :hi colorcolumn ...sepertinya tidak berfungsi ketika saya memasukkannya ke dalam .vimrc saya. Apakah Anda tahu cara melakukannya?
robbrit
Saya melihat masalah yang sama dengan robbrit - Jika saya menjalankan perintah highlight dalam mode ex, itu terlihat bagus, tetapi jika saya memilikinya di file vimrc saya, itu menghancurkan colorscheme saya ...
Bennidhamma
16

Solusi yang diajukan dalam komentar di atas. Sorot latar belakang Anda terlebih dahulu kemudian sorot ColorColumn hitam sebagai overlay. Atur kolom warna Anda ke garis 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),",")
Conner
sumber
1
Ini sederhana namun cemerlang. Terima kasih!
serangan udara
8

mencoba:

:/\%>80v./+

itu akan menandai +80 karakter sebagai kesalahan

GoTTimw
sumber
Jadi pintar dalam keadaan darurat. Saya suka karena ia beradaptasi dengan perubahan tema. Terima kasih.
Benjamin
0

Saya tidak berpikir bahwa itu mungkin untuk mendapatkan apa yang Anda inginkan, tetapi saya mengikuti pertanyaan ini karena saya sendiri tertarik pada hal seperti itu.

Mungkin, saya menyatakan yang sudah jelas, tetapi Anda dapat mengatur ketinggian di kolom ke-70 + untuk mendapatkan indikasi seberapa dekat Anda ke kolom ke-80.

René Nyffenegger
sumber
0

Bagi mereka yang menggunakan onedark.vim seperti saya yang menginginkan solusi diposting oleh Conner, saya menambahkan baris ini ke file vimrc saya

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"}
  \ }

Saya baru saja menukar kedua nilai tersebut, mengambilnya dari kode sumber onedark

yujinyuz
sumber