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

32

Я только что добавил плагин Git Gutter для Vim, который показывает добавленные / измененные / удаленные строки в соответствии с git diff. Он использует Sign Columnдля отображения символов рядом с каждой строкой.

На данный момент столбец появляется при сохранении, что довольно неприятно. Я бы предпочел, чтобы столбец всегда отображался, даже если он пуст.

Как сделать так, чтобы столбец подписи всегда был виден?

jordelver
источник

Ответы:

40

Начиная с Vim 7.4.2201, вы можете делать:

:set signcolumn=yes

Cp. :help 'signcolumn', Для более старых версий Vim вы должны определить фиктивный знак и поместить его в текущий буфер:

:sign define dummy
:execute 'sign place 9999 line=1 name=dummy buffer=' . bufnr('')
Инго Каркат
источник
14
Чтобы он работал в каждом новом открытом буфере, поместите оба autocmd BufEnter * sign define dummyи autocmd BufEnter * execute 'sign place 9999 line=1 name=dummy buffer=' . bufnr('')в ваш vimrc.
13:30
Кажется устаревшим, как set signcolumn=yesи трюк без махинаций.
cprn
1
@cprn: Ты прав; Я добавил это к своему ответу. Благодарность!
Инго Каркат
Спасибо, удалив мой ответ снизу. Ура!
cprn
22

Для vim-gitgutter вы также можете установить следующую переменную в вашем ~/.vimrc:

let g:gitgutter_sign_column_always = 1

ОБНОВИТЬ

Плагин теперь выдаст предупреждение, чтобы удалить вышеуказанную строку и вместо этого использовать:

set signcolumn="yes"
wjv
источник
Спасибо, эта опция должна быть добавлена ​​после того, как этот вопрос был опубликован. Полезно знать, хотя.
jordelver
1
Действительно, похоже, что обязательство, которое добавило его, было сделано 14 марта 2013 года - ровно через две недели после вашего вопроса!
wjv
Работая над чем-то другим, я недавно покопался в источнике GitGutter и заметил, что установка этой переменной заставляет отображать столбец знака точно так же, как принятый ответ на этот вопрос - путем установки фиктивного знака.
wjv
5
Кстати, для меня это было set signcolumn=yes без кавычек
tam5
6

Хотя маленький танец, определяющий знак и размещающий его, работает нормально, более элегантная альтернатива, которая хорошо работает для меня:

autocmd BufRead,BufNewFile * setlocal signcolumn=yes

И если есть определенные типы файлов, которые не должны иметь столбец:

autocmd FileType tagbar,nerdtree setlocal signcolumn=no
InnaM
источник
Обнаружена ошибка при обработке команд BufReadPost Auto для "*": E518: Неизвестная опция: signcolumn = yes
brandones
Вам нужна более новая версия vim, @brandonjones. Я не уверен, когда signcolumnбыл добавлен, но его нет в 7.2 и он есть в 8.0. Я не помню, чтобы видел это в 7.4, но это может быть там. Он присутствует в текущих версиях Vim и Neovim.
Джим Стюарт,