Post

내가 사용하는 vscode의 extension

목차


개요

점점 많은 양의 extension을 사용하게 되면서, 어떤 extension을 사용하고 있는지 정리해 보았다.

나는 remote development를 사용하여 ssh로 원격지 개발을 주로 하는 편으로 원격지에 설치해놓은 extension과 로컬에 설치되어 있는 extension이 조금 다르다.

주로 사용하는 언어는 C/C++, Python, Shell Script 이다.

토이 프로젝트로 간간히 사용하는 언어는 Java로 개발 관련 확장은 해당 4개만 사용하고 있고 다른 확장은 아직 세팅해본 적이 없다.

옛날에 사용하였으나 더 이상 유지/관리되지 않는 확장은 취소선 처리하였다.
해당 확장을 사용하고 싶다면 확장 marketplace에서 확장 파일(vsix)을 다운받아 직접 설치해야 한다.


공통 (local에도 remote에도 설치되어 있는 확장들)

IntelliCode

IntelliCode API Usage Examples

인텔리센스와 관련된 확장으로 추측된다. 내가 설치한 기억은 없는데 언젠가 설치되어져 있었다.

DIFF

Meld Diff

Beyond compare로 diff 내용을 확인할 때 사용한다.

Diff Tool

vscode에서 diff를 확인할 때 사용한다. 단축키 두번으로 원하는 파일을 비교할 수 있어 편하게 사용하고 있다.

UTIL

Bracket Pair Colorizer 2

vscode의 내장 기능으로 통합되었다.

settings.json 에서 아래 설정을 통해 사용할 수 있다.

1
"editor.bracketPairColorization.enabled": true,

괄호를 색상으로 구분하여 보여준다. 아주 유용한 확장이다.

Symbol Navigate Back - Go to Definition History

함수의 정의 또는 선언으로 이동하고 다시 돌아오는 기능을 제공한다.

Vim 플러그인을 사용한다면 추천

indent rainbow

탭, 스페이스, 들여쓰기 등을 색상으로 구분하여 보여준다.

현재 인덴트 레벨을 한눈에 파악할 수 있고 잘못된 들여쓰기도 체크할 수 있다.

REST Client

HTTP, HTTPS 요청을 테스트할 수 있는 확장이다. (h2는 미지원하는 듯)

아래와 같은 단순한 http를 요청할 수 있고 해당 raw를 curl로 변환할 수도 있다.

1
2
3
GET /api?user=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0

GitLens

vscode에서 git을 사용할 때 유용한 기능들을 제공한다.

깃을 주로 터미널로 사용하기 때문에 필요한 상황이 자주 발생하진 않지만

diff, conflict 해결, 파일 히스토리 확인 등 터미널 명령으로 처리하기 복잡한 부분을 해당 확장으로 진행할 수 있어

해당 확장만 있으면 깃에 대한 거의 모든 일이 가능해 나는 서드파티 깃 관리 도구의 필요성을 느끼지 못했다.

pro 라이선스가 1달에 5달러인데 쪼끔 아까운 것 같기도 하고..

New Relic CodeStream

깃허브, 깃랩 등 코드 리뷰 플랫폼과 연동하여 코드 리뷰를 할 수 있는 확장이다.

커밋 뿐만 아니라 코드 리뷰를 할 때도 편리하게 할 수 있다.

풀(머지)리퀘스트도 github, gitlab 의 사이트에 들어가지 않고 vscode 내에서 생성 및 확인이 가능하고

해당 풀(머지)리퀘스트를 승인, 거절, 머지, 코멘트 생성, 파일 히스토리 확인 등의 작업도 가능하다.

코드 마킹(노트), 피드백 등의 기능도 있어 굳이 github, gitlab 창을 띄워두고 스위칭하지 않아도 되는 장점이 있다.

Error Lens

경고 또는 에러를 에디터에 직관적으로 표시해주는 확장이다.

못보고 넘어갈 수 있는 WARNING, ERROR를 놓치지 않게 해주어 상당히 유용하게 사용하고 있다.

Docker

컨테이너 생성, 관리 등 docker를 사용할 때 유용한 기능들을 제공한다.

Trigger Task on Save

파일 저장 시 특정 작업을 실행할 수 있다.

C,CPP 파일 저장 시 clang-analyzer 등을 돌리는 등 저장 시 특정 코드 정적 분석을 실행하게 만들 수 있다.

