Настройка параметров VS Code после установки
Alexey S edited this page 2026-04-30 00:11:43 +03:00

Настройка параметров VS Code после установки

1. Итоговый конфиг VS Code (~/.config/Code/User/settings.json)

{
    // --- ПРОБЛЕМА С КЛАВИАТУРОЙ ---
    // например, не работает обратный слеш на цифровой клавиатуре в xrdp
    "keyboard.dispatch": "keyCode", 

    // --- НАВИГАЦИЯ (ОТКЛЮЧЕНО) ---
    "workbench.editor.enablePreview": false,                    // Открытие файла только по дабл-клику
    "workbench.editor.enablePreviewFromQuickOpen": false,       // Выключает превью при поиске (Ctrl+P)
    "list.openMode": "doubleClick",                             // Жестко задает дабл-клик для проводника
    "explorer.compactFolders": false,                           // Запрещает сворачивать пустые папки в одну строку
    "window.restoreWindows": "none",                            // Запрещает открывать последний проект или папку
    "files.associations": "jsonc",                              // Разрешить комментарии в JSON
    "explorer.autoReveal": false,                               // Запретить автоматическую синхронизацию открытого файла с его расположением в проводнике
    "debug.console.collapseIdenticalLines": false,              // Отключить сворачивание одинаковых строк в консоле отладки
                                                                // КАКОЙ ДОЛБАЁБ ВЫДУМЫВАЕТ ВСЮ ЭТУ ХУЙНЮ???
    "explorer.fileNesting.enabled": true,                       // Еще одна фигня, которую приходится настраивать!
    "explorer.fileNesting.expand": false,                       // Отвечает за группировку "связанных" файлов, как в Visual Studio
    "workbench.editor.openPositioning": "last",                 // Открывать закладки файла в конце

    // --- ШПИОНАЖ И ТЕЛЕМЕТРИЯ (ВЫРЕЗАНО) ---
    "telemetry.telemetryLevel": "off",                          // Полный запрет на отправку данных в MS
    "datLoss.telemetryLevel": "off",
    "workbench.enableExperiments": false,                       // Запрет на скрытые тесты новых фич на тебе
    "workbench.settings.enableNaturalLanguageSearch": false,    // Поиск по настройкам без серверов MS

    // --- ГИГИЕНА ПРОЕКТА (СКРЫВАЕМ МУСОР) ---
    "files.exclude": {
        "**/bin": true,                                         // Скрыть скомпилированный мусор
        "**/obj": true,
        "**/TemplateEngineHost": true,                          // Скрыть артефакты Visual Studio
        "**/.git": true                                         // (Опционально) скрыть папку самого гита
    },
    "search.exclude": {
        "**/bin": true,                                         // Не искать по мусорным файлам
        "**/obj": true
    },

    // --- GIT И АВТОМАТИЗАЦИЯ ---
    "git.enabled": true,
    "git.openRepositoryInParentFolders": "always",              // Видеть репозиторий, даже если открыта вложенная папка
    "security.workspace.trust.enabled": false                   // Убивает вопрос про "Доверяете ли вы авторам"
    
}

2. Горячие клавиши (~/.config/Code/User/keybindings.json)

Удобное сворачивание кода на цифровой блок:

  • editor.foldAll - Свернуть всё (Fold All) - Shift + NumPad -
  • editor.unfoldAll - Развернуть всё (Unfold All) - Shift + NumPad +
  • editor.fold - Свернуть текущий блок - Ctrl - NumPad -
  • editor.unfold - Развернуть текущий блок - Ctrl - NumPad

Управление закладками,

  • bookmarks.toggle - Alt+F2 - установить/снять закладку. В Linux XFCE комбинация Alt+F2 используется, поэтому идем в Настройки -> Клавиатура и удаляем ее там.
[
	// Отключить "Переход вперед
    {
        "key": "ctrl+alt+l",
        "command": "-bookmarks.jumpToNext",
        "when": "editorTextFocus"
    },
	// Включить F2
    {
        "key": "f2",
        "command": "bookmarks.jumpToNext",
        "when": "editorTextFocus"
    },
	// Отключить "Переход назад"
    {
        "key": "ctrl+alt+j",
        "command": "-bookmarks.jumpToPrevious",
        "when": "editorTextFocus"
    },
	// Включить Shift + F2
    {
        "key": "shift+f2",
        "command": "bookmarks.jumpToPrevious",
        "when": "editorTextFocus"
    },
    // Показать в панели проводника, очень полезная!
    {
        "key": "f4",
        "command": "workbench.files.action.showActiveFileInExplorer",
        "when": "editorTextFocus"
    }
]

3. Настройки Git

Добавление имени пользователя и адреса электронной почты текущего пользователя:


git config --global user.name "user_name"
git config --global user.email "mail@example.com"

Для флага --global данные пишутся в файл ~/.gitconfig

[user]
    name = user_name
    email = mail@example.com

4. Сниппеты

Настройки сниппетов C# лежат тут ~/.config/Code/User/snippets/csharp.json

Свойство get/set + summary

{
    "Свойство get/set + summary": {
		"prefix": "pr",
		"body": [
			"/// <summary>",
			"/// ${3:Описание ...}",
			"/// </summary>",
			"public ${1|string,Guid,bool,int,uint,long,ulong,decimal,DateTimeOffset,TimeSpan,DateOnly,TimeOnly|} $2 { get; set; }$0"
		]
	}
}

Документировани symmary

Встроенный сниппет добавляет к summary блок value (нахера???), поэтому используем свой

{
    "Документировани symmary": {
		"prefix": "summary",
		"body": [
			"/// <summary>",
			"/// ${1:Описание ...}",
			"/// </summary>"
		]
	}
}

Полное свойство с атрибутом Column

Принимает идентификатор snake_case, устанавливает атрибут [Column("<идентификатор>")], создает имя свойства в PascalCase

{

    "Полное свойство с атрибутом Column": {
		"prefix": "pp",
		"body": [
			"/// <summary>",
			"/// ${4:Описание ...}",
			"/// </summary>",
			"[Column(\"$1\")]",
			"public ${3|string,Guid,bool,int,uint,long,ulong,decimal,DateTimeOffset,TimeSpan,DateOnly,TimeOnly|} ${1/(_|^)([a-z0-9])|(_)/${2:/upcase}/g} { get; set; }$0"upcase}/g} { get; set; }$0"
		]
	}
}

Блок try/catch

{
    "Блок try/catch": {
		"prefix": "tr",
		"body": [
			"try",
			"{",
			"\tthrow new NotImplementedException();",
			"}",
			"catch (Exception ex)",
			"{",
			"\t$0throw;",
			"}"
		]
	}
}

Блок throw new NotImplementedException()

{
	"Блок throw new NotImplementedException()": {
		"prefix": "thr",
		"body": "throw new NotImplementedException();"
	}
}