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


22

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

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

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

Ответы:


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

Я уже пытался изменить подсветку 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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.