open-file-command

특정한 파일을 키 단축키로 바로 여는 기능을 제공한다.

todo list나 특정 파일을 자주 열어야 할 때 유용하다.

Todo Tree

Todo Tree 확장을 사용하면 주석으로 TODO, FIXME 등을 하이라이팅 해 주고,
해당 단어 존재할 때 이를 Tree 형태로 보기 쉽게 표현해준다.

AI Programming

Github Copilot

아래 사진은 마크다운에서 문서를 적다가 깃허브 코파일럿이 자동으로 추천해준 내용이다.

마크다운에서도 이정도의 미친 성능을 보인다.

월 10달러라는 비싼 가격이지만, 이정도 성능이면 돈내고 쓸만하다고 생각한다.

자화자찬하는 github copilot

C/C++, Java, Python, JS 등 다양한 언어를 지원한다.

현재 비공개로 GPT4 기반 Copilot chat을 사용해볼 수 있다.
Copilot chat은 현재 커서가 위치해 있는 소스를 추가로 읽어 현재 소스에 적용할만한 코드를 추천해준다.

GitHub Copilot Nightly

깃허브 코파일럿의 베타버전이다. Github Copilot 확장과 동시 사용이 불가능하다.

GitHub Copilot Chat

깃허브 코 파일럿에서 제공하는 채팅 기능이다. 어느순간부터 VSCode에서도 설치하여 사용할 수 있게 되었다.

ChatGPT의 GPT4 기반 챗봇이며, 현재 (2023/06/29) 는 비공게 신청자만 사용가능하다.

ChatGPT - Genie AI

ChatGPT API를 사용하여 vscode에서 chatgpt와 바로 대화를 할 수 있다.

개인적으로는 웹브라우저에서 ChatGPT를 결제하는 것 보다, API를 통해 종량제 형식으로 사용하는 것이 더 가성비가 좋다고 생각하여 필자는 ChatGPT를 API를 통해 사용하고 있다.

특히 vscode extension이기에 에디터 내에서 코드를 선택하여 단축키를 누르는 것 만으로 해당 코드에 대한 설명을 해주거나 유닛 테스트를 만들어주는 등, 웹 브라우저에서 사용할 때보다 사용자 경험 측면에서 훨씬 쾌적하다고 느끼고 있다.

Genie AI 확장을 커스텀하기도 하였는데, 이것은 여기에서 자세히 확인할 수 있다.

markdown (md)

Markdown All in One

적어놓은 마크다운을 미리보기로 확인할 수 있고, 테이블 생성, 목차 생성 등의 기능을 제공한다.

Markdown Preview Enhanced

마크다운을 미리보기로 확인할 수 있고, 마크다운에 수식, 테이블 등 다양한 작업을 도와준다.

Paste Image

마크다운에서 이미지를 붙여넣을 때 사용한다.

이미지를 클립보드로 복사한 뒤 vscode에서 ctrl + alt + v 키를 누르면

이미지를 특정한 경로에 저장하고 [image](/image/path/image.png) 형태로 저장된 경로를 가르켜 마크다운에 붙여넣는다.

깃허브 블로그 작성할 때 가장 힘든 게 이미지 스크린샷 찍고 마크다운에 붙여넣는 것일 텐데

해당 확장은 이를 매우 편리하게 해준다.

Paste Image from local pc

Remote Development를 사용할 때 해당 확장을 사용해야 한다.

Remote Development 내에서 Paste Image 확장을 사용하면 원격지의 클립보드를 참조하기 때문에

로컬 데스크탑에서 아무리 스크린샷을 찍어봐야 붙여넣기가 정상적으로 이루어지지 않는다.

해당 확장은 Paste Image 확장의 애드온으로써 Paste Image 확장이 로컬의 클립보드를 참조하도록 변경해준다.

그 외 기타

Trailing Spaces

소스 끝의 공백, 탭을 저장 시 자동으로 제거해주는 확장이다.

Color Highlight

헥스컬러 등의 색상을 표시해주는 확장이다. 테마 커스텀할 때 상당히 편리하다.


LOCAL

UTIL

Vim

vscode에서 vim을 사용할 수 있게 해주는 extension

상당히 괜찮으며 .vimrc를 만들어 제한적인 vim script 명령 사용이 가능하다.

Settings Sync

