Заставьте пробелы действовать и выглядеть как вкладки в VS Code

При написании исходного файла в VS Code, оформленного пробелами определенной ширины (возможно, определяемой файлом .editorconfig), как я могу заставить VS Code обрабатывать пробелы как вкладки без переформатирования файла?

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


person Sam    schedule 25.02.2020    source источник
comment
По сути, вы хотите, чтобы редактор преобразовывал пробелы в табуляции в активном файле, но конвертировал обратно при сохранении в пробелы.   -  person marblewraith    schedule 25.02.2020
comment
@marblewraith да   -  person Sam    schedule 25.02.2020
comment
@marblewraith ты знаешь, как это сделать?   -  person Sam    schedule 26.02.2020
comment
У меня есть несколько мыслей, я разделю их на 2 отдельных ответа.   -  person marblewraith    schedule 28.02.2020


Ответы (3)


Аспект выбора кода с пространственной таблицей поддерживается в VSCode 1.52 (ноябрь 2020 г.) и:

Sticky Tab Stops при отступе пробелами

Если вы предпочитаете использовать в коде отступы с пробелами, существует новый параметр editor.stickyTabStops, который заставляет VS Code обрабатывать перемещения курсора в начальных пробелах аналогично табуляции.

Sticky Tab Stops -- https://media.githubusercontent.com/media/microsoft/vscode-docs/7bdaf30689a2352238048150da7087cc6857ca72/release-notes/images/1_52/sticky-tab-stops.gif

person VonC    schedule 07.12.2020

Внешний вид

Вы сказали, что vscode:

отображение 4 пробелов в моем редакторе

Я предполагаю, что это означает, что вы получаете эти маленькие символы точек Interpunct, которые появляются вот так ····

Если вы хотите, чтобы они исчезли, чтобы они больше соответствовали вкладкам, перейдите в настройки VScode (JSON) и введите следующее:

"editor.renderWhitespace": "selection"

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

Чтобы это исправить, есть 2 вещи.

  1. (минимум) Установите направляющие отступов явно в пользовательских настройках, это будет отображать вертикальные линии на каждом уровне отступа, независимо от того, используются ли в файле табуляции или пробелы:
"editor.renderIndentGuides": true
  1. (необязательно) Если вы хотите пойти дальше, вы можете попробовать несколько расширений, но я рекомендую следующее: отступ-радуга. Для этого есть много вариантов, но у меня есть моя конфигурация, поэтому после определенного уровня отступа она становится более неприятной, потому что я отношусь к ней как к запаху кода, т.е. мне нравится минимизировать количество вложений, если это возможно.

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

Выделение пробелов VScode

Vscode конвертирует пробелы во вкладки

Выделение вкладок VSCode

person marblewraith    schedule 28.02.2020
comment
Отличный материал! Как насчет навигации с помощью клавиш со стрелками? Могу ли я заставить пробелы действовать как вкладки в этом отношении? (Курсор должен переходить на каждый уровень отступа при использовании клавиш со стрелками влево и вправо) - person Sam; 28.02.2020
comment
Я думаю, что эта ветка — это то, что вы ищете — github.com/microsoft/vscode/issues/ 2798 - person marblewraith; 28.02.2020

Поведение

Чтобы поведение отступов было более последовательным, в настройках должно быть следующее, если оно еще не применяется по умолчанию:

"editor.detectIndentation": true,
"editor.insertSpaces": true,
"editor.useTabStops": true

Что касается этого:

исходный файл в VS Code, оформленный пробелами определенной ширины (может быть, определяется файлом .editorconfig)

Я не думаю, что это возможно, или, по крайней мере, не изначально. Возможно, вы сможете найти/написать расширение, которое может выполнять обнаружение на основе размера табуляции, поскольку на самом деле существует свойство, называемое:

"editor.tabSize": 4,

Не уверен, что это поможет, но вы можете выполнять выборочные переопределения настроек в зависимости от типа файла, например:

"[yaml]": {
    "editor.insertSpaces": true,
    "editor.tabSize": 2,
    "editor.autoIndent": "advanced"
}
person marblewraith    schedule 28.02.2020