Як додати путівники / рядки відступу


42

У Sublime Text 2 ви отримуєте вертикальні орієнтири, де знаходиться ваш відступ, як це:

Скріншот піднесеного тексту

але в vim я, очевидно, не:

Скріншот vim

Чи є спосіб показати такі рядки у vim? До речі, мій відступ - 2 пробіли.

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab

Відповіді:


39

Уніфікована відповідь:

Якщо ви використовуєте вкладки

Я б спробував використати listchars:

:set listchars=tab:\|\ 
:set list

зауважте: після останнього \вище є пробіл .

Цей метод хороший тим, що він використовує вбудовану підтримку Vim для показу подібних речей.

Приклад виводу:

|       if (1) {
|       |       func();
|       }

скріншот зразка тексту вище

Однак це не працює для провідних просторів. Як вказував @Josh Petrie, для роботи з просторами є виправлення , але тоді вам доведеться перекомпілювати Vim, що виходить за рамки цієї відповіді.

Якщо ви використовуєте пробіли, і не проти використовувати плагін

Вайбхав Сагар вказує, що плагін indentLine виконує цю функціональність.

Встановіть звичайним способом (див. Установка плагінів ) і, здається, магічно просто працювати без додаткового введення. Якщо ви не заперечуєте за барами ASCII, вам не потрібно нічого робити зі своїми шрифтами. Приклад виведення вашого прикладу після встановлення параметрів відступу та запуску:IndentLinesReset

45   ¦ var move = function(direction) {
46   ¦ ¦ if(!initialized) { initialize(); }
47 
48   ¦ ¦ if(shiftBoard(direction)) {
49   ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50   ¦ ¦ }
51   ¦ };

скріншот прикладу з пробілами

Для додатка потрібен Vim 7.3 або новішої версії, і він чіткіше використовує функцію Conceal цієї версії. Замість того, щоб насправді приховувати текст, він замінює текст барами у вікні, але не власне буфером. У результаті ви бачите смужки, але вони не зберігаються у файлі (оскільки вони насправді пробіли)

Caveat

Обидва ці методи передбачають "належним чином" відступний код. Вони не розміщують рядки відступу на рівні відступу, коли відкривається "блок" (що, здається, піднесений), а натомість розміщує рядки через рівні проміжки часу, залежно від ваших параметрів відступу. Крім того, він показує лише смужки на лініях, де є фактично простір (саме тому у рядку виводу vim під першим ifнемає смуг, що робить візуальний проміжок)


Насправді я використовую пробіли для відступу замість вкладок. Я оновив своє запитання.
aharris88

Ой. Ну тоді це потребуватиме додаткових досліджень.
Джон О'М.

1
Існує патч, щоб змусити списки працювати на непроміжних просторах, які можна викопати у списку розсилки. Однак він не був прийнятий до офіційного розповсюдження :(

1
Оновлена ​​відповідь, щоб включити інформацію від Вайбхава Сагара та Джоша Петрі. Я спробував згаданий плагін Вайбхав і показав результати у відредагованій відповіді. Думаю, я сам розпочну використовувати цей плагін. Це не фантастично, але загалом, здається, працює досить добре.
Джон О'М.

1
indentLine працює добре для python, json, viml, c, c ++ і т. д. Але, на жаль, він не працює з vim-javascript, тому я замість цього використовую посібники vim-indent.
Сассан

19

Інший варіант, який я використовую, і це не саме те, про що ви просили, але виконує ту саму мету, щоб полегшити розгляд того, що знаходиться в тому ж стовпці, - встановити наступне у своєму vimrc:

set cursorcolumn
set cursorline

ілюстрація курсорна колонка

Це означає, що вам потрібно перемістити курсор до стовпця, який ви хочете бачити, але ви отримуєте менше візуального скупчення. Зазвичай, коли я дбаю про рівні відступи, я все одно тримаю місце з курсором. Мій шлях також не настільки незграбний на мовах, як python, без закриття дужок.


Користувачі Python vi помруть за цю функцію
shuva

18

Для повноти є також плагін Indents Guides , який показує рівні відступи шляхом чергування кольорів пробілів. Тут потрібна версія 7.2 або пізніша. Оскільки він використовує tabstopі shiftwidthзмінні, ймовірно, буде працювати для ваших параметрів відступу відразу.

Імгур

Після того, як плагін встановлений, ви можете просто використовувати :IndentGuidesEnableабо :IndentGuidesDisable. Якщо ви використовуєте термінальний vim, врахуйте, що відповідно до посібника,

Наразі у Терміналу Vim є лише основна підтримка. Це означає, що кольори не будуть автоматично розраховані на основі вашої кольорової схеми. Натомість використовуються деякі попередньо встановлені кольори залежно від того, встановлений темний або світлий фон.

Для того щоб змінити кольори напрямних для скріншоту, я використав наступне

let g:indent_guides_auto_colors=0

тому кольори не перераховуються під час заміни буферів, а потім встановлюють кольори за допомогою

hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236

Як і в інших представлених рішеннях, він лише показує напрямні відступу на рядках, чи були пробіли.


додати let g:indent_guides_enable_on_vim_startup=1до мого .vimrc, щоб увімкнути це при запуску.
inye

9

Я вважав плагін indentLine найкращим для цього. Вам потрібен шрифт з відповідними символами, але я вважаю, що консолі в Windows та Menlo на Mac OS X добре працюють. Як зазначається в уніфікованій відповіді вище, це працює за допомогою (ab), використовуючи concealфункцію vim, щоб поставити вертикальні смуги (від використовуваного шрифту) в потрібне місце. Я дуже задоволений цим рішенням, але недоліком його є те, що мої вертикальні смуги є частиною гліфів, що малюють коробку, і вони розташовані по центру, а не вирівняні вліво, як у інших редакторах. Я звик до цього, але це можна виправити, вручну виправляючи ваш шрифт або використовуючи шрифт, як Fantasque Sans Mono (зверніть увагу на те, як на знімках екрана у пов'язаному рефінансі github використовується indentLine).


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

Моя помилка, я оновив свою відповідь.
Вайбхав Сагар

Який гліф - це наклеєна вертикальна лінія? Можна тут вставити? Спасибі.
Тімтро

2

Плагін indentLine, як правило, досить повільний для не малих файлів, який можна помітити при натисканні клавіші Enter, оскільки він відстає на секунду або близько того.

Я виявив, що vim-indentguides є більш швидким і візуально схожим плагіном, який також візуально відрізняє відступи вкладки від пробілів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.