Mostra un colore di sfondo diverso negli ultimi 80 caratteri di Vim


134

Ho visto i problemi di layout delle colonne di Vim 80 , ma la risposta lì evidenzia solo il contenuto effettivo che supera il segno di 80 caratteri. Voglio avere una finestra Vim di oltre 100 colonne aperta con le 80 colonne più a sinistra usando lo sfondo normale e qualsiasi cosa oltre che usando uno sfondo leggermente diverso. Lo sfondo della finestra di Vim dovrebbe avere un colore diverso, non solo un testo che superi i 80 caratteri. Ciò indicherebbe quanto mi sto avvicinando al punto da 80 caratteri senza doverlo esaminare prima.

Non penso che questo sia attualmente possibile, ma ho pensato di chiedere per ogni evenienza.

Forse potrebbe essere fatto con un plugin?

TextMate Esempio di evidenziazione del margine destro di Vim desiderato

Selezionando "Evidenzia margine destro" nelle preferenze generali di TextMate, puoi vedere un esempio del comportamento Vim desiderato.

Esempio evidenziato di margine destro di TextMate


Risposte:


223

Se hai Vim> = v7.3, puoi semplicemente aggiungere questo al tuo .vimrcper evidenziare 81 e in seguito (quindi 80 è la tua ultima colonna valida):

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

Se non vedi un punto culminante, potresti non avere un ColorColumnset di colori di evidenziazione. Aggiungi questo (regola le tue preferenze):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Ora mi piace evidenziare la colonna 80 e 120 e successive, quindi ho contrassegni "avvertimento" e "pericolo" separati. Puoi farlo così:

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

Esempio

Ecco uno screenshot di GVim che modifica il mio .vimrc.

GVim modifica il mio .vimrc

Uso il carattere Ubuntu Mono 11 e la combinazione di colori molokai . Puoi trovare la mia configurazione di vim e tutti i miei dotfile su GitHub.


3
colorcolumn è limitato a 256 definizioni, per :help colorcolumn... inoltre, la mia impostazione sembra essere troncata ad una certa lunghezza quando uso la tua tecnica di join, anche se non posso essere sicuro di cercare attraverso la fonte di VIM per capire quale sia quella lunghezza. Inoltre, vim analizza il valore di questa impostazione come una stringa ogni volta che entra in una finestra, inizializza un buffer, ecc., Quindi questo è un modo costoso per ottenere il risultato desiderato.
cptstubing06

15
I tuoi dotfile sono CALDI.
obfk

1
Grazie per aver pubblicato questo, era esattamente quello che stavo cercando! Solo un'altra domanda, c'è un modo per non impostare queste regole su un tipo specifico di file (.md)?
David Dias,

1
@DavidDias Certo! Puoi fare qualcosa come autocmd FileType markdown let &colorcolumn=""disinserirlo completamente.
Forza Justin

1
collegamento aggiornato a vim config
reergymerej

78

Evidenzia colonna 81

:set textwidth=80
:set colorcolumn=+1

Puoi anche fare un po 'di styling:

:hi ColorColumn guibg=#2d2d2d ctermbg=246

2
Questo, ed è anche possibile avere l'evidenziazione fino a 256 colonne, ma sfortunatamente ci vuole un elenco di colonne per evidenziare e non c'è scorciatoia per esso, quindi dovresti fare qualcosa come :set colorcolumn=+1,+2,+3,+4,+5,+6etcetera probabilmente fino a +256per quanto largo pensi che ti piacerebbe il tuo margine giusto. Questo, tuttavia, evidenzierà solo le linee esistenti nel buffer, non tutte le linee nella finestra.
mkomitee,

1
@Dyslexic Tangent: Perché non evidenziare invece le prime 80 colonne?
brice

1
Non ci avevo pensato. Imposta lo sfondo sul colore che desideri utilizzare per evidenziare> 80 colonne, quindi imposta la colonna di colore per tutte le colonne da 1 a 80 e imposta il gruppo di evidenziazione per colonna di colore sul colore che desideri sia lo sfondo normale.
mkomitee,

2
Una domanda, mentre posso impostare correttamente il colore digitandolo :hi colorcolumn ..., non sembra funzionare quando lo metto nel mio .vimrc. Sai come farlo?
robbrit,

Sto vedendo lo stesso problema di robbrit - Se eseguo il comando highlight in modalità ex, sembra buono, ma se l'ho nel mio file vimrc, distrugge il mio schema di colori ...
Bennidhamma,

16

Soluzione proposta nel commento sopra. Evidenzia prima lo sfondo, quindi evidenzia il colore ColorColumn come sovrapposizione. Imposta la colonna di colore sulle righe 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),",")

1
Questo è semplice ma geniale. Grazie!
attacco aereo

8

provare:

:/\%>80v./+

segnerà +80 caratteri come errore


Così intelligente in un pizzico. Mi piace perché si adatta alle modifiche del tema. Grazie.
Benjamin,

0

Non penso che sia possibile avere ciò che vuoi, ma seguo questa domanda poiché sono interessato a una cosa del genere.

Forse sto affermando l'ovvio, ma potresti impostare l'highligth nella 70esima colonna per avere un'indicazione di quanto ti avvicini alla 80a colonna.


0

Per quelli che usano onedark.vim come me che vuole una soluzione pubblicata da Conner, ho aggiunto queste righe al mio file vimrc

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

Ho appena scambiato i due valori, presi dal codice sorgente di Onedark

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.