Сделать активное окно в vim более очевидным

22

Мое рабочее пространство обычно представляет собой один очень большой xterm с vim, разделенным на шесть или более буферов. Было бы очень полезно, если бы было более очевидно, какой из них является активным буфером. Прямо сейчас я использую наличие номеров строк для этого:

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

но это означает, что когда я меняю буферы, мой код переходит влево или вправо, что раздражает. Кроме того, я хотел бы видеть, какая строка 94, даже в неактивном буфере. Так есть ли способ изменить цвета номеров строк в активном буфере?

DrHyde
источник

Ответы:

26

Следуя вашему шаблону, вы можете изменить различные свойства, такие как colorcolumn:

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

Это закрасит колонку 80 в вашем текущем окне, отключив его в других. Это немного менее неприятно, чем установка / удаление номеров строк.

Еще менее навязчивый вариант, если вы привыкли выделять текущую строку (set cul), это сделать:

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

Все зависит от вашего использования и того, с чем вы готовы мириться.

ФГБ
источник
11

Цвет строки состояния - самый обычный способ узнать, какое окно активно. Это определяется в вашей схеме цветов с помощью этих двух строк:

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

Первый для текущего окна, второй для «не текущего» окна.

Это отрывок из xoria256 , вы должны адаптировать цвета к вашей цветовой схеме.

Но вы можете попробовать что-то подобное (будьте осторожны, цвета во второй строке абсолютно случайны):

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
источник
Я уже пытался изменить подсветку LineNr в WinEnter / WinLeave, но кажется, что раскраска LineNr является глобальной.
DrHyde
Да, и я должен был ждать вашего комментария, чтобы запомнить это. Итак, нет, если LineNr является глобальным, очевидно, нет способа изменить его в конкретном окне. Вы не думаете, что статусной линии достаточно?
romainl
Я задавался вопросом, может ли быть какая-то другая версия LineNr для каждого окна. И нет, я не думаю, что статусной строки достаточно. Это помогает, но я бы хотел больше. Одна проблема с использованием строки состояния состоит в том, что наличие индикатора активного окна в нижней части окна является полной противоположностью тому, что мы имеем почти везде - строка заголовка в верхней части окна, которая меняет цвет - так что есть момент пауза, чтобы подумать "о да, vim делает это наоборот". В то время как номера строк всегда в каждом приложении находятся в одном и том же месте.
DrHyde
Мне бы очень хотелось, если бы вы могли изменить цвет фона окна, но, как видно из вышесказанного, это невозможно.
Джонатан Хартли
Использование hi StatusLine...и hi StatusLineNC...работает как шарм!
Люк М
2

Это то чем я занимаюсь:

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

Относительные числа - всего лишь вспомогательное средство для расчета повторного количества команд, для них нет смысла в окне, которое вы не редактируете.

сага
источник
1

Вы можете добавить это к своему ~/.vimrc, что сделает строки состояния неактивных окон темно-серым фоном, чтобы отличаться от белой строки состояния активного окна.

highlight StatusLineNC cterm=bold ctermfg=white ctermbg=darkgray

Смотрите этот пример скриншота. Среднее окно активно (белая строка состояния). Левое и правое окна неактивны (темно-серая строка состояния).

введите описание изображения здесь

wisbucky
источник