VScode 더 잘 써보기 (3) VScode 꾸미기

dahee park·2023년 1월 1일

지금까지 VScode에서 기본으로 제공하는 폰트와 테마를 그대로 사용하고 있었는데 이번 기회에 폰트와 테마도 바꿔보았다.

폰트 변경

일단 폰트 크기를 변경했다. 12px에서 14px 사이가 적당할 것 같아서 세 개 다 적용해보고 13px로 변경했다. 기본 폰트 크기는 살짝 작은 느낌이 있었는데 13px이 크지도 작지도 않고 딱 적당했다.
폰트는 Fira Code로 변경했다. https://github.com/tonsky/FiraCode 로 들어가서 README에 Download & Install을 누르고 다운 받은 서체를 설치해서 VScode에 적용해주었다.
그리고 https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets 에 나와있듯이 어떤 문자는 다른 변형된 스타일도 제공해주기 때문에 setting.json에서 특정 문자는 다른 변형 문자로 바꿔주었다.

{
	"editor.fontLigatures": "'cv01', 'cv02', 'cv11', 'ss05', 'ss03', 'cv30', 'ss02'"
}

테마 변경

테마는 theme으로 검색해서 여러가지 보다가 Slack theme으로 결정했다. 그 중에서도 Aubergine Classic을 선택했다. 배경색이 어두운 보라색으로 차분하면서 코드 색깔도 알록달록하고 눈에 잘 띄어서 마음에 들었다.
(https://marketplace.visualstudio.com/items?itemName=felipe-mendes.slack-theme)

아래는 Slack theme overview 탭에 나와있는 Aubergine Classic 버전의 예시 이미지이다.

테마 일부 커스텀

선택한 테마에서 일부 색깔은 좀 더 잘 구분되고 눈이 편하도록 커스텀을 했다.
자세한 방법은 VScode 공식문서 중 https://code.visualstudio.com/docs/getstarted/themes#_customizing-a-color-theme 에서 Customizing a Color Theme에 자세히 적혀 있다. 커스텀하다보면 VScode의 각 구성요소의 이름에 대해 알아야 편한데 VScode 공식문서 중 https://code.visualstudio.com/docs/getstarted/userinterface 에 잘 정리되어 있다.
editor 백그라운드 색깔이 더 진하면 좋을 것 같아서 Activity Bar와 같은 색깔로 변경하고 syntax highlighting 색깔을 일부 변경해주었다. 아래는 setting.json에 적용한 코드이다.

{
 "workbench.colorCustomizations": {
      "editorBracketHighlight.foreground1": "#eae87f",
      "editorBracketHighlight.foreground2": "#fbc3f7",
      "editorBracketHighlight.foreground3": "#01C5C4",
      "[Slack Theme Aubergine Dark]": {
          "editor.background": "#261C25",
          "editorLineNumber.activeForeground": "#FFEB95",
          "editorIndentGuide.background": "#3E313C",
          "editorIndentGuide.activeBackground": "#3E313C"
      }
  },
  "editor.tokenColorCustomizations": {
      "[Slack Theme Aubergine Dark]": {
          "textMateRules": [
              {
                  "scope": [
                      "punctuation.definition",
                      "punctuation.definition.tag",
                      "punctuation.definition.parameters",
                      "punctuation.definition.binding-pattern.object",
                      "punctuation.accessor",
                      "punctuation.separator",
                      "punctuation.terminator",
                      "keyword.operator.type",
                      "keyword.operator.assignment",
                      "constant.language.null",
                      "constant.language.undefined",
                      "meta.jsx.children",
                      "variable.other.readwrite",
                      "variable.other.property"
                  ],
                  "settings": {
                      "foreground": "#BFC7D5",
                      "fontStyle": ""
                  }
              },
              {
                  "scope": [
                      "punctuation.definition.comment",
                      "comment.line.double-slash"
                  ],
                  "settings": {
                      "foreground": "#697098"
                  }
              },
              {
                  "scope": [
                      "storage.type.function.arrow",
                      "keyword.operator.new",
                      "keyword.operator.ternary"
                  ],
                  "settings": {
                      "foreground": "#FF5572"
                  }
              },
              {
                  "scope": [
                      "storage.type",
                      "keyword.control.flow",
                      "string.quoted",
                      "punctuation.definition.string",
                      "meta.var.expr storage.type"
                  ],
                  "settings": {
                      "foreground": "#82AAFF"
                  }
              },
              {
                  "scope": [
                      "keyword.operator.comparison",
                      "keyword.operator.relational",
                      "keyword.operator.logical",
                      "keyword.operator.increment",
                      "keyword.operator.decrement",
                      "storage.modifier.async",
                      "storage.modifier.await",
                      "punctuation.definition.string.template",
                      "string.template",
                      "constant.numeric.css",
                      "constant.language.boolean"
                  ],
                  "settings": {
                      "foreground": "#FFEB95"
                  }
              },
              {
                  "scope": [
                      "support.class.component.tsx",
                      "support.class.component.ts"
                  ],
                  "settings": {
                      "foreground": "#FFCB6B"
                  }
              },
              {
                  "scope": [
                      "entity.name.tag",
                      "entity.name.tag.tsx",
                      "entity.name.tag.ts",
                      "entity.name.tag.css",
                      "keyword.other.unit"
                  ],
                  "settings": {
                      "foreground": "#F78C6C"
                  }
              },
              {
                  "scope": [
                      "storage.modifier.async",
                      "storage.modifier.await",
                      "keyword.control.conditional",
                      "keyword.control.default"
                  ],
                  "settings": {
                      "fontStyle": "italic"
                  }
              },
              {
                  "scope": [
                      "meta.object-literal.key",
                      "entity.other.attribute-name"
                  ],
                  "settings": {
                      "foreground": "#80CBC4"
                  }
              },
              {
                  "scope": [
                      "variable.other.object.property",
                      "support.constant.property-value.css",
                      "punctuation.definition.template-expression"
                  ],
                  "settings": {
                      "foreground": "#C3E88D"
                  }
              },
              {
                  "scope": ["entity.name.function", "entity.name.type"],
                  "settings": {
                      "foreground": "#C792EA"
                  }
              },
              {
                  "scope": ["variable.other.constant"],
                  "settings": {
                      "foreground": "#89DDFF"
                  }
              },
              {
                  "scope": ["meta.definition.function"],
                  "settings": {
                      "foreground": "#FFEB95", // CHECK
                      "fontStyle": "bold"
                  }
              },
              {
                  "scope": ["storage.modifier"],
                  "settings": {
                      "foreground": "#F78C6C",
                      "fontStyle": "italic"
                  }
              }
          ]
      }
  },
}

최종 완성 예시

0개의 댓글