Visual Studio заменяет вкладки пробелами

Обновлено: 24.11.2024

Культурные войны продолжаются. Страна разделена, и конца этому не видно. Табы или пробелы? Есть даже безумное (ИМХО) утверждение, что на просторах люди зарабатывают больше денег.

В этом я буду участвовать с Джиной Трапани. Я выбираю рабочий код.

Команды могут конфликтовать, но проблема форматирования кода между командами решается с помощью EditorConfig. Я удивлен, что больше людей не знают об этом и не используют его, поэтому этот пост в блоге — мой небольшой способ рассказать об этом. РАССКАЖИТЕ ЛЮДЯМ.

Возьмите проект, создайте новый файл .editorconfig и поместите его в него. Я буду использовать пример приложения hello world для новой консоли dotnet.

В этом примере я установил для себя только *.cs, но вы также можете сказать [*.] или просто [*], если хотите, а также иметь несколько разделов.

Вы отметите этот файл вместе с вашим проектом, чтобы все в команде разделяли ценности команды.

Здесь, в Notepad2, мы видим, что кто-то использовал пробелы вместо пробелов, как дикарь. В этом редакторе пробелы отображаются бледными точками.

Я открою этот проект в Visual Studio 2017, которая изначально поддерживает файл EditorConfig. Обратите внимание на предупреждение внизу, где VS сообщает мне, что в этом проекте используются соглашения, отличные от моих собственных.

Команды VS Format Document для этого проекта будут использовать табуляции, а не пробелы. Вот тот же документ, переформатированный в VS:

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

Более того, если ваш редактор поддерживает это, вы можете включить «Расширения EditorConfig» для определенных файлов или языков. Таким образом, ваша команда сможет поддерживать согласованность между проектами. Если вы знакомы с FxCop и StyleCop, это похоже на них.

Вы также можете задать важность этих правил с помощью таких элементов, как "предложение", "предупреждение" или даже "ошибка".

В качестве примера я укажу, что моей команде нужны предопределенные типы для местных жителей:

Visual Studio предлагает здесь лампочку и предлагаемое исправление, потому что моя команда предпочла бы, чтобы я использовал «строку», а не полную «System.String».

  • csharp_new_line_before_open_brace – Ставим ли мы открывающие фигурные скобки в конце строки или на отдельной новой строке?
  • csharp_new_line_before_members_in_object_initializers. Разрешаем ли мы A = 3, B = 4, чтобы настаивать на новой строке для каждого?
  • csharp_indent_case_contents. Выстраиваем ли мы все наши операторы switch/case причудливым образом или делаем отступ для каждого случая, как задумал создатель?
  • Вы даже можете решить, как вы хотите регистрировать вещи и делать странные предложения: pascal_case , camel_case , first_word_upper , all_upper , all_lower

О Скотте

Скотт Хансельман – бывший профессор, бывший главный архитектор отдела финансов, ныне спикер, консультант, отец, диабетик и сотрудник Microsoft. Он неудавшийся стендап-комик, угловой и автор книг.

Хостинг

Спасибо за статью! Я использую это в каждом проекте, над которым работаю, и добавляю его почти во все OSS, в которых участвую. Однако есть несколько шероховатостей, с которыми я действительно справился бы в реализации Visual Studio 2017.

Во-первых, и это самое важное для меня, я действительно хочу, чтобы Файл -> Новый проект и Файл -> Новый файл соответствовали моим настройкам. Меня очень расстраивает необходимость всегда переформатировать каждый файл при создании нового решения.

Мне очень хотелось бы установить свои предпочтения для файлов *.csproj. Что бы я ни делал, мой файл csproj всегда форматируется с двумя пробелами.

Кроме того, для таких типов файлов, как json или xml, немного раздражает то, что когда Visual Studio изменяет файл (например, добавляет пакет npm в project.json или связывает перенаправления, добавляемые в web.config), файл всегда форматируется пробелами независимо от моих настроек редактора.

