Когда я работаю с файлами в Python, я иногда ошибочно принимаю табуляции за пробелы и наоборот. Есть ли способ заставить Vim отображать символ для вкладки вместо вкладки?
:h vim-faq
и искать /invisible
. Трудно запомнить тег :h faq-19.8
.
Когда я работаю с файлами в Python, я иногда ошибочно принимаю табуляции за пробелы и наоборот. Есть ли способ заставить Vim отображать символ для вкладки вместо вкладки?
:h vim-faq
и искать /invisible
. Трудно запомнить тег :h faq-19.8
.
Ответы:
Да, используйте listchars:
set list
set listchars=tab:>-
Если вы поместите эти две строки в ваш .vimrc, вкладки будут показаны как >
для начальной позиции, так и -
для остальной части вкладки.
(Sidenote: listchars также может показывать завершающие пробелы с помощью trail:x
(замените x
символ, который вы хотите использовать для конечного пробела), что также может быть полезно.)
set listchars=tab:!·,trail:·
, IMHO ·
намного яснее, чем -
... Вам нужна довольно свежая версия Vim, чтобы это работало между прочим (не уверен, что именно, я думаю, 7.3.x) ...
▸
как он немного меньше, чем >
. В настоящее время я вижу конечный пробел, помечая eol (хотя я могу попробовать выше). Мои настройки: set listchars=eol:¬,tab:▸\
и
Основной ответ :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:⎵
eol
, я использую U + 23CE RETURN СИМВОЛtrail
, я использую U + 2420 СИМВОЛ ДЛЯ КОСМОСАnbsp
, я использую U + 23B5 НИЖНИЙ квадратная скобкаЭти символы достаточно различимы, поэтому они редко появляются буквально в тексте документа.
Чтобы ввести эти специальные символы в свой vimrc
, введите Ctrl-vu23CE
в режиме вставки, как описано в :help utf-8-typing
.
set lcs=tab:├─
Для случайного использования можно просто выделить все вкладки в документе с помощью следующей /
команды поиска :
/\t
Чтобы убрать выделение, просто наберите слово, :noh
которое означает «нет :nohlsearch
освещения».
" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/
Для получения дополнительной информации об этих полезных командах выделения, в том числе в сочетании с конечным пробелом и созданием этого постоянного элемента, см. Вики Vim .
:match Error /\t/
для выделения вкладок (или любого другого шаблона в этом отношении) независимо от регистра поиска и hlsearch (введите, :match
чтобы очистить его).
Мне лично нравится использование плагина indentLine , который отображает вертикальную линию на уровнях отступов.
Это очень помогает, особенно в python, где важен отступ.
Помимо прочего, он предоставляет команду переключения, которую можно сопоставить с комбинацией клавиш, чтобы вы могли отключить ее, когда она вам не нужна.
Вы можете по-разному показывать вкладки в обычном терминале и gvim.
set list!
if has('gui_running')
set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif
(Добавление для полноты, в случае, если другие считают это полезным).
Самый простой способ это сделать :set list
, который будет показывать вкладки как ^I
и конец строки как $
.
Мне нравится использовать отображение, которое вызывает
:set invlist
для переключения между обычным отображением и отображением списка.
Например:
:nmap <leader>l :set invlist<cr>
Это позволяет мне быстро проверить, есть ли проблемы с вкладками и пространством, а затем вернуться к обычному отображению.
retab
каждом сохранении файла.