Отображение другого цвета фона в Vim после 80 символов


135

Я видел проблемы с компоновкой столбцов Vim 80 , но ответ там выделяет только фактическое содержимое, превышающее 80-значную отметку. Я хочу, чтобы окно Vim с более чем 100 столбцами было открыто с 80 крайними слева столбцами, использующими обычный фон, и все, что было дальше, с немного другим фоном. Фон окна Vim должен быть другого цвета, а не только текст, длина которого превышает 80 символов. Это будет указывать на то, как близко я подхожу к точке с 80 символами, не переходя ее сначала.

Не думаю, что сейчас это возможно, но я подумал, что на всякий случай спрошу.

Может это можно было сделать с помощью плагина?

TextMate Пример желаемого выделения правого поля Vim

Выбрав «Выделить правое поле» в общих настройках TextMate, вы можете увидеть пример желаемого поведения Vim.

Пример выделения правого поля TextMate


Ответы:


223

Если у вас Vim> = v7.3, вы можете просто добавить это в свой, .vimrcчтобы выделить 81 и далее (так что 80 - ваш последний действительный столбец):

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

Если вы не видите выделения, возможно, у вас не установлен ColorColumnцвет выделения. Добавьте это (настройте в соответствии со своими предпочтениями):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Теперь мне нравится выделять столбцы 80, 120 и далее, поэтому у меня есть отдельные маркеры «предупреждение» и «опасность». Вы можете сделать это так:

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

пример

Вот скриншот, на котором GVim редактирует мой .vimrc.

GVim редактирует мой .vimrc

Я использую шрифт Ubuntu Mono 11 и цветовую схему молокаи . Вы можете найти мою конфигурацию vim и все мои точечные файлы на GitHub.


3
colorcolumn ограничен 256 определениями для каждого :help colorcolumn... кроме того, мои настройки кажутся урезанными до некоторой длины при использовании вашей техники соединения, хотя я не могу рассчитывать на поиск в источнике vim, чтобы выяснить, что это за длина. Кроме того, vim анализирует значение этого параметра как строку каждый раз, когда входит в окно, инициализирует буфер и т.д., так что это довольно дорогостоящий способ достижения желаемого результата.
cptstubing06 08

15
Ваши точечные файлы ГОРЯЧИЕ.
obfk

1
Спасибо, что разместили это, это именно то, что я искал! Еще один вопрос, есть ли способ не устанавливать эти правила для определенного типа файла (.md)?
Дэвид Диас,

1
@DavidDias Конечно! Вы можете сделать что-нибудь вроде того, autocmd FileType markdown let &colorcolumn=""чтобы полностью отключить его.
Джастин Форс

1
обновлена ​​ссылка на конфигурацию vim
reergymerej

78

Выделить 81 столбец

:set textwidth=80
:set colorcolumn=+1

Вы также можете сделать некоторые стили:

:hi ColorColumn guibg=#2d2d2d ctermbg=246

2
Это, и также возможно сделать так, чтобы он выделил до 256 столбцов, но, к сожалению, для выделения требуется список столбцов, и для него нет сокращений, так что вам придется сделать что-то вроде :set colorcolumn=+1,+2,+3,+4,+5,+6etcetera, возможно, вплоть до столь +256широкого Вы думаете, что хотели бы, чтобы ваш правый край. Однако при этом будут выделены только строки, существующие в буфере, а не все строки в окне.
mkomitee

1
@Dyslexic Tangent: почему бы вместо этого не выделить первые 80 столбцов?
brice

1
Я не думал об этом. Установите цвет фона, который вы хотите использовать, чтобы выделить> 80 столбцов, и задайте colorcolumn для всех столбцов от 1 до 80, и установите группу выделения для colorcolumn таким цветом, каким вы хотите, чтобы ваш обычный фон был.
mkomitee

2
Один вопрос, хотя я могу правильно установить цвет, печатая :hi colorcolumn ...его, кажется, не работает, когда я помещаю его в .vimrc. Вы знаете, как это сделать?
robbrit

Я вижу ту же проблему, что и robbrit - если я запускаю команду выделения в режиме ex, она выглядит хорошо, но если она есть в моем файле vimrc, она уничтожает мою
цветовую схему

16

Решение, предложенное в комментарии выше. Сначала выделите фон, затем выделите черный цвет ColorColumn в качестве наложения. Установите цветовой столбец на строки 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),",")

1
Это просто, но гениально. Спасибо!
Авиаудар

8

пытаться:

:/\%>80v./+

он пометит +80 символов как ошибку


Так умно в крайнем случае. Мне это нравится, потому что он адаптируется к изменениям темы. Спасибо.
Бенджамин

0

Я не думаю, что возможно получить то, что вы хотите, но я слежу за этим вопросом, так как я сам заинтересован в этом.

Возможно, я заявляю очевидное, но вы можете настроить выделение в столбцах 70+, чтобы получить представление о том, насколько близко вы подходите к 80-му столбцу.


0

Для тех, кто использует onedark.vim, как я, и которым нужно решение, опубликованное Коннером, я добавил эти строки в свой файл 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"}
  \ }

Я просто поменял местами два значения, взял их из исходного кода onedark

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