Кроме этого, мне очень нравится эта функция; особенно языковые настройки csharp! :)

Серьезно, в 2017 году люди все еще тратят мозговые циклы на споры о таких вещах, как табуляция и пробелы? Всем взрослеть. Это не было интересной дискуссией 30 лет назад, и уж точно не сегодня. А теперь за работу!

Ctrl-K Ctrl-D, теперь понятно, что он использует в моторном отсеке, но исправляет форматирование, чтобы я мог подумать о коде :)

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

Космические люди зарабатывают больше денег?

Возможно, но корреляция — это не причинно-следственная связь. Очень вероятно, что больше зарабатывают опытные программисты, предпочитающие пробелы вкладкам.

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

Я не делаю отступ в своем коде. Я набираю его одной строкой в ​​уродливой форме. Так люди заметят, что я профессиональный программист.

В чем преимущество использования EditorConfig по сравнению с простой настройкой параметров формата в Visual Studio? Это просто для того, чтобы вы могли использовать свои стили форматирования как часть проекта, а не настройку в редакторе?

ИМХО, редактор (Visual Studio) должен оставить текущий стиль файла без изменений, НО отображать его для пользователя в соответствии с его предпочтительным стилем. Нравятся шрифты и цвета.
Проблема решена.

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

Почему система контроля версий не справляется с этим? Git уже управляет для нас окончаниями строк, поэтому нам не нужно спорить о том, ставить ли CR перед LF или нет. Почему бы не сделать что-то подобное для начала строки?

После `git config --global core.indent 4s` мне не нужно заботиться о том, что у вас есть в вашем файле EditorConfig или в файлах на удаленном компьютере. Мой локальный клон будет иметь правильный отступ, как и ваш, после того, как вы выполните `git config --global core.indent 4t`.

А что касается теории "рабочего кода". Это здорово, если вам или кому-либо еще в будущем придется исправлять/улучшать приложение. Трудный для чтения код, в котором строки расположены непоследовательно, для меня кричат ​​о небрежной практике кодирования и, следовательно, о потенциально паршивом коде. Я не говорю об этом, но я не верю в уродливый код, в то, что он находится в лучшей форме, чем он может быть без дыр.

Достаточно простого сочетания клавиш Ctrl-E Ctrl-D.

Кевин,
Немного вещей в размещении куриных губ на собственной линии заключается в том, что легче увидеть, все ли они выстроены в линию (отверстие с закрытием), что облегчает поиск отсутствующих.

Также проще скопировать и вставить блок. Вам не нужно подниматься на одну строку вверх, а затем прокручивать до конца, чтобы взять одну маленькую жалкую куриную губу.

А если вам платят за написанную строку кода, то и бесплатные деньги!

Я не понимаю. Итак, вы говорите, что люди не должны спорить о табуляциях/пробелах, а затем просто показываете решение, которое заставляет всех в одной команде использовать один и тот же метод.
Почему это не может быть более похоже на то, как git обрабатывает CRLF? Пусть каждый клиент определяет, как он хочет извлекать файл, и просматривать его локально в своем собственном редакторе, и всегда коммитить после замены всех пробелов на какое-то «каноническое» значение (будь то табы или пробелы, не имеет значения — только CI-сервер «видит» эти файлы до того, как компилирует/упаковывает их).
Конечно, это можно расширить до любого аналогичного аргумента форматирования.
Я уверен, что такое решение не слишком сложное. Возможно, уже есть какие-то git-хуки, которые это делают.

Вкладки. Давай, люди! Во всех дебатах, которые я когда-либо читал о табуляциях и пробелах, я ни разу не видел, чтобы кто-нибудь поднимал вопрос, почему табуляции лучше, чем я собираюсь высказать:

Когда вы используете вкладки, это позволяет вам выбирать блоки кода с помощью мыши (да, мыши) и быть точным при выборе, чтобы он не включал начальные или конечные пробелы, без необходимости щелкать точно в том месте, где блок кода начинается или заканчивается.

