Відображення вкладок як символів


119

Коли я працюю над файлами в python, я інколи помиляюся з вкладками пробілів і навпаки. Чи можна змусити Vim відобразити символ для вкладки замість вкладки?


Як бічна примітка, ви можете налаштувати перетворення всіх вкладок у пробіли retabкожного разу, коли ви зберігаєте файл.
0xc0de

Якщо ви встановили vim-faq , ви можете отримати офлайн-відповідь там: :h vim-faqта шукайте /invisible. Важко запам'ятовується тег :h faq-19.8.
Хоцке

Відповіді:


119

Так, використовуйте список:

set list
set listchars=tab:>-

Якщо ви помістите ці два рядки у свій .vimrc, буде показано вкладки як >для стартового положення, так і -через решту вкладки.

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


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

8
Мені подобається використовувати символ Unicode, оскільки він трохи менше, ніж >. В даний час я бачу проміжок білого простору, позначаючи еол (хоча я можу спробувати вище). Мої налаштування: 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 СЕРЕДНЯ ДОТ .)

Як пояснено в :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:├─
sch

це щойно дало мені? в
еолі

14

Виділення вкладок

Тимчасове Tabвиділення

Для періодичного використання можна просто виділити всі вкладки в документі за допомогою наступної /команди пошуку :

/\t

Щоб видалити виділення, просто введіть :nohкоротке значення для :nohlsearch—не високої освітленості.

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

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

Виділення вкладки in vim

Більше виділення

Більше цих корисних команд виділення - включаючи комбінований пробіл і роблячи це постійним - дивіться у Вікі-вікі .


4
Ви також :match Error /\t/можете виділити вкладки (або будь-який інший шаблон для цього питання) незалежно від реєстру пошуку та hlsearch (введіть, :matchщоб очистити його).
Martin Tournoij

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

9

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

Це дуже допомагає, особливо в пітоні, де відступ важливий.

(Зображення взято за посиланням вище)

Крім усього іншого, він пропонує команду перемикання, яку можна відобразити на комбінацію клавіш, щоб ви могли вимкнути її, коли вона вам не потрібна.


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.