vscode extension 검색 후 다운로드 받을 수 없다.

확장 및 설정을 동기화해주는 기능이 vscode에 내장되었다.


확장을 동기화해주는 extension

사용하는 확장이 많아질수록 다른 컴퓨터에서도 확장을 동기화하고 관리하기 귀찮아지는데 이 확장을 사용하면 vscode의 설정을 동기화할 수 있다.

동작 방식은 github gist를 사용하는데 gist에 vscode의 설정을 업로드하고 다른 컴퓨터에서는 gist에서 설정을 다운로드 받아 사용한다.

vscode의 settings.json, keybindings.json, snippets, extensions 등을 동기화할 수 있다.

한가지 귀찮은 건 지원이 종료된 확장 등이 함께 있을 경우 다운로드할 때 에러가 발생한다는 점이다.

필자는 중요한 파일이나 .zshrc 등의 중요 설정 파일은 스니펫의 주석으로 설정을 백업하여 vscode에서 setting sync으로 동기화하면 해당 설정까지 같이 가져올 수 있도록 하였다.

상당히 편리한 확장이다.

https://github.com/shanalikhan/code-settings-sync/releases

위 링크 또는 여기 (setting-sync-3.4.3.vsix) 에서 vsix 를 다운받아
vscode 명령팔레트 > Install from VSIX > 다운받은 vsix 파일 선택
하여 설치하면 된다.

Github API의 변경으로 더 이상 동작하지 않는다.

Sync Settings

Cron Tasks 확장에 종속적이다.

Settings Sync의 대체제로 Github Repository에 자신의 설정을 백업, 불러오기 할 수 있다.

>sync settings Open the repository settings 명령어를 통해 yml 파일을 수정, 자신의 리포지토리 주소를 기입할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
profile: main
# repository to sync the settings with, required
repository:
  # repository's type, required (dummy: no sync)
  type: git
  url: git@github.com:user/settings_vscode.git
  branch: main
  messages:
    # commit message used when initializing a new profile, optional (set to `profile(): init -- ` by default)
    init: 'profile(): init -- '
    # commit message used when updating a profile, optional (set to `profile(): update -- ` by default)
    update: 'profile(): update -- '

Remote Development

원격지에서 개발을 할 수 있게 해주는 확장

wsl, ssh, docker (container) 등 원격지에서 개발을 할 수 있게 해준다.

아마 이거 없었으면 vscode를 사용하지 않았을 것 같다.

Bookmarks

파일의 특정 라인을 마킹하고 이동할 수 있게 해주는 확장

소스 분석할 때, 라인이 긴 파일을 볼 때 자주 사용한다.

Korean Language Pack for Visual Studio Code

한국어로 vscode를 사용할 수 있게 해주는 확장

영어 잘쓰는 사람이나 stack overflow에 검색하였을 때 메뉴 설명이 영어로 나오는 것 때문에 해당 확장을 사용하지 않는 개발자도 많더라.

Discord Presence

디스코드의 게임 중 활동을 vscode로 표시해주는 확장

워크스페이스 이름, 파일 이름, 파일 확장자를 통한 아이콘까지… 다양하게 출력해준다.

따로 설정하여 워크스페이스 이름과 파일 이름은 보여지지 않게 설정하였다.

multi-command

vscode의 여러개의 명령을 한번에 실행할 수 있게 그룹 단위로 묶어주는 확장.

macros multi-command 대신 해당 확장 쓰는 사람도 봤다.

THEME

One Dark Pro

내가 사용하는 vscode의 테마

나는 이 테마가 제일 깔끔하고 좋더라.

Github Theme

2023/02/13 - One Dark Pro 테마가 살짝 질려 해당 테마(Github Dark Default)로 변경해 보았다.

적절히 커스텀 했더니 괜찮아 보여 해당 테마도 사용해보고 있다.

