Отображение вкладок в виде символов


119

Когда я работаю с файлами в Python, я иногда ошибочно принимаю табуляции за пробелы и наоборот. Есть ли способ заставить Vim отображать символ для вкладки вместо вкладки?


Как примечание, вы можете настроить преобразование всех вкладок в пробелы при retabкаждом сохранении файла.
0xc0de

Если вы установили vim-faq , вы можете получить оффлайн ответ: :h vim-faqи искать /invisible. Трудно запомнить тег :h faq-19.8.
Хотчке

Ответы:


119

Да, используйте listchars:

set list
set listchars=tab:>-

Если вы поместите эти две строки в ваш .vimrc, вкладки будут показаны как >для начальной позиции, так и -для остальной части вкладки.

(Sidenote: listchars также может показывать завершающие пробелы с помощью trail:x(замените xсимвол, который вы хотите использовать для конечного пробела), что также может быть полезно.)


6
Примечание: мне нравится использовать set listchars=tab:!·,trail:·, IMHO ·намного яснее, чем -... Вам нужна довольно свежая версия Vim, чтобы это работало между прочим (не уверен, что именно, я думаю, 7.3.x) ...
Мартин Турной

8
Мне нравится использовать символ Unicode, так как он немного меньше, чем >. В настоящее время я вижу конечный пробел, помечая eol (хотя я могу попробовать выше). Мои настройки: set listchars=eol:¬,tab:▸\ и
Мартин Йорк

58

Основной ответ :set listтаков: вкладки отображаются как ^I.

Тем не менее, я рекомендую пойти дальше. Просто :set listпроблематично в том, что не удается сохранить визуальное выравнивание на экране. Например:

%.o: %.cpp
^Ig++ -c $<

не выглядит хорошо, особенно , когда вы ожидаете gот g++появляться под первым pиз cpp(предполагая tabstop=8).

Поэтому я предлагаю, чтобы .vimrcвы добавили что-то вроде :set listchars=tab:␉· (для ясности, это символ Unicode U + 2409 СИМВОЛ ДЛЯ ГОРИЗОНТАЛЬНОЙ ТАБУЛЯЦИИ, за которым следует U + 00B7 MIDDLE DOT .)

Как объяснено в :help listchars, двухсимвольная настройка для tab:xyсохранения визуального выравнивания:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

Пример выше будет отображаться на экране как:

%.o: %.cpp
␉·······g++ -c $<

Лично я стараюсь изо всех сил listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

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

Чтобы ввести эти специальные символы в свой vimrc, введите Ctrl-vu23CEв режиме вставки, как описано в :help utf-8-typing.


2
Смотрите такжеset lcs=tab:├─
СЧ

это просто дало мне? в
eol

14

Подсветка вкладок

Временная Tabподсветка

Для случайного использования можно просто выделить все вкладки в документе с помощью следующей /команды поиска :

/\t

Чтобы убрать выделение, просто наберите слово, :nohкоторое означает «нет :nohlsearchосвещения».

Постоянное Tabвыделение

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Подсветка вкладок в vim

Больше выделения

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


4
Вы также можете использовать :match Error /\t/для выделения вкладок (или любого другого шаблона в этом отношении) независимо от регистра поиска и hlsearch (введите, :matchчтобы очистить его).
Мартин Турной

1
@Carpetsmoker можно найти гораздо больше эти полезные команды выделения информации ( в том числе в сочетании с конечными пробелами!) На Vim вики о выделяя ненужные пробела .
Серж Строобандт

9

Мне лично нравится использование плагина indentLine , который отображает вертикальную линию на уровнях отступов.

Это очень помогает, особенно в python, где важен отступ.

(Изображение взято по ссылке выше)

Помимо прочего, он предоставляет команду переключения, которую можно сопоставить с комбинацией клавиш, чтобы вы могли отключить ее, когда она вам не нужна.


2
Я считаю, что этот плагин предназначен для отступа пробелов, хотя?
Джейк

5

Вы можете по-разному показывать вкладки в обычном терминале и gvim.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Добавление для полноты, в случае, если другие считают это полезным).


4

Самый простой способ это сделать :set list, который будет показывать вкладки как ^Iи конец строки как $.

Мне нравится использовать отображение, которое вызывает

:set invlist 

для переключения между обычным отображением и отображением списка.

Например:

:nmap <leader>l :set invlist<cr>

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

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