Wyświetlanie innego koloru tła w Vimie powyżej 80 znaków

136

Widziałem problemy z układem kolumn w Vim 80 , ale odpowiedź tam podkreśla tylko rzeczywistą zawartość, która przekracza 80 znaków. Chcę mieć otwarte ponad 100-kolumnowe okno Vima z 80 skrajnymi lewymi kolumnami używającymi normalnego tła i wszystkiego, co poza nim, używając nieco innego tła. Tło okna Vima powinno mieć inny kolor, a nie tylko tekst, który przekracza 80 znaków. To wskazywałoby, jak blisko jestem do punktu 80 znaków bez konieczności wcześniejszego przekraczania go.

Wydaje mi się, że obecnie nie jest to możliwe, ale pomyślałem, że zapytam na wszelki wypadek.

Może dałoby się to zrobić za pomocą wtyczki?

TextMate Przykład podświetlania prawego marginesu pożądanego Vima

Wybierając „Podświetl prawy margines” w ogólnych preferencjach TextMate, możesz zobaczyć przykład pożądanego zachowania Vima.

Przykład podświetlenia prawego marginesu TextMate

Doug
źródło

Odpowiedzi:

226

Jeśli masz Vima> = v7.3, możesz po prostu dodać to do swojego, .vimrcaby podświetlić 81 i dalej (więc 80 to twoja ostatnia poprawna kolumna):

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

Jeśli nie widzisz podświetlenia, być może nie masz ColorColumnustawionego koloru podświetlenia. Dodaj to (dostosuj do swoich preferencji):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Teraz lubię wyróżniać kolumnę 80, 120 i następne, więc mam osobne znaczniki „ostrzeżenia” i „niebezpieczeństwa”. Możesz to zrobić w ten sposób:

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

Przykład

Oto zrzut ekranu z GVim edytującym plik .vimrc.

GVim edytuje mój plik .vimrc

Używam czcionki Ubuntu Mono 11 i schematu kolorów Molokai . Możesz znaleźć moją konfigurację vima i wszystkie moje pliki dotfiles na GitHub.

Justin Force
źródło
3
colorcolumn jest ograniczona do 256 definicji, na :help colorcolumn... dodatkowo, moje ustawienie wydaje się być nieco obcięte, kiedy używam twojej techniki łączenia, chociaż nie da się mnie obsadzić w przeszukiwaniu źródła Vima, aby dowiedzieć się, jaka jest ta długość. Ponadto vim analizuje wartość tego ustawienia jako łańcuch za każdym razem, gdy wchodzi do okna, inicjuje bufor itp., Więc jest to dość kosztowny sposób na osiągnięcie pożądanego wyniku.
cptstubing06
15
Twoje dotfiles są GORĄCE.
obfk
1
Dzięki za opublikowanie tego, właśnie tego szukałem! Jeszcze tylko jedno pytanie, czy istnieje sposób, aby nie ustawić tych reguł dla określonego typu pliku (.md)?
David Dias,
1
@DavidDias Sure! Możesz zrobić coś takiego, jak autocmd FileType markdown let &colorcolumn=""całkowite rozbrojenie.
Justin Force
1
zaktualizowany link do konfiguracji vima
reergymerej
78

Podświetl 81 kolumnę

:set textwidth=80
:set colorcolumn=+1

Możesz także wykonać stylizację:

:hi ColorColumn guibg=#2d2d2d ctermbg=246
Andrzej
źródło
2
To i jest również możliwe, aby podświetlić do 256 kolumn, ale niestety wymaga to listy kolumn do podświetlenia i nie ma na to skrótu, więc musiałbyś zrobić coś takiego jak :set colorcolumn=+1,+2,+3,+4,+5,+6etcetera prawdopodobnie aż do bez +256względu na szerokość myślisz, że podoba Ci się prawy margines. To jednak podświetli tylko linie, które istnieją w buforze, a nie wszystkie linie w oknie.
mkomitee
2
@Dyslexic Tangent: Dlaczego zamiast tego nie podświetlić pierwszych 80 kolumn?
brice
1
Nie pomyślałem o tym. Ustaw tło na kolor, którego chcesz użyć, aby podświetlić> 80 kolumn, i ustaw kolumnę kolorów dla wszystkich kolumn od 1 do 80 i ustaw grupę podświetlenia dla kolumny kolorów na kolor, który ma mieć normalne tło.
mkomitee
2
Jedno pytanie, chociaż mogę poprawnie ustawić kolor, wpisując, :hi colorcolumn ...to nie działa, gdy umieszczam go w moim .vimrc. Czy wiesz, jak to zrobić?
robbrit
Widzę ten sam problem, co robbrit - Jeśli uruchomię polecenie podświetlenia w trybie ex, wygląda dobrze, ale jeśli mam je w pliku vimrc, niszczy mój schemat kolorów ...
Bennidhamma,
17

Rozwiązanie zaproponowane w komentarzu powyżej. Najpierw podświetl swoje tło, a następnie podświetl kolor ColorColumn jako nakładkę. Ustaw kolumnę kolorów na linie 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
źródło
1
To jest proste, ale genialne. Dzięki!
nalot
8

próbować:

:/\%>80v./+

oznaczy +80 znaków jako błąd

GoTTimw
źródło
Tak sprytny w mgnieniu oka. Podoba mi się, ponieważ dostosowuje się do zmian tematycznych. Dzięki.
Benjamin,
0

Nie sądzę, że można mieć to, czego chcesz, ale podążam za tym pytaniem, ponieważ sam jestem tym zainteresowany.

Być może stwierdzam to, co oczywiste, ale możesz ustawić highligth w kolumnach 70 +, aby uzyskać wskazanie, jak blisko jesteś do kolumny 80.

René Nyffenegger
źródło
0

Dla tych, którzy używają onedark.vim, takich jak ja, którzy chcą rozwiązania opublikowanego przez Conner, dodałem te linie do mojego pliku 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"}
  \ }

Po prostu zamieniłem te dwie wartości, zaczerpnąłem je z kodu źródłowego onedark

yujinyuz
źródło