개발 환경 설정 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 설치
맥의 필수 프로그램
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)를 표시하도록 하기
환경설정 > 키보드 > 키보드 (기본) 탭
- "Touch Bar 보기" 선택 상자를 "F1, F2 등의 키"로 바꾼다.
- "외장 키보드에서 F1, F2 등의 키를 표준 기능 키로 사용" 체크 상자를 설정한다.
맥북 터치바의 Modifier key + Function key(F1~F12) 불가 버그 해결
키를 누르고 있을 때 '액센트가 있는 문자' 대신 키 반복 입력 사용하기
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
- Foreground:
- 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
- Black Normal:
색상 확인은 아래 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 |