Изменение цвета курсорной строки Vim в режиме вставки

#vim #colors #line #text-cursor

#vim #Цвет #строка #текстовый курсор

Вопрос:

Существует хороший фрагмент для изменения цвета курсора:

 if amp;term =~ "xterm\|rxvt"
  " use an orange cursor in insert mode
  let amp;t_SI = "<Esc>]12;orangex7"
  " use a red cursor otherwise
  let amp;t_EI = "<Esc>]12;redx7"
  silent !echo -ne "33]12;red07"
  " reset cursor when vim exits
  autocmd VimLeave * silent !echo -ne "33]11207"
  " use 03]12;gray07 for gnome-terminal
endif
  

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

Моя полная конфигурация https://bitbucket.org/JackLeo/home-configs/src/5b8faf340f87/.vimrc

Комментарии:

1. Мне нравится сопоставление ключей arror с комментарием «Используйте чертовы ключи hjkl».

2. Должен ли я буквально писать здесь <ESC> или это визуализация ^V’ESC’? Когда я копирую и вставляю приведенный выше текст в свой .vimrc, он ничего не делает (и да, он утверждает, что является xterm… это сеанс putty в окне Linux)

Ответ №1:

Посмотрите на команду «выделить», которая является более простым способом управления этим.

Например, чтобы изменить курсорную линию,

 :hi CursorLine guifg=red guibg=blue
  

Ссылка: : выделение справки

Для переключения между режимами.

 " Enable CursorLine
set cursorline

" Default Colors for CursorLine
highlight  CursorLine ctermbg=Yellow ctermfg=None

" Change Color when entering Insert Mode
autocmd InsertEnter * highlight  CursorLine ctermbg=Green ctermfg=Red

" Revert Color to default when leaving Insert Mode
autocmd InsertLeave * highlight  CursorLine ctermbg=Yellow ctermfg=None
  

Возможно, я смогу смешивать цвет termcap с autocmd, но IMO, выделение легче поддерживать в долгосрочной перспективе (и в случае, если использовать gVim время от времени)

Комментарии:

1. Я знаю это, я использую это в файле конфигурации. Дело в том, что я хочу, чтобы он менялся в зависимости от того, нахожусь ли я в режиме вставки.

2. обновлен ответ для решения проблемы «переключение цвета зависит от режима».

3. Это был такой удобный совет!! Спасибо!!

4. Чтобы уточнить, для gVim и Neovim с set termguicolors помощью, вам нужно будет использовать guifg и guibg . Для Vim в терминале и Neovim без истинных цветов следует использовать ctermbg и ctermfg .

5. Мне не нравятся цвета фона, поэтому я изменил его на «autocmd InsertEnter * set cursorline» / «autocmd insertlave * set nocursorline». Теперь я получаю подчеркивание только как индикатор для вставки или обычного режима.

Ответ №2:

Это довольно просто, поместите следующее в свой .vimrc или пользовательский файл colorscheme.

 set cursorline
autocmd InsertEnter * highlight CursorLine guifg=white guibg=blue ctermfg=white ctermbg=blue
autocmd InsertLeave * highlight CursorLine guifg=white guibg=darkblue ctermfg=white ctermbg=darkblue
  

Для получения дополнительной информации см.:

Примечание: вы можете использовать тот же метод для изменения цвета курсора без всех этих if операторов и escape-последовательностей (и это также будет работать в GVim).

Комментарии:

1. другие полезные примеры cterm=bold , и вы можете «отменить» что-либо NONE , например, у меня нет подсветки, когда я не в режиме вставки, с ctermfg=NONE ctermbg=NONE cterm=NONE

Ответ №3:

При использовании MacVim с «Lokaltog / vim-powerline» вы можете настроить свои обычные / визуальные / цвета вставки в соответствии с цветом режима powerline. Я нахожу это чрезвычайно полезным, чтобы знать, в каком режиме я нахожусь, не читая powerline, особенно на большом экране.

Вот код, который я использую, основанный на ответе @Zarick-Lau.

В моем colors/molokai.vim файле:

 " Visual Mode Orange Background, Black Text
hi Visual          guifg=#000000 guibg=#FD971F

" Default Colors for CursorLine
highlight CursorLine guibg=#3E3D32
highlight Cursor guibg=#A6E22E;

" Change Color when entering Insert Mode
autocmd InsertEnter * highlight  CursorLine guibg=#323D3E
autocmd InsertEnter * highlight  Cursor guibg=#00AAFF;

" Revert Color to default when leaving Insert Mode
autocmd InsertLeave * highlight  CursorLine guibg=#3E3D32
autocmd InsertLeave * highlight  Cursor guibg=#A6E22E;
  

Вот пример использования оригинальной цветовой схемы molokai.

Нормальный

обычный режим (зеленый

Визуальный

визуальный режим (оранжевый)

Вставить

режим вставки (синий)

Я также считаю полезным настроить ОС для визуального выбора с использованием того же цвета. Например, я изменил цвет Orange выделения на OSX, и когда я выделяю текст, он теперь оранжевый, а не синий, как в VIM.

выберите выделение оранжевым цветом

Пример

Здесь оранжевая подсветка используется в текстовом поле, когда я пишу эту запись переполнения стека. Теперь весь текст, который я выбираю в своей ОС, соответствует настройке VIM.

выделение текста в ОС

Комментарии:

1. Есть идеи, какие «соляризованные» цвета для курсорной линии.

2. Во фрагменте кода vimscript ошибка. Редактирование необходимо для удаления ненужных ;

Ответ №4:

Я решил переключиться CursorLine и Normal в режим вставки. Сначала получите значения с :hi Normal помощью и :hi CursorLine . Затем настройте следующие строки:

 set cursorline
autocmd InsertEnter * highlight Normal ctermbg=7
autocmd InsertEnter * highlight CursorLine ctermbg=15
autocmd InsertLeave * highlight Normal ctermbg=15
autocmd InsertLeave * highlight CursorLine ctermbg=7
  

Для соляризованного света это выглядит следующим образом. Мне нравится эффект «фокусировки».

обычный режимрежим вставки

Комментарии:

1. Спасибо! Я думаю, что это простой красивый вид, который каждый хочет видеть при переходе на эту страницу, потому что он не разрушает подсветку синтаксиса. Жаль, что это работает только для светового режима и терминала. Не могли бы вы расширить свой ответ, чтобы включить gvim и темные фоновые изображения?

Ответ №5:

ЦВЕТ в текущей строке ОТСУТСТВУЕТ, даже если вы входите в РЕЖИМ ВСТАВКИ или выходите из него

 
"set cursorline
set noshowmode

"Enable CursorLine
set nocursorline

"Default Colors for CursorLine
hi CursorLine cterm=NONE ctermbg=NONE ctermfg=NONE

"Change Color when entering Insert Mode
autocmd InsertEnter * set nocursorline

"Revert Color to default when leaving Insert Mode
autocmd InsertLeave * set nocursorline