개발 환경 설정 2023: https://ahasil.tistory.com/9


티스토리 마크다운 전용 CSS 적용 완료


OS 공통

글꼴

OS 구분 없이 설치할 글꼴 목록

나눔바른고딕

https://hangeul.naver.com/2017/nanum

D2Coding

https://github.com/naver/d2codingfont/releases


macOS/Ubuntu 공통

macOS/Ubuntu Git 설정

~/.gitconfig를 설정한다.

[core]
    editor = vim
    ignorecase = false
[push]
    default = simple
[user]
    name = Your Name
    email = id@email.com
[alias]
    st = status
    ci = commit
    cinv = commit --no-verify
    ciam = commit --amend
    ciamnv = commit --amend --no-verify
    br = branch
    brd = branch -D
    chp = cherry-pick
    co = checkout
    cobr = checkout -b
    fe = fetch
    fep = fetch --prune
    fepo = fetch --prune origin
    logp = log --pretty='%C(blue)%ai  %C(brightmagenta)%<(17,trunc)%an  %C(brightblack)%h  %C(reset)%s %C(cyan)%d'
    pu = push

끔찍하게도 리눅스와 다르게, macOS에서는 Git이 기본적으로 대소문자를 구분하지 않는다. core.ignorecase = false 설정을 하지 않으면, 몇 시간을 허비할 수도 있다.

macOS/Ubuntu VIM 설정

VIM Syntax highlighting 켜기

Git commit 시 색깔이 보인다. ~/.vimrc에 아래 문장을 추가한다.

syntax on

https://superuser.com/a/472240


masOS

프로그램 (IDE 제외)

Homebrew 설치 이후 터미널에서 명령어를 입력한다.

Homebrew 설치

맥의 필수 프로그램

https://brew.sh/index_ko

iTerm2 (터미널) 설치

brew cask install iterm2

AdoptOpenJDK 설치

JDK 8과 11을 설치하고, 11을 기본으로 사용한다.

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk8 adoptopenjdk11

https://github.com/AdoptOpenJDK/homebrew-openjdk

~/.bash_profile에 다음 줄을 추가한다.

export JAVA_HOME=$(/usr/libexec/java_home -v 11)

Postman 설치

brew cask install postman

GIMP 설치

brew cask install gimp

macOS 중요한 설정

(10.15 Catalina~) Bash 사용하기

Zsh이 기본이지만, 대신 Bash를 사용한다.

chsh -s /bin/bash

터미널 세션마다 매번 뜨는 경고 메시지를 없애기 위해, ~/.bash_profile에 아래를 추가한다.

export BASH_SILENCE_DEPRECATION_WARNING=1

우측 Command를 한/영키로 바꾸기

맥북 터치바의 modifier key + function key(F1~F12)가 작동하지 않는 문제에 대한 얘기도 잠깐 있는 포스트이다.

https://jojoldu.tistory.com/345

Karabiner Elements는 Homebrew를 통해 설치함.

brew cask install karabiner-elements

잘 설정해서 지연이 없게 할 것...

https://godoftyping.wordpress.com/2018/12/29/mac-맥에서-한영전환-딜레이delay-없애기/

Caps Lock으로 한/영 전환 하지 않도록 막기

환경설정 > 키보드 > 입력 소스 탭

"한/영키로 key ABC 전환" 체크 상자를 해제한다.

맥북 터치바가 평소에 Function key(F1~F12)를 표시하도록 하기

환경설정 > 키보드 > 키보드 (기본) 탭

  1. "Touch Bar 보기" 선택 상자를 "F1, F2 등의 키"로 바꾼다.
  2. "외장 키보드에서 F1, F2 등의 키를 표준 기능 키로 사용" 체크 상자를 설정한다.

맥북 터치바의 Modifier key + Function key(F1~F12) 불가 버그 해결

https://apple.stackexchange.com/questions/275905/can-i-use-shift-alt-and-control-modifier-keys-together-with-the-function-keys-o/275908

키를 누르고 있을 때 '액센트가 있는 문자' 대신 키 반복 입력 사용하기

defaults write -g ApplePressAndHoldEnabled -bool false

https://macnews.tistory.com/2195

위 설정 후, 키보드 설정에서 키 반복은 가장 빠르게, 반복 지연 시간(initial delay)은 한 단계만 줄이면 됨.

텍스트 편집기(TextEdit) 기본 창 크기 설정하기

환경설정 (command+,) > 윈도우 크기 section

너비 165자, 높이 60줄로 설정한다.

macOS Git 설정

Git autocompletion 설정

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

아래를 ~/.bash_profile에 추가한다.

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

macOS iTerm2 설정

Natural editing 키셋 설정

command/option + arrow/delete 등의 조합을 사용할 수 있다.

https://superuser.com/a/1157575

텍스트 선택 시 자동 복사 끄기

Prefs > General > Copy to pasteboard on selection (selection)

위 설정을 끈다.

색상 조정

Prefs > Profiles > Colors

  • Basic Colors
    • Foreground: c7c7c7
    • Background: 000000
    • Brighten bold text: true
    • Minimum Contrast: 0
  • ANSI Colors:
    • Black Normal: 484848
    • Black Bright: 6b6b6b
    • Red Normal: c03a38
    • Red Bright: ef5350
    • Green Normal: 00cc33
    • Green Bright: 4eff79
    • Yellow Normal: ca9f02
    • Yellow Bright: fdcc1c
    • Blue Normal: 2072ac
    • Blue Bright: 3d99db
    • Magenta Normal: ab51ba
    • Magenta Bright: c792ea
    • Cyan Normal: 1e9094
    • Cyan Bright: 27b9be
    • White Normal: c7c7c7
    • White Bright: ffffff