테마 커스텀 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"editor.tokenColorCustomizations": {
    // "comments": "#22AA22",
    "[One Dark Pro *]": {
        "comments": "#22AA22",
    },
    // https://colorate.azurewebsites.net/ko/Color/
    "[GitHub Dark *]": {
        "comments": { "fontStyle": "italic" },
        "textMateRules": [ // tokenColors  ffa657
            {
                "scope": [ "entity.name.type.c", "entity.name.type.cpp" ],
                // "settings": { "foreground": "#FF7B72" },
                "settings": { "foreground": "#FF6B89" },
            },
            {
                "scope": [ "entity.name.type.class" ],
                "settings": { "foreground": "#FFA4CC" }
            },
            {
                "scope": [ "variable.other" ],
                "settings": { "foreground": "#B6A36E" }
                // "settings": { "foreground": "#FFC796" }
            },
            {
                "scope": [ "variable.other.readwrite" ],
                // "settings": { "foreground": "#B6A36E" }
                "settings": { "foreground": "#FFC796" }
            },
            {
                "scope": [ "variable.other.local.c", "variable.other.local.cpp" ],
                "settings": { "foreground": "#FFC796" }
            },
            {
                "scope": [ "variable.other.global.c", "variable.other.global.cpp" ],
                "settings": { "foreground": "#F6E542" }
            },
            {
                "scope": [ "variable.other.property.c*", "variable.other.property.cpp" ],
                // "settings": { "foreground": "#FFA4CC" }
                "settings": { "foreground": "#FBBEB5" }
            },
            {
                "scope": [ "entity.name.function.preprocessor.c", "entity.name.function.preprocessor.cpp" ],
                "settings": { "foreground": "#BC7DFF" }
            },
            {
                "scope": [ "markup.underline.link" ],
                "settings": { "foreground": "#D55FDE", "fontStyle": "underline" }
            },
            {
                "scope": [ "meta.function-call.generic.python" ],
                "settings": { "foreground": "#D2A8FF" }
            },
            {
                "scope": [ "variable.parameter.function.language.special.self.python", "variable.language.special.self.python" ],
                "settings": { "foreground": "#FFA6CC" }
            },
            {
                "scope": [ "meta.attribute.python" ],
                "settings": { "foreground": "#FBBEB5" }
            },
        ]
    },
},

Material Icon Theme

vscode의 아이콘 테마 많이 사용할 것으로 생각된다.


REMOTE

주로 remote에서 개발을 하기 때문에 개발 관련된 확장들은 주로 여기 설치되어 있다.

UTIL

Test Explorer UI

유닛 테스트를 관리하고 실행할 수 있게 해주는 확장

Test Adapter Converter

유닛 테스트를 관리하고 실행할 수 있게 해주는 확장

Resource Monitor

원격지가 현재 자원을 얼마나 사용하고 있는지 확인할 수 있게 해주는 확장

Current File Path

현재 파일의 경로를 vscode 아래 상태표시줄에 보여준다.

vscode의 상단에 파일 경로를 보여주는 곳이 있기 때문에 굳이 필요하지 않는 확장이라고 생각할수도 있지만 개인적으로는 유용하게 사용하고 있다.

Hex Editor

vscode에서 바이너리 파일을 hex로 열어서 보여주는 확장.

hexdump for VSCode 를 썼었으나 hex editor 확장으로 병합되었다.

Auto Log

printf, print, console.log 등 단축키 하나로 특정 변수를 printf 계열의 함수로 출력하게끔 해주는 매크로 확장

단순한 디버깅 / 변수 트래킹을 위해 printf를 찍을 때 유용하게 써먹을 수 있다.

변수를 선택하고 단축키를 누르면

print 함수로 변수를 출력해준다.

형상관리

gitlens, codestream 말고도 사용하는 확장이 있다.

SVN

vscode에서 svn 히스토리, 커밋 등을 확인할 수 있는 확장이다.

그런데 확인할 수 있는게 너무 미비하여 svn으로 복잡한 작업을 해야할 때에는 Tortoise SVN을 사용해야 한다.

GitLab Workflow

깃랩에서 이슈, 머지리퀘스트 등을 관리할 수 있는 확장이다.

Git Graph

Gitlens pro 를 결제하여 쓰지 않는다면 Git Graph를 vscode 내에서 확인할 수 없기에 이 확장을 사용했었다.

현재는 Gitlens pro를 결제하여 쓰고 있어 잘 안쓴다.

Log Viewer

파일을 새로고침하지 않아도 로그를 실시간으로 확인할 수 있는 확장이다.

syslog, nginx log, 프로그램 파일에 생성되는 로그 등을 실시간으로 확인할 수 있어 디버깅 및 로그 트래킹할 때 유용하게 사용하고 있다.

Manpages

리눅스의 Manpage를 vscode에서 확인할 수 있는 확장이다.

