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


32

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

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

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

Ответы:


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"

Спасибо, эта опция должна быть добавлена ​​после того, как этот вопрос был опубликован. Полезно знать, хотя.
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

Обнаружена ошибка при обработке команд BufReadPost Auto для "*": E518: Неизвестная опция: signcolumn = yes
brandones

Вам нужна более новая версия vim, @brandonjones. Я не уверен, когда signcolumnбыл добавлен, но его нет в 7.2 и он есть в 8.0. Я не помню, чтобы видел это в 7.4, но это может быть там. Он присутствует в текущих версиях Vim и Neovim.
Джим Стюарт,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.