색상 확인은 아래 Bash 스크립트로 한다.

#!/bin/bash
#
#   This file echoes a bunch of color codes to the
#   terminal to demonstrate what's available.  Each
#   line is the color code of one forground color,
#   out of 17 (default + 16 escapes), followed by a
#   test use of that color on all nine background
#   colors (default + 8 escapes).
#
#   Copied from http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\
     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \
           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \
           '  36m' '1;36m' '  37m' '1;37m';
  do FG=${FGs// /}
  echo -en " $FGs \033[$FG  $T  "
  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
    do echo -en "$EINS \033[$FG\033[$BG  $T  \033[0m";
  done
  echo;
done
echo

macOS 팁

글꼴 렌더링을 두껍게 만들기

레티나가 아닌 외부 모니터에서 글자를 더 잘 보이게 함. 재시작 필요!

https://qldhqldh.tistory.com/m/entry/맥-외부-모니터-가독성-증가

설정

defaults -currentHost write -g AppleFontSmoothing -int 2

해제

defaults -currentHost delete -g AppleFontSmoothing

(10.15 Catalina~) Root 디렉터리에 디렉터리 추가하기

https://apple.stackexchange.com/a/372500

Mission Control(control+up)에서 Spaces 재정렬 방지하기

시스템 환경설정 > Mission Control

"Spaces를 최근 사용 내역에 따라 자동으로 재정렬" 체크 상자를 해제한다.

macOS 외부 마우스 쓰기

트랙패드와 애플 매직 마우스 대신 외부 마우스를 쓰려는 노력이다.

LinearMouse 설치

macOS의 마우스 설정은 매우 불편하고 끔찍하다. 마우스 smoothing과 scroll wheel smoothing을 없애려면 외부 프로그램 설치가 유일한 희망이다. (온라인에 있는 defaults 설정들은 죄다 가속도와 관계없는 그냥 속도 변경에 불과한 듯...)

https://github.com/lujjjh/LinearMouse

mac-mouse-fix 설치

마우스 측면 버튼(후방, 전방)을 왼쪽 space나 오른쪽 space로 전환하는 기능으로 바꿔준다. 나머지 휠 버튼 클릭을 통한 Mission Control 기능과 smooth scrolling, invert scroll direction 기능은 쓰지 않는다.

https://github.com/noah-nuebling/mac-mouse-fix

macOS 단축키 변경

macOS 설정 > 키보드 > 단축키

Hierarchy Action Default My binding
Mission Control Mission Control control+up command+backtick
Mission Control 알림 센터 보기 없음 shift+command+backtick
키보드 다음 윈도우로 초점 이동 command+backtick command+backtick (사용 안 함)

IntelliJ IDEA Community

IntelliJ 설치 (OS 공통)

JetBrains Toolbox를 이용해 설치한다.

https://www.jetbrains.com/toolbox-app/

IntelliJ 주의할 점

인코딩 (UTF-8) 설정은 프로젝트별로 모두 필요하다.

IntelliJ preferences

편집기 글꼴

"Night Owl Theme" 플러그인을 쓰면 무시된다.

Editor > Font

  • Font: D2Coding
  • Size: 16.0
  • Line spacing: 1.21

파일 끝에 줄바꿈 문자 넣기

Editor > General > Other (section)

"Ensure line feed at file end on Save" 체크 상자를 설정한다.

줄바꿈 문자 화면에 표시하기

Editor > Genereal > Appearance

"Show whitespaces" 체크 상자를 설정한다. "Inner"를 제외하고, 하위에 있는 "Leading"과 "Trailing" 체크 상자를 설정한다.

IntelliJ indent guide 보기

Editor > Genereal > Appearance

"Show indent guides" 체크 상자를 설정한다.

한 줄 메서드가 접히지 않게 하기

Editor > Genereal > Code Folding > Java (section)

"One-line methods" 체크 상자를 해제한다.

IntelliJ editor tab 위쪽 대신 오른쪽에 놓기

Editor > General > Editor Tabs > Apprearance (section)

"Tab placement" 선택 상자를 "Right"로 지정한다.

Editor > General > Editor Tabs > Closing Policy (section)

덤으로 탭 개수 제한도 풀면 좋다. "Tab limit"을 20으로 조정한다.

IntelliJ editor tab 글자 키우기

Editor > General > Editor Tabs > Apprearance (section)

"User small font for labels" 체크 상자를 해제한다.

Smooth scrolling 끄기

Appearance & Behavior > Appearance > UI Options

"Smoothing scrolling" 체크 상자를 해제한다.

IntelliJ 단축키 설정

Keymap

VIM style (HJKL)이 어느 정도 가미되었다. 그리고 IntelliJ로 VCS를 조작하지 않고, 터미널에서 Git을 조작하기 때문에, 관련 단축키는 무시했다.

macOS

macOS 기본 단축키와 충돌하면 답이 없는 경우가 있으므로 꼭 확인해야 한다.
https://support.apple.com/ko-kr/HT201236

  • "Run", "Debug"는 자주 쓰는 VIM 단축키와 충돌하므로 바꾸었다.
Menu hierarchy Action Default My binding
Editor Actions Down down down / control+J
Editor Actions Extend Selection option+up option+K
Editor Actions Shrink Selection option+down option+J
Editor Actions Scroll to Top None command+up
Editor Actions Scroll to Bottom None command+down
Editor Actions Up up up / control+K
Main menu > Edit > Find Replace... command+R option+command+F
Main menu > Edit > Find Find in Path... shift+command+F control+option+F
Main menu > Edit > Find Replace in Path... shift+command+R control+option+command+F
Main menu > Edit > Find Find Usages option+F7 command+U
Main menu > Code Reformat Code option+command+L shift+command+F
Main menu > Code Show Reformat File Dialog option+shift+command+L control+shift+command+F
Main menu > Navigate Back/Forward option+command+left/right control+option+H/L (Remove mouse clicks)
Main menu > Navigate Super Method command+U control+command+U
Main menu > Navigate Test shift+command+T control+T
Main menu > Navigate Type Hierarchy control+H command+T command+T
Main menu > Navigate Method Hierarchy shift+command+H command+T command+F
Main menu > Navigate Call Hierarchy control+option+H command+T command+C
Main menu > Refactor Refactor This... control+T control+command+R
Main menu > Refactor Rename... shift+F6 shift+command+R
Main menu > Run Run control+R control+X
Main menu > Run Run... control+option+R control+option+X
Main menu > Run Debug control+D control+G
Main menu > Run Debug... control+option+D control+option+G
Main menu > Code Move Line Up/Down option+shift+up/down option+shift+K/J
Main menu > Navigate Previous/Next Method control+up/down control+option+K/J
Main menu > Window > Editor Tabs Reopen Closed Tab None shift+command+T
Main menu > Window > Editor Tabs Split Vertically None command+\
Main menu > Window > Editor Tabs Select Previous/Next Tab control+left/right control+H/L
Main menu > Window > Editor Tabs Select Previous/Next Splitter option+(/shift)+right option+shift+H/L

Ubuntu/Windows

  • macOS의 control은 최대한 ctrl로, command는 최대한 alt로 대응시켰다.
  • macOS에서 바꾸지 않았던 기능은 이름 앞에 asterisk(*)를 붙였다.
  • "Find next/previous"는 macOS IntelliJ 그리고 Ubuntu/Windows Chrome과 동일하게 바꾸었다.
  • "Super Method"는 자주 쓰는 VIM 단축키와 충돌하므로 바꾸었다.
  • Ubuntu에서 입력기로 fcitx를 쓸 경우, ctrl+alt+H가 충돌할 수 있다. 이때는 영어 자판의 입력 설정에서 "Spell Hint" 단축키를 해제해야 한다.
  • "Replace in Path..."는 "Select Previous/Next Splitter"와 헷갈릴 수 있어서 아예 바인딩을 뺐다.
  • "Back"과 "Forward"는 옮겨오기 힘드므로, 원래 key binding을 쓴다.
Menu hierarchy Action Default My binding
Editor Actions Down down down / alt+J
Editor Actions Extend Selection ctrl+W ctrl+K
Editor Actions Shrink Selection ctrl+shift+W ctrl+J
Editor Actions Up up up / alt+K
Main menu > Edit > Find * Find next F3 ctrl+G
Main menu > Edit > Find * Find previous shift+F3 ctrl+shift+G
Main menu > Edit > Find Replace... ctrl+R ctrl+H
Main menu > Edit > Find Find in Path... ctrl+shift+F ctrl+alt+F
Main menu > Edit > Find Replace in Path... ctrl+shift+R ctrl+alt+shift+F
Main menu > Edit > Find Find Usages alt+F7 alt+U
Main menu > File * Settings... ctrl+alt+S ctrl+,
Main menu > Code Reformat Code ctrl+alt+L shift+alt+F
Main menu > Navigate Back/Forward ctrl+alt+left/right ctrl+alt+H/L (Remove mouse clicks)
Main menu > Navigate Super Method ctrl+U ctrl+alt+U
Main menu > Navigate Test ctrl+shift+T ctrl+T
Main menu > Navigate Type Hierarchy ctrl+H alt+T alt+T
Main menu > Navigate Method Hierarchy ctrl+shift+H alt+T alt+F
Main menu > Navigate Call Hierarchy ctrl+alt+H alt+T alt+C
Main menu > Refactor Refactor This... ctrl+shift+alt+T ctrl+alt+R
Main menu > Refactor Rename... shift+F6 shift+alt+R
Main menu > Run Run shift+F10 alt+X
Main menu > Run Run... alt+shift+F10 ctrl+alt+X
Main menu > Run Debug shift+F9 alt+G
Main menu > Run Debug... alt+shift+F9 ctrl+alt+G
Main menu > Code Move Line Up/Down shift+alt+up/down shift+alt+K/J
Main menu > Window > Editor Tabs Reopen Closed Tab None ctrl+shift+T
Main menu > Window > Editor Tabs Split Vertically None ctrl+\
Main menu > Window > Editor Tabs Select Previous/Next Tab alt+left/right alt+H/L
Main menu > Window > Editor Tabs Select Previous/Next Splitter None ctrl+shift+L/H
Main menu > Window > Editor Tabs * Close ctrl+F4 ctrl+w

IntelliJ Plugins

  • IdeaVim

IntelliJ Theme

설치

Plugin으로 "Night Owl Theme" by xdrop을 설치해야 한다. (현재는 1.5.4 버전) "Material UI"와 "Rainbow Brackets" 플러그인이 함께 설치된다.

처음에 나오는 설정 마법사는 preset만 "Night Owl"로 설정하고 모두 그냥 넘긴다.

Material Theme 설정

Appearance & Behavior > Material Theme > Advanced Settings (section) > Compact (tab)

"Compact Statusbar" 체크 상자를 설정한다.

그리고 "Compact Menus" 체크 상자를 설정한다. 문맥 메뉴의 아이템 높이들을 줄여준다.

Appearance & Behavior > Material Theme > Advanced Settings (section) > Project View (tab)

"Custeom Sidebar Height" 체크 상자를 설정한다. 그러고 나서 26으로 숫자를 조정한다. 프로젝트 뷰나 Gradle task 목록의 아이템 높이를 줄여준다.

Appearance & Behavior > Material Theme > Advanced Settings (section) > Components (tab)

"Uppercase buttons" 체크 상자를 해제한다. Run Configuration 상자가 대문자 고정에서 벗어난다.

편집기 글꼴 재설정

Editor > Color Scheme > Color Scheme Font

  • Font: D2Coding
  • Size: 16.0
  • Line spacing: 1.21

터미널 글꼴 재설정

Editor > Color Scheme > Console Font

  • Font: D2Coding
  • Size: 15.0
  • Line spacing: 1.10

Color Scheme 조정

Java와 Kotlin 위주로 조정한다.

IntelliJ preference에서 "Editor > Color Scheme"으로 가서 "Scheme"을 "Night Owl (No Italic)"으로 맞춘 다음, "Duplicate..."를 눌러 복제한다.

Menu hierarchy Section hierarchy Changes
General Errors and Warnings > Error -fg -bg +Effects: B71C1C underwaved
General Errors and Warnings > Warning -fg -bg +Effects: EF7F17 underwaved
General Errors and Warnings > Weak Warning -fg -bg +Effects: 3F9F4F underwaved
General Text > Folded text fg: F3F349 bg: 0A415B
General Text > Whitespaces fg: 174F7F
Language Defaults Classes > Class name fg: ADDB67
Language Defaults Classes > Interface name fg: 35C37F
Language Defaults Classes > Static field fg: 7FDBCA +Italic
Language Defaults Classes > Static method +Italic
Language Defaults Identifiers > Default fg: D6DEEB -bg -Inherit
Language Defaults Identifiers > Function declaration fg: 82AAFF
Language Defaults Identifiers > Label fg: 2F4FFF -bg -Inherit
Language Defaults Identifiers > Local variable +Inherit
Language Defaults Inline hints > Current fg: 707084 bg: 3B3B3B
Language Defaults Inline hints > Parameters > Current fg: D6DEEB bg: 7E57C2
Language Defaults Inline hints > Parameters > Default fg: 1A7C7F bg: 3B3B3B
Language Defaults Inline hints > Parameters > Highlighted fg: 20999D bg: 646464
Language Defaults Inline hints > Text without background fg: 707084
Language Defaults Markup > Attribute fg: F36D75
Language Defaults String > Escape Sequence > Invalid fg: B71C1C Effects: B71C1C underwaved
Language Defaults String > Escape Sequence > Valid fg: F36D75
Console Colors ANSI Colors > Black fg: 484848
Console Colors ANSI Colors > Blue fg: 2072AC
Console Colors ANSI Colors > Bright Black fg: 6B6B6B
Console Colors ANSI Colors > Bright Blue fg: 3D99DB
Console Colors ANSI Colors > Bright Cyan fg: 27B9BE
Console Colors ANSI Colors > Bright Green fg: 4EFF79
Console Colors ANSI Colors > Bright Magenta fg: C792EA
Console Colors ANSI Colors > Bright Red fg: EF5350
Console Colors ANSI Colors > Bright White fg: FFFFFF
Console Colors ANSI Colors > Bright Yellow fg: FDCC1C
Console Colors ANSI Colors > Cyan fg: 1E9094
Console Colors ANSI Colors > Green fg: 00CC33
Console Colors ANSI Colors > Magenta fg: AB51BA
Console Colors ANSI Colors > Red fg: C03A38
Console Colors ANSI Colors > White (Gray) fg: C7C7C7
Console Colors ANSI Colors > Yellow fg: CA9F02
Console Colors Console > Standard output fg: C7C7C7
Console Colors Console > System output fg: C7C7C7
Java Annotations > Annotation attribute name fg: 20999D
Java Annotations > Annotation name fg: AB51BA
Java Class fields > Instance field +Inherit
Java Classes and Interfaces > Abstract Class +Inherit
Java Classes and Interfaces > Class +Inherit
Java Classes and Interfaces > Interface +Inherit
Java Methods > Constructor call fg: ADDB67 -Inherit
Java Methods > Method Call +Inherit
Java Methods > Static Method +Inherit
Java Parameters > Implicit anonymous class parameter -fg bg: 2F2F0F
Java Parameters > Type parameter fg: 20999D
Java String > Escape Sequence > Valid +Inherit
Java Variables > Local variable +Inherit
Java Additions Keywords: static, final +Italic -Inherit
Java Additions Primitives: null, true, false fg: C792EA -Inherit
Java/Kotlin - Extended Keyword: null +Inherit
Java/Kotlin - Extended Keyword: this, super +Inherit
JSON Property key fg: C5E478 -Inherit
JSON String +Inherit
Kotlin Annotation +Inherit
Kotlin Braces and Operators > Non-null assertion fg: FF5370
Kotlin Classes and Interfaces > Enum entry fg: F78C6C -Inherit
Kotlin Classes and Interfaces > Object fg: ADDB67 +Italic -Inherit
Kotlin Functions > Constructor call fg: ADDB67 -Inherit
Kotlin Functions > Package-level function call +Inherit
Kotlin Label +Inherit
Kotlin Named argument fg: 20999D
Kotlin Parameters > Lambda expression default parameter fg: FFFFFF +Italic
Kotlin Properties and Variables > Backing field variable fg: C792EA
Kotlin Properties and Variables > Dynamic property fg: ADDB67
Kotlin Properties and Variables > Extension property fg: 53BDEC Italic -Inherit
Kotlin Properties and Variables > Synthetic extension ... fg: 53BDEC -Italic -Inherit
Kotlin Properties and Variables > ... captured in closure -fg bg: 2F2F0F -Inherit
Kotlin Smart-casts > Smart-cast constant -fg bg: 3F001F
Kotlin Smart-casts > Smart-cast implicit receiver -fg +bg: 3F001F
Kotlin Smart-casts > Smart-cast value -fg bg: 3F001F
Kotlin Additions Keywords > data fg: C792EA -Inalic -Inherit
Kotlin Additions Keywords > sealed, override, open fg: C792EA -Inalic -Inherit
Kotlin Additions Primitives > null, Unit -fg -Inherit
Properties Invalid string escape +Inherit
Properties Property key fg: C5E478
XML Tag name fg: C5E478
XML Attribute name +Inherit
YAML Key fg: C5E478
YAML Text fg: ECC48D -bg -Inherit
Rainbow Brackets Round Brackets - Color #1 89DDF7
Rainbow Brackets Round Brackets - Color #2 B3A03F
Rainbow Brackets Round Brackets - Color #3 08916A
Rainbow Brackets Round Brackets - Color #4 DF878F
Rainbow Brackets Round Brackets - Color #5 2F9FC3

Visual Studio Code

VS Code 설치

macOS

brew cask install visual-studio-code

VS Code extensions

Common

NodeJS 관련 확장의 경우, Yarn을 통해 필요한 모듈들을 전역에 먼저 설치한다.

  • EditorConfig for VS Code (editorconfig.editorconfig)
  • GitLens — Git supercharged (eamodio.gitlens)
  • Vim (vscodevim.vim)

Language

프로그래밍 언어 또는 마크업 언어를 정적으로 분석하는 확장임. Microsoft 공식 확장은 제외함.

  • Better TOML (bungcip.better-toml)
  • ESLint (dbaeumer.vscode-eslint)
  • Kotlin (fwcd.kotlin)
  • Markdown extended (jebbs.markdown-extended)
  • Prettier - Code formatter (esbenp.prettier-vscode)
  • rust-analyzer (matklad.rust-analyzer)
  • SQL Formatter (adpyke.vscode-sql-formatter)
  • vscode-styled-components (jpoissonnier.vscode-styled-components)
  • XML (redhat.vscode-xml)

JSON

  • JSON Tools (eriklynd.json-tools)
  • Sort JSON objects (richie5um2.vscode-sort-json)

Theme

  • Material Icon Theme (pkief.material-icon-theme)
  • Night Owl (sdras.night-owl)

Utils

자잘한 편의성 기능들임.

  • Escape HTML code (raymondcamden.htmlescape-vscode-extension)
  • Escape-quotes (milovidov.escape-quotes)
  • Go to Next/Previous Member (mishkinf.goto-next-previous-member)
  • Quit Control for VSCode (artdiniz.quitcontrol-vscode)
  • URL Encode (flesler.url-encode)

VS Code settings.json

macOS 기준이므로 VIM 키 바인딩 충돌 설정은 뺐음.

{
  //// File extension settings
  "[css]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[javascriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[json]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[jsonc]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[markdown]": {
    "editor.quickSuggestions": {
      "comments": "off",
      "strings": "off",
      "other": "off"
    },
    "editor.wordWrap": "on"
  },
  "[scss]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  //// Common settings
  "breadcrumbs.enabled": true,
  "diffEditor.ignoreTrimWhitespace": false,
  "editor.bracketPairColorization.enabled": true,
  "editor.fontFamily": "D2Coding, Menlo, Monaco, 'Courier New', monospace",
  "editor.fontSize": 16,
  "editor.suggestSelection": "first",
  "editor.renderFinalNewline": true,
  "editor.renderWhitespace": "boundary",
  "editor.rulers": [100],
  "extensions.ignoreRecommendations": false,
  "html.format.unformatted": "li, p, wbr",
  "window.title": "${rootName}${separator}${activeEditorShort}",
  "workbench.colorTheme": "Night Owl (No Italics)",
  "workbench.editor.decorations.colors": true,
  "workbench.editor.showTabs": true,
  "workbench.editor.wrapTabs": true,
  "workbench.editorAssociations": {
    "*.ipynb": "jupyter-notebook"
  },
  "workbench.iconTheme": "material-icon-theme",
  "terminal.integrated.defaultProfile.osx": "bash-login",
  "terminal.integrated.fontSize": 15,
  "terminal.integrated.inheritEnv": true,
  "terminal.integrated.minimumContrastRatio": 1.2,
  "terminal.integrated.profiles.osx": {
    "bash-login": {
      "path": "bash",
      // Use login shell
      // https://github.com/Microsoft/vscode/issues/20265#issuecomment-278818467
      "args": ["-l"]
    }
  },
  //// Extension (non-language) settings
  "gitlens.codeLens.enabled": false,
  "gitlens.views.branches.branches.layout": "list",
  "redhat.telemetry.enabled": false,
  //// Extension (language) settings
  "eslint.trace.server": "messages",
  "kotlin.debugAdapter.enabled": false,
  "kotlin.languageServer.enabled": false,
  "prettier.printWidth": 100,
  "prettier.singleQuote": true,
  "prettier.trailingComma": "all",
  "typescript.updateImportsOnFileMove.enabled": "never",
  //// Theme customization
  // Original: https://github.com/sdras/night-owl-vscode-theme/blob/main/themes/Night%20Owl-color-theme-noitalic.json
  "workbench.colorCustomizations": {
    "editorBracketHighlight.foreground1": "#89DDF7",
    "editorBracketHighlight.foreground2": "#B3A03F",
    "editorBracketHighlight.foreground3": "#08916A",
    "editorBracketHighlight.foreground4": "#DF878F",
    "editorBracketHighlight.foreground5": "#2F9FC3",
    // // PPT
    // "terminal.background": "#161616",
    // "editorHoverWidget.background": "#161616",
    // "editor.background": "#161616",
    // "editorGutter.background": "#161616",
    "terminal.foreground": "#C7C7C7",
    "terminal.ansiBlack": "#484848",
    "terminal.ansiBrightBlack": "#6B6B6B",
    "terminal.ansiBlue": "#2072AC",
    "terminal.ansiBrightBlue": "#3D99DB",
    "terminal.ansiCyan": "#1E9094",
    "terminal.ansiBrightCyan": "#27B9BE",
    "terminal.ansiGreen": "#00CC33",
    "terminal.ansiBrightGreen": "#4EFF79",
    "terminal.ansiMagenta": "#AB51BA",
    "terminal.ansiBrightMagenta": "#C792EA",
    "terminal.ansiRed": "#C03A38",
    "terminal.ansiBrightRed": "#EF5350",
    "terminal.ansiWhite": "#C7C7C7",
    "terminal.ansiBrightWhite": "#FFFFFF",
    "terminal.ansiYellow": "#CA9F02",
    "terminal.ansiBrightYellow": "#FDCC1C",
  },
  "editor.tokenColorCustomizations": {
    "[Night Owl (No Italics)]": {
      "variables": "#D6DEEB",
      "textMateRules": [
        {
          "name": "Keyword Operator",
          "scope": "keyword.operator",
          "settings": {
            "foreground": "#C792EA"
          }
        },
        {
          "name": "Keyword",
          "scope": [
            "constant.language",
            "constant.language.boolean",
            "constant.language.null",
            "variable.language.this",
            "keyword.operator.new",
            "meta.method.declaration storage.type"
          ],
          "settings": {
            "foreground": "#C792EA"
          }
        },
        {
          "name": "Constant Character Escape",
          "scope": ["constant.character.escape"],
          "settings": {
            "foreground": "#F36D75"
          }
        },
        {
          "name": "Function Argument",
          "scope": ["meta.function-call"],
          "settings": {
            "foreground": "#D6DEEB"
          }
        },
        {
          "name": "Object Property",
          "scope": ["variable.other.object.property"],
          "settings": {
            "foreground": "#7FDBCA"
          }
        },
        {
          "name": "Support Function",
          "scope": ["support.function"],
          "settings": {
            "foreground": "#82AAFF",
            "fontStyle": "italic"
          }
        },
        {
          "name": "Entity Type",
          "scope": [
            "entity.name.type",
            "entity.name.type.js",
            "entity.name.type.jsx",
            "entity.name.type.ts",
            "entity.name.type.tsx",
            "entity.name.type.module",
            "entity.name.type.module.js",
            "entity.name.type.module.jsx",
            "entity.name.type.module.ts",
            "entity.name.type.module.tsx",
            "support.class",
            "support.type",
            "storage.type.generic.java",
            "meta.definition.variable.java storage.type.java",
            "meta.method.identifier.java storage.type.java"
          ],
          "settings": {
            "foreground": "#ADDB67"
          }
        },
        {
          "name": "Entity Class (Including JS/TS Interface)",
          "scope": [
            "meta.class entity.name.type.class",
            "meta.class entity.name.type.class.js",
            "meta.class entity.name.type.class.jsx",
            "meta.class entity.name.type.class.ts",
            "meta.class entity.name.type.class.tsx",
            "entity.other.inherited-class",
            "meta.interface entity.name.type.interface.js",
            "meta.interface entity.name.type.interface.jsx",
            "meta.interface entity.name.type.interface.ts",
            "meta.interface entity.name.type.interface.tsx"
          ],
          "settings": {
            "foreground": "#ADDB67"
          }
        },
        {
          "name": "Entity Interface",
          "scope": ["meta.interface entity.name.type.interface"],
          "settings": {
            "foreground": "#35C37F"
          }
        },
        {
          "name": "Entity Enum",
          "scope": ["entity.name.type.enum"],
          "settings": {
            "foreground": "#ADDB67"
          }
        },
        {
          "name": "String Template",
          "scope": [
            "meta.template.expression.js",
            "meta.template.expression.jsx",
            "meta.template.expression.ts",
            "meta.template.expression.tsx"
          ],
          "settings": {
            "foreground": "#F36D75"
          }
        },
        {
          "name": "HTML/XML Entity Tag Name",
          "scope": ["entity.name.tag"],
          "settings": {
            "foreground": "#C5E478"
          }
        },
        {
          "name": "HTML/XML Entity Attribute Name",
          "scope": ["entity.other.attribute-name"],
          "settings": {
            "foreground": "#82AAFF"
          }
        },
        {
          "name": "JavaScript/TypeScript Object Key",
          "scope": ["meta.object.member"],
          "settings": {
            "foreground": "#7FDBCA"
          }
        },
        {
          "name": "React Tag Non-Component Name",
          "scope": ["entity.name.tag.jsx", "entity.name.tag.tsx"],
          "settings": {
            "foreground": "#35C37F"
          }
        },
        {
          "name": "React Tag Component Name",
          "scope": ["support.class.component.jsx", "support.class.component.tsx"],
          "settings": {
            "foreground": "#C9E290"
          }
        },
        {
          "name": "React Tag Attribute Name",
          "scope": ["entity.other.attribute-name.jsx", "entity.other.attribute-name.tsx"],
          "settings": {
            "foreground": "#53BDEC"
          }
        },
        {
          "name": "Java/Kotlin Annotation",
          "scope": [
            "meta.declaration.annotation.java",
            "meta.declaration.annotation.java storage.type.annotation.java",
            "entity.name.type.annotation.kotlin",
            "entity.name.type.annotation-site.kotlin"
          ],
          "settings": {
            "foreground": "#AB51BA"
          }
        },
        {
          "name": "Java Package/Import Statement Target",
          "scope": [
            "meta.package.java storage.modifier.package.java",
            "meta.import.java storage.modifier.import.java"
          ],
          "settings": {
            "foreground": "#D6DEEB"
          }
        },
        {
          "name": "Java Primitive Type",
          "scope": ["storage.type.primitive.java"],
          "settings": {
            "foreground": "#C792EA"
          }
        },
        {
          "name": "JSON Property Key",
          "scope": ["support.type.property-name.json"],
          "settings": {
            "foreground": "#C5E478"
          }
        },
        {
          "name": "JSON Property Value",
          "scope": ["meta.structure.dictionary.value.json string.quoted.double"],
          "settings": {
            "foreground": "#ECC48D"
          }
        },
        {
          "name": "JSON Property Special Value",
          "scope": [
            "meta.structure.dictionary.json meta.structure.dictionary.value constant.language"
          ],
          "settings": {
            "foreground": "#C792EA"
          }
        },
        {
          "name": "Properties Property Key",
          "scope": ["keyword.other.definition.ini"],
          "settings": {
            "foreground": "#C5E478"
          }
        },
        {
          "name": "Properties Property Key-Value Separator",
          "scope": ["punctuation.separator.key-value.ini"],
          "settings": {
            "foreground": "#89DDF7"
          }
        },
        {
          "name": "YAML Entity Name Tag",
          "scope": ["entity.name.tag.yaml"],
          "settings": {
            "foreground": "#C5E478"
          }
        }
      ]
    }
  },
  "git.mergeEditor": false
}

VS Code keybindings.json

macOS 기준!

[
  //// Sidebars
  // Explorer sidebar
  {
    "key": "ctrl+alt+e",
    "command": "workbench.view.explorer"
  },
  // Search sidebar
  {
    "key": "ctrl+alt+f",
    "command": "workbench.action.findInFiles"
  },
  {
    "key": "shift+cmd+f",
    "command": "-workbench.action.findInFiles"
  },
  // Source Control sidebar
  {
    "key": "ctrl+alt+s",
    "command": "workbench.view.scm"
  },
  // Toggle sidebar
  {
    "key": "shift+cmd+0",
    "command": "workbench.action.toggleSidebarVisibility"
  },
  //// Build and run
  // Build task
  {
    "key": "ctrl+b",
    "command": "workbench.action.tasks.build"
  },
  {
    "key": "cmd+b",
    "command": "-workbench.action.toggleSidebarVisibility"
  },
  // Run task
  {
    "key": "ctrl+x",
    "command": "workbench.action.tasks.test"
  },
  //// Editor tabs and groups
  // Move between editor tabs (VIM arrow)
  {
    "key": "ctrl+h",
    "command": "workbench.action.previousEditor",
    "when": "!terminalFocus"
  },
  {
    "key": "ctrl+l",
    "command": "workbench.action.nextEditor",
    "when": "!terminalFocus"
  },
  // Move between editor groups (VIM arrow)
  {
    "key": "ctrl+shift+h",
    "command": "workbench.action.focusLeftGroup",
    "when": "!terminalFocus"
  },
  {
    "key": "ctrl+shift+l",
    "command": "workbench.action.focusRightGroup",
    "when": "!terminalFocus"
  },
  //// Navigation
  // Go back/forward
  {
    "key": "ctrl+alt+h",
    "command": "workbench.action.navigateBack",
    "when": "editorFocus"
  },
  {
    "key": "ctrl+alt+l",
    "command": "workbench.action.navigateForward",
    "when": "editorFocus"
  },
  //// Editor text
  // Auto indention
  {
    "key": "shift+cmd+f",
    "command": "editor.action.formatDocument",
    "when": "editorTextFocus && !editorReadonly"
  },
  {
    "key": "shift+cmd+f",
    "command": "-workbench.view.search",
    "when": "!searchViewletVisible"
  },
  // Expand/shrink selection
  {
    "key": "alt+k",
    "command": "editor.action.smartSelect.expand",
    "when": "editorTextFocus"
  },
  {
    "key": "alt+j",
    "command": "editor.action.smartSelect.shrink",
    "when": "editorTextFocus"
  },
  // Move line up/down (VIM arrow)
  {
    "key": "shift+alt+k",
    "command": "editor.action.moveLinesUpAction",
    "when": "editorTextFocus && !editorReadonly"
  },
  {
    "key": "shift+alt+j",
    "command": "editor.action.moveLinesDownAction",
    "when": "editorTextFocus && !editorReadonly"
  },
  // Editor suggestion (select prev/next)
  {
    "key": "ctrl+j",
    "command": "selectNextSuggestion",
    "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
  },
  {
    "key": "ctrl+j",
    "command": "-editor.action.joinLines",
    "when": "editorTextFocus && !editorReadonly"
  },
  {
    "key": "ctrl+k",
    "command": "selectPrevSuggestion",
    "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
  },
  {
    "key": "ctrl+k",
    "command": "-deleteAllRight",
    "when": "textInputFocus && !editorReadonly"
  },
  //// Code
  // Rename
  {
    "key": "shift+cmd+r",
    "command": "editor.action.rename",
    "when": "editorHasRenameProvider && editorTextFocus && !editorReadonly"
  },
  // Go to next/previous problem (JenBrains style)
  {
    "key": "f2",
    "command": "editor.action.marker.nextInFiles",
    "when": "editorFocus"
  },
  {
    "key": "f2",
    "command": "-editor.action.rename",
    "when": "editorHasRenameProvider && editorTextFocus && !editorReadonly"
  },
  {
    "key": "shift+f2",
    "command": "editor.action.marker.prevInFiles",
    "when": "editorFocus"
  },
  // Go to references(usages)
  {
    "key": "cmd+u",
    "command": "editor.action.goToReferences",
    "when": "editorHasReferenceProvider && editorTextFocus && !inReferenceSearchEditor && !isInEmbeddedEditor"
  },
  {
    "key": "cmd+u",
    "command": "-cursorUndo",
    "when": "textInputFocus"
  },
  // Quick fix (JetBrains style)
  {
    "key": "alt+enter",
    "command": "editor.action.quickFix",
    "when": "editorHasCodeActionsProvider && editorTextFocus && !editorReadonly"
  },
  //// Terminal
  // Create integrated terminal
  {
    "key": "alt+shift+`",
    "command": "workbench.action.terminal.new"
  },
  // Kill integrated terminal
  {
    "key": "ctrl+shift+`",
    "command": "workbench.action.terminal.kill"
  },
  // Move between integrated terminal tabs (VIM arrow)
  {
    "key": "ctrl+h",
    "command": "workbench.action.terminal.focusPrevious",
    "when": "terminalFocus"
  },
  {
    "key": "ctrl+l",
    "command": "workbench.action.terminal.focusNext",
    "when": "terminalFocus"
  },
  // Integrated terminal creation for Python VEnv
  {
    "key": "cmd+ctrl+shift+`",
    "command": "python.createTerminal"
  },
  //// Extension - Go to Next/Previous Member (VIM arrow)
  {
    "key": "ctrl+alt+j",
    "command": "gotoNextPreviousMember.nextMember",
    "when": "editorTextFocus"
  },
  {
    "key": "ctrl+alt+k",
    "command": "gotoNextPreviousMember.previousMember",
    "when": "editorTextFocus"
  },
  //// Others
  // Show definition
  {
    "key": "cmd+b",
    "command": "editor.action.revealDefinition",
    "when": "editorHasDefinitionProvider && editorTextFocus && !isInEmbeddedEditor"
  },
  // Show hover
  {
    "key": "f1",
    "command": "editor.action.showHover",
    "when": "editorTextFocus"
  },
  // Developers: Inspect Editor Tokens and Scopes
  {
    "key": "ctrl+shift+cmd+i",
    "command": "editor.action.inspectTMScopes"
  }
]

DBeaver Community

DBeaver 설치

JDK가 필요하다.

macOS

brew cask install dbeaver-community

DBeaver Preferences

Dark theme 설정

User Interface > Apperance

"Enable theming" 체크 상자를 설정하고, "Theme"을 "Dark Theme"로 둔다.

글꼴 설정

User Interface > Apperance > Colors and Fonts

"Basic > Text Font"를 "D2 Coding, 15"로 설정한다.

SQL format 설정

Editors > SQL Editor > Formatting

"Settings" 영역에 있는 설정들을 바꾼다.

  • "Insert spaces for tabs" 체크 상자를 설정한다.
  • "Keyword case"를 "Upper"로 지정한다. (원래는 "Default")

Text editor 추가 설정

Editors > Text Editors

  • "Show line numbers" 체크 상자를 설정한다.
  • "Show whitespace characters" 체크 상자를 설정한다. "Configure visibility"를 눌러서 뜨는 dialog는 다음처럼 설정한다.
    • Space: Leading, Trailing
    • Tab: Leading, Enclosed, Trailing
    • Line Feed: (None)
    • Transparency level: 80 -> 63

Heap status 설정

General

"Show heap status" 체크 상자를 설정한다.

DBeaver 단축키 설정

User Interface > Keys

Action Category Default My binding
Execute SQL Statement SQL Editor control+enter command+enter
Content Format SQL Editor control+shift+F shift+command+F

DBeaver Plugins

Eclipse Marketplace

Help > Install New Software...

아래 URL을 이용해서, 가장 먼저 설치해야 한다. Eclipse처럼 plugin을 자유롭게 고를 수 있게 해준다.

http://download.eclipse.org/mpc/releases/1.10.0

Marketplace에서 설치할 plugin

  • Vrapper (Vim)

NodeJS

NVM 및 NodeJS 설치

macOS

brew install nvm
mkdir ~/.nvm

이후 시키는 대로 ~/.bash_profile을 수정한 다음 source ~/.bash_profile을 해준다.

NodeJS는 LTS 버전인 12.14.0을 설치한다.

nvm install v12.14.0

Yarn 설치

npm install -g yarn

Yarn의 모듈 설치 시 binary 관련 문제 해결 (macOS)

NVM을 쓰고 있을 때 기준. ~/.bash_profile에 아래를 추가한다.

export PATH="$PATH:$HOME/.config/yarn/global/node_modules/bin"

전역 모듈 설치

VS Code 확장을 위한 모듈들

yarn global add prettier eslint typescript tslint

ESLint의 플러그인 모듈들

yarn global add eslint-plugin-react eslint-plugin-prettier eslint-plugin-react-hooks

'개발 > 개발 잡다' 카테고리의 다른 글

개발 환경 설정 (2025)  (1) 2025.01.04
개발 환경 설정 (2023 ~ 2024)  (2) 2023.03.29
개발 설정 (2018~2019)  (0) 2018.01.25

+ Recent posts