С помощью вкладок я могу щелкнуть и перетащить немного перед началом первой строки блока кода, который я хочу вырезать/скопировать, и выбор начинается только там, где начинается строка кода (без начального пробела). или вкладку). У меня есть возможность быстрее наводить и щелкать, потому что мне не нужно тратить несколько дополнительных миллисекунд, чтобы идеально выровнять курсор.

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

И да, я использую комбинацию мыши и клавиатуры при написании кода, потому что мышь намного лучше способна указать, куда смотрит мой глаз, чем «ходить» туда курсором, возясь с клавишами со стрелками.Утверждать, что использовать только клавиатуру для редактирования кода лучше, чем использовать мышь, это все равно, что настаивать на том, что лошадь и повозка лучше автомобиля просто потому, что это было первое, что они узнали. Держу пари, что однажды, когда у нас появятся интерфейсы мозг-компьютер, которые позволят вам программировать без помощи рук, эти люди все еще будут цепляться за свои доисторические клавиатуры.

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

Отступы в Visual Studio управляются с помощью клавиши табуляции, которую можно использовать для вставки символов табуляции или пробелов в код, а также для отступа или отмены отступа для выбранных строк. Тип отступа, используемый для языка, может иметь различные эффекты.

Как изменить настройки вкладок в Visual Studio?

Чтобы получить доступ к настройкам вкладки, откройте диалоговое окно «Параметры», выбрав «Параметры» в меню «Инструменты». Разверните раздел «Текстовый редактор» в дереве, а затем язык, для которого вы хотите изменить настройки. Наконец, выберите ветку «Вкладки».

Как отобразить пробелы в Visual Studio?

Visual Studio: показывать пробелы и настраивать пробелы вместо…

  1. Меню: Правка , Дополнительно , ​​Просмотр пробелов.
  2. Переключить сочетания клавиш: Ctrl R, Ctrl-W. Ctrl Е, С.

Как вы конвертируете вкладки в пробелы в Spyder?

«Как заменить пространство точками в spyder» Код ответа

Как вы показываете пробелы в коде VS?

  1. Откройте пользовательские настройки. Комбинация клавиш: CTR + SHIFT + P -> Настройки: открыть настройки пользователя;
  2. Вставьте в поле поиска пробел и выберите все параметры.

Почему люди предпочитают пробелы вкладкам?

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

Как преобразовать вкладки в пробелы в Visual Studio Code?

1 Выберите «Заменить»: CTRL-H 2 Введите горизонтальную вкладку в поле «Найти»: удерживайте ATL и введите 009 на клавиатуре. 3 Введите пробел (или несколько пробелов) в поле «Заменить»: нажмите клавишу «Пробел». 4 Нажмите «Ввод», чтобы начать замену табуляции пробелами. Подробнее

Как сделать так, чтобы вкладка выглядела как вкладка в Visual Studio?

Каков размер вкладок по умолчанию в Visual Studio?

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

Как преобразовать вкладки в пробелы в поле поиска?

Введите горизонтальную вкладку в поле поиска: удерживайте ATL и введите 009 на клавиатуре. Нажмите Enter, чтобы начать замену табуляции на пробел (ы). Это преобразует каждую вкладку в одинаковое количество пробелов, что неверно. — Дэвид Дан Не тот ответ, который вы ищете?