사실 이 확장은 C의 기본 함수 (printf, glob, strtok, system, access) 등을 확인하기 위해 사용하고 있다.

C/C++ (c/cpp)

C/C++

C/C++ 개발을 하기 위해서는 필요한 확장이다. 현재는 C/C++을 주로 사용하고 있기 때문에 설치하여 사용하고 있다.

c_cpp_properties.json 파일을 통해 인텔리센스 및 코드를 분석할 경로를 지정할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/**",
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

C/C++ Extension Pack

C/C++ 개발을 하기 위한 다양한 확장들을 모아둔 확장이다.

CMake, IntelliCode, Doxygen Documentation Generator, C++ Theme 등의 확장을 포함하고 있다.

Doxygen Documentation Generator

C/C++의 doxygen 주석을 자동으로 생성해주는 확장

C/C++ Advanced Lint

C/C++에서 정적분석 도구를 통해 코드를 분석하여 문제가 있는 부분을 알려주는 확장

cppcheck, clang을 설정하여 사용하고 있다.

C++ TestMate

원격지 작업 영역에 유닛 테스트 경로를 설정하고 테스트를 실행할 수 있게 해주는 확장

googletest 와 연동하여 함께 사용했다.

아래의 형식으로 설정해 사용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
	// "testMate.cpp.log.logSentry": "disable_3",
	"testMate.cpp.test.advancedExecutables": [
		{
			"cwd": "${absDirpath}",
			"pattern": "*{test,tests}_project_*/{build,Build,BUILD}/*{test,Test,TEST}*",
			"executionWrapper": {
				"path": "/bin/bash",
				"args": [
					"-c",
					"\"${cmd}\" ${argsStr} 2>&1"
				]
			},
			"runTask": {
				"before": [
                    // tasks.json
					"build unit_test"
				],
			}
		},
    ]
}

CMake Language Support

CMake의 하이라이팅을 도와주는 확장이다.

Python (py)

Python

파이썬 언어를 지원하는 확장이다.

Python Extension Pack

isort, Pylance, Jupyter, Django 등의 확장이 포함되어 있다.

Python Indent

파이썬의 인덴트를 자동으로 맞춰주는 확장이다.

autoDocstring - Python Docstring Generator

파이썬의 docstring을 자동으로 생성해주는 확장이다.

Shell Svript

shell-format

쉘 스크립트의 인덴트를 자동으로 맞춰주는 확장이다.

YACC

Yash

YACC 문법을 지원하는 확장이다.

Java

Extension Pack for Java

Java 개발을 위한 다양한 확장들을 모아둔 확장이다.

Java 인텔리센스, Maven Project 확장을 포함하고 있다.

Gradle for Java

Gradle 프로젝트를 지원하는 확장이다.

Spring Initializr Java Support

Spring과 관련된 프로젝트 초기 설정을 도와주는 확장이다.

Lombok Annotations Support for VS Code

Lombok을 지원하는 확장이다. (기본 Java 확장은 Lombok 구문을 지원하지 않아 @Getter @Setter 등의 어노테이션을 사용해도 인식하지 못한다.)

이 확장 조금 까다롭다. 내가 설정을 잘못 한건지 아니면 확장 내 버그가 있는건지…

가끔씩 Lombok 관련 어노테이션을 인식하지 못하는 경우가 있다.


기타

괜찮아 보이는 확장

Code Spell Checker

Output Colorizer

Power Mode

심심할 때 기분전환용으로 사용하는 확장, 터미널 커서는 지원 안하는 게 조금 아쉽긴 하다.

vim 에서 power mode 사용하면 확실히 타건감이 더 좋아지는 듯한 느낌이다.
해당 확장은 리소스만 잡아먹는 단순한 재미용 확장이니 설치할 때 참고하도록 하자.

1
2
3
4
"powermode.enabled": true,
"powermode.shake.enabled": false,       // 흔들림 제거
"powermode.combo.location": "default",  // 콤보 표시 위치
"powermode.presets": "particles",      //  커서 이펙트 종류

현재는 안쓰는 확장

SSH FS

간단히 ssh에 접속하여 파일을 열고 수정할 수 있게 해주는 확장이다.

Sync-Rsync

rsync로 파일을 동기화해주는 확장이다.

SFTP

sftp로 파일을 동기화해주는 확장이다.

This post is licensed under CC BY 4.0 by the author.