Uczynienie aktywnego okna w vimie bardziej oczywistym

22

Mój obszar roboczy to zwykle jeden bardzo duży xterm z vimem, podzielony na sześć lub więcej buforów. Byłoby naprawdę pomocne, gdyby było bardziej oczywiste, który z nich jest aktywnym buforem. Obecnie używam do tego obecności numerów linii:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set number
    autocmd WinLeave * set nonumber
augroup END

ale to oznacza, że ​​kiedy zmieniam bufory, mój kod przeskakuje w lewo lub w prawo, co jest denerwujące. Dodatkowo chciałbym móc zobaczyć, która linia jest 94, nawet w nieaktywnym buforze. Czy jest jakiś sposób na zmianę kolorów numerów linii w aktywnym buforze?

DrHyde
źródło

Odpowiedzi:

26

Zgodnie z szablonem możesz zmieniać różne właściwości, takie jak kolumna kolorów:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set colorcolumn=80
    autocmd WinLeave * set colorcolumn=0
augroup END

Spowoduje to pokolorowanie kolumny 80 w bieżącym oknie, a jednocześnie wyłączenie jej w innych. To trochę mniej denerwujące niż ustawianie / rozbrajanie numerów linii.

Jeszcze mniej inwazyjną opcją, jeśli jesteś przyzwyczajony do podświetlania bieżącej linii (set cul), jest:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set cul
    autocmd WinLeave * set nocul
augroup END

Wszystko sprowadza się do twojego użytkowania i tego, co chcesz znieść.

FGB
źródło
11

Kolor linii statusu jest najczęstszym sposobem sprawdzenia, które okno jest aktywne. Jest zdefiniowany w twoim schemacie kolorów za pomocą tych dwóch linii:

hi StatusLine   ctermfg=15  guifg=#ffffff ctermbg=239 guibg=#4e4e4e cterm=bold gui=bold
hi StatusLineNC ctermfg=249 guifg=#b2b2b2 ctermbg=237 guibg=#3a3a3a cterm=none gui=none

Pierwszy dotyczy bieżącego okna, drugi dotyczy „nieprądowego” okna.

Jest to fragment Xoria256 , powinieneś dostosować kolory do swojego schematu kolorów.

Ale możesz spróbować czegoś takiego (uwaga, kolory w drugiej linii są całkowicie losowe):

augroup NrHighlight
  autocmd!
  autocmd WinEnter * hi LineNr ctermfg=247 guifg=#9e9e9e ctermbg=233 guibg=#121212
  autocmd WinLeave * hi LineNr ctermfg=274 guifg=#e9e9e9 ctermbg=133 guibg=#212121
augroup END
romainl
źródło
Próbowałem już zmienić podświetlenie LineNr w WinEnter / WinLeave, ale wygląda na to, że kolorowanie LineNr jest globalne.
DrHyde
Tak, musiałem czekać na twój komentarz, aby to zapamiętać. Więc nie, jeśli LineNr jest globalny, nie ma oczywiście możliwości zmiany go w określonym oknie. Czy nie uważasz, że linia statusu jest wystarczająca?
romainl
Zastanawiałem się, czy może istnieć inna wersja LineNr dla okna. I nie, nie sądzę, aby linia statusu była wystarczająca. Pomaga, ale chciałbym więcej. Jednym z problemów z używaniem linii statusu jest to, że posiadanie wskaźnika aktywnego okna u dołu okna jest dokładnym przeciwieństwem tego, co mamy prawie wszędzie - pasek tytułu u góry okna, który zmienia kolor - więc jest chwila zatrzymajcie się, aby pomyśleć „o tak, vim robi to na odwrót”. Podczas gdy numery linii są zawsze , w każdym zastosowaniu, w tym samym miejscu.
DrHyde
Naprawdę chciałbym, jeśli możesz zmienić kolor tła okna, ale wygląda na to, że z powyższego nie jest to możliwe.
Jonathan Hartley
Korzystanie hi StatusLine...i hi StatusLineNC...działa jak urok!
Luc M
2

Tym się właśnie zajmuję:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set relativenumber
    autocmd WinLeave * set norelativenumber
augroup END

Liczby względne są tylko pomocą w obliczaniu powtarzalnej liczby poleceń, nie ma dla nich zastosowania w oknie, którego nie edytujesz.

saga
źródło
1

Możesz dodać to do swojego ~/.vimrc, co spowoduje, że paski stanu nieaktywnych okien będą miały ciemnoszare tło, aby odróżnić się od białego paska stanu aktywnego okna.

highlight StatusLineNC cterm=bold ctermfg=white ctermbg=darkgray

Zobacz ten zrzut ekranu. Środkowe okno jest aktywne (biały pasek stanu). Lewe i prawe okna są nieaktywne (ciemnoszary pasek stanu).

wprowadź opis zdjęcia tutaj

wisbucky
źródło