Если для вас важно правильно форматировать код, вы прекрасно знаете о дилемме пробелов и табуляции.
Как правило, раньше предпочтение отдавалось вкладкам, поскольку они оптимизировали размеры файлов исходного кода; они также позволяли легко переключаться между 2 и 4 пробелами.
В последнее время я вижу, что вместо этого используется все больше и больше пробелов, поскольку они обеспечивают более единообразное представление в различных конфигурациях IDE.
Даже если лично я все еще предпочитаю вкладки (и, к счастью, я не одинок), в этом руководстве я объясню, как их настроить в самых популярных IDE.

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

  • Как выбрать между пробелами и вкладками
    indent_style =
    indent_size = <4|tab>
    tab_width = 4
  • Как визуально отображать пробелы
    нет данных
  • Как переформатировать существующий код
    нет данных
  • Другие полезные настройки
    • Как отображать номера строк
      нет данных
    • Как отображать линии отступа
      нет данных
    • Как выбирать между пробелами и вкладками
      Из Инструменты | Опции | Текстовый редактор | Все языки | Вкладки, здесь выберите «Вставить пробелы» или «Сохранить вкладки».
      В этом же диалоговом окне вы также можете настроить «Размер табуляции» и «Размер отступа»
    • Как визуально отображать пробелы
      Необходимо открыть файл с исходным кодом, прежде чем найти следующий параметр
      From Edit | Расширенный | «Просмотреть пустое пространство» (Ctrl+E, S)
    • Как переформатировать существующий код
      Из Правка | Расширенный | «Форматировать документ» (Ctrl+E, D) или «Форматировать выделение» (Ctrl+E, F)
    • Другие полезные настройки
      • Как отображать номера строк
        Из инструментов | Опции | Текстовый редактор | Все языки | Общие, "Номера строк"
      • Как отображать линии отступа
        Из инструментов | Опции | Текстовый редактор | Общие, "Показать направляющие линии структуры"
      • Как выбирать между пробелами и вкладками
        Из Visual Studio | Настройки | Исходный код | Форматирование кода | Текстовый файл | Пробелы, «Преобразование табуляции в пробелы»
        В этом же диалоговом окне вы также можете настроить «Ширина табуляции» и «Ширина отступа»
      • Как визуально отобразить пробелы
        Из Visual Studio | Настройки | Текстовый редактор | Маркеры и правила | Показать невидимые символы, здесь выберите «Всегда», «Выбор» или «Никогда»
      • Как переформатировать существующий код
        Из Visual Studio | Редактировать | Формат, «Форматировать документ» (Ctrl+I)
      • Другие полезные настройки
        • Как отображать номера строк
          Из Visual Studio | Настройки | Текстовый редактор | Маркеры и правила, "Показать номера строк"
        • Как отображать линии отступа
          Из Visual Studio | Настройки | Текстовый редактор | Маркеры и правила, "Показать линии отступа"
        • Как выбирать между пробелами и вкладками
          Из файла | Настройки | Настройки | Текстовый редактор, "Обнаружение отступов"
          Из файла | Настройки | Настройки | Текстовый редактор, "Вставка пробелов"
          Из файла | Настройки | Настройки | Текстовый редактор, "Размер вкладки"
        • Как визуально отобразить пробелы
          Из файла | Настройки | Настройки | Текстовый редактор, "Визуализация пробелов"
        • Как переформатировать существующий код
          From View | Палитра команд (Ctrl+Shift+P), «Форматировать документ» (Shift+Alt+F)
        • Другие полезные настройки
          • Как отображать номера строк
            Из файла | Настройки | Настройки | Текстовый редактор, "Номера строк"
          • Как отображать линии отступа
            Из файла | Настройки | Настройки | Текстовый редактор, "Отрисовка направляющих отступов"
          • Как выбирать между пробелами и вкладками
            Из Xcode | Настройки | Редактирование текста | Отступ | «Предпочитать использование отступа», здесь выберите «Пробелы» или «Табуляции».
            В этом же диалоговом окне вы также можете настроить «Ширина табуляции» и «Ширина отступа»
          • Как визуально отобразить пробелы
            Из редактора, невидимые
          • Как переформатировать существующий код
            Из редактора | Структура, "Повторный отступ" (Ctrl+I)
          • Другие полезные настройки
            • Как отображать номера строк
              Из Xcode | Настройки | Редактирование текста | Дисплей, "Номера строк"
            • Как отображать линии отступов
              Для этого нет постоянной настройки, но при наведении указателя мыши на структуру и нажатии Command отображается руководство по отступам
            • Как выбирать между пробелами и вкладками
              Из файла | Настройки. | Редактор | стиль кода | Котлин | установите или удалите «Использовать символ табуляции»
              В этом же диалоговом окне вы также можете настроить «Размер табуляции» и «Отступ»
            • Как визуально отображать пробелы
              Необходимо открыть файл с исходным кодом, прежде чем найти следующий параметр
              From View | Активный редактор | Показать пробелы
            • Как переформатировать существующий код
              From Code | Переформатировать код (Ctrl+Alt+L)
            • Другие полезные настройки
              • Как отображать номера строк
                Необходимо открыть файл с исходным кодом, прежде чем найти следующий параметр
                From View | Активный редактор | Показать номера строк
              • Как отображать линии отступа
                Чтобы найти следующую настройку, необходимо открыть файл с исходным кодом
                From View | Активный редактор | Показать направляющие отступов

              Подпишитесь, чтобы узнать больше.

              URLSession async в iOS 13 и 14

              Swift 5.5 изначально представил async/await для iOS 15. Очень приятная новость: Xcode 13.2 расширил поддержку async/await до предыдущих версий iOS 13 и 14. Это расширение async/await не включает поддержку библиотеки. Вы можете найти объяснение в нескольких блогах

              GitHub: как зафиксировать

              Вот команды, которые нужно зафиксировать и отправить на удаленный сервер в GitHub: git add . git commit -m "Комментарий к фиксации" git push origin master Если после фиксации вы также хотите создать тег: git tag "MyTagName" git push origin "MyTagName"

              Фоновые загрузки SwiftUI

              Введение Мне нужно было реализовать фоновые загрузки в приложении SwiftUI. Поискав в Интернете, я нашел только старую документацию (часть официальной документации Apple). Из-за этого я разработал небольшое приложение POC в SwiftUI, которое реализует фоновые загрузки. В этом сообщении блога я опишу

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

              Решение

              Папка с образцом кода: Chapter 05\TabsToSpaces

              Создайте функцию для преобразования табуляции в пробелы определенным образом:

              Обсуждение

              Хитрость замены табуляции заключается в том, чтобы вставить нужное количество пробелов, чтобы сохранить исходное выравнивание текста. Символы табуляции обычно сдвигают следующий символ в позицию, которая точно кратна интервалу табуляции. В Visual Studio эта константа интервала часто равна 4, но во многих текстовых редакторах и даже в элементе управления TextBox Windows Forms стандартный интервал табуляции равен 8. Пример функции принимает аргумент для установки табуляции. константа интервала для любого значения.

              Эта функция использует StringBuilder для перестроения исходной строки, заменяя табуляции достаточным количеством пробелов для сохранения выравнивания. Свойство строки Chars упрощает доступ и обработку каждого отдельного символа строки, а функция Mod() упрощает математические проверки, необходимые для определения количества символов. пробелы для вставки.

              В этом коде показано использование функции TabsToSpaces():

              Первая строка создает строку, состоящую из слов, разделенных несколькими символами табуляции. Символы тильды (~) позволяют визуально увидеть, куда переместятся вкладки, а метод Replace() заменяет каждую тильду на вкладку.

              Второй оператор вызывает новую функцию и помещает возвращаемую строку в пробелы. Эта строка не содержит символов табуляции, но содержит много пробелов между словами.

              Строка periods обеспечивает более четкое визуальное представление пробелов. В этом случае метод Replace() заменяет каждый пробел точкой.

              На рис. 5-34 показаны эти три строки, отображаемые в форме, содержащей три элемента управления TextBox. Установка для свойства Font значения Courier New, шрифта фиксированной ширины, более четко показывает выравнивание символов в строках. Константа интервала табуляции в этих текстовых полях равна 8. Это значение передается функции TabsToSpaces(), правильно заменяя табуляцию и сохраняя исходное выравнивание.

              Читайте также: