[devtool] IntelliJ 노트

Published: by Creative Commons Licence

참고 문서

테스트 환경 정보

  • IntelliJ IDEA 2021.3

개요

인텔리제이 관련 단축키와 설정 등의 간단 정리 글.

자바 개발자들 사이에선 인텔리제이 한 번 써보면 다시는 이클립스로 못돌아간다는 전설이 있다고 하더라. 뻥임

Ultimate와 Community 버전 간 차이

지원하는 언어, 프레임웍에서 차이가 많이 난다. 몇 개만 꼽자면 Community 버전은 Spring, Java EE, JavaScript, TypeScript, Node.js, PHP, SQL 등을 미지원. 사실 순수 자바 프로젝트는 그냥 커뮤니티 버전 써도 됨. (JS 같은 건 VSCODE로 한다 치고)

자세한 내용은 여기에.

톰캣 퍼블리싱 폴더는 어디일까

shell:local appdata\JetBrains\IntelliJIdeaXXXX.X\tomcat\36자리-의-랜덤-한-번호

IDE log 파일 위치

https://intellij-support.jetbrains.com/hc/en-us/articles/207241085-Locating-IDE-log-files

요런 C:\Users\fixal\AppData\Local\JetBrains\IntelliJIdea2022.3\log 경로에 있는데 정확히 어디에 있는지는 Help 메뉴의 Show Log In Explorer를 누르면 나옴.

검색으로 해결 안 되는 문제(프리징 현상이라던지)가 발생하면 지원 페이지로 가서 이 파일을 첨부해 문의하면 된다.

빌드나 런타임 에러가 발생하면

Project Structurectrl + alt + shift + s에서 Modules 항목 설정은 이렇게 돼있는지 우선 확인:

한글 깨짐 문제

일단 발견한 인코딩 관련 설정은 요렇게 있다.

#1 VM Option: file.encoding

만약 WAS라면: Run/Debug Configurations 혹은 Services의 WAS 설정으로 이동해서 VM options에 -Dfile.encoding=UTF-8 추가

아니면: Edit Custom VM Options로 이동(ctrl + shift + a 후 검색)한 뒤 -Dfile.encoding=UTF-8 추가

#2 에디터 인코딩

Settings > Editor > File Encodings로 이동한 뒤:

  • Project Encoding을 UTF-8로 변경
  • Default encoding for properties files를 UTF-8, 그 옆에 Transparent native-to-ascii conversion 체크

#3 콘솔 출력 인코딩

Settings > Editor > General > Console로 이동해서 Default Encoding을 UTF-8로 변경

런타임 중 변경된 파일 자동으로 다시 불러오기

Hot deploy, Hot swap, Hot code replace 등으로 불리는(엄밀히 따지면 셋 다 다르지만…), 런타임 중 변경된 파일을 즉시 교체하는 기능이다.

로컬 서버로 톰캣을 별도로 추가해서 사용할 때만 해당. TODO 스프링 부트같은 내장 WAS는 확인 필요

일단 별도 설정 없이도 디버그 모드라면 Update Running Applicationctrl + f10을 누르면 된다.

그런데 귀찮으니께, Run/Debug Configurationsalt + u, r에서 'On frame deactivation' 항목의 값을 'Update classes and resources'로 변경한다. 이렇게 하면 인텔리제이가 포커스를 잃을 때마다 (필요한 경우 빌드 후) 자동으로 리로드한다.

JSP나 HTML 등의 리소스 파일은 바로 확인할 수 있고 서버 실행 모드에 따른 차이가 없다. 하지만 Java 클래스의 경우 일단 빌드하는 시간이 필요하기도 하고, 앱을 디버그 모드로 실행시키지 않으면 갱신하지 않는다. (Run 모드여도 빌드는 하는 것 같은디…)

검색해보니 'File Watcher' 플러그인을 쓰는 방법도 있긴 함.

인텔리제이에서 사용할 VM options 지정하기

Find Actionctrl + shift + a에서 'Edit Custom VM Options'을 실행하면 파일이 하나 열리는데 여기에 입력하면 됨.

프로젝트별 배경 화면 다르게

원래는 테마를 프로젝트별로 설정하려고 했으나 현재(2023-07-09) 지원하지 않는다.

우선 식별용 이미지 몇 장을 적당히 마련한 뒤, Find Actionctrl + shift + a에서 Set Background Image를 실행한다. This project only 항목에 체크하고 이미지를 설정하면 끝.

File and Code Templates

TODO

작성 예시:

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ${NAME} {
    private static final Logger logger = LoggerFactory.getLogger(${NAME}.class);
}

자동 완성

Code Completion

TODO

Postfix Completion

규칙대로 입력한 뒤 'Code Completion'을 발동하면 미리 작성한 코드가 자동으로 입력된다.

TODO

File and Code Templates

Settings > Editor > File and Code Templates

Live Templates

이클립스에서 특정 키워드 후의 자동 완성과 같은 기능이다.

Settings > Editor > Live Templates으로 이동해서 그룹 선택 후 우측의 십자 모양 아이콘 클릭한 다음 요딴식으로 작성한다:

Logger logger = LoggerFactory.getLogger($className$.class);

$className$은 미리 정해져있는 값이 아니고 Edit variables를 눌러서 사용자가 별도로 지정하는 변수다.

마지막으로 applicable contexts를 지정하면 끝. (위 예시의 경우 멤버 변수 선언이기 때문에 Java - declaration으로 함)

사전 정의 변수는 두 개로 $END$$SELECTION$이다. 도움말은 여기를 보면 됨.

몇 가지 더 예를 들면:

// Template Text // 변수 -> Expression, 적용 범위
logger.info("{}", $aaa$); // $aaa$ -> completeSmart(), expression
logger.error($var$.getMessage(), $var$); // $var$ -> variableOfType("Exception"), expression
private static final Logger logger = LoggerFactory.getLogger($className$.class); // $className$ -> className(), declaration

사전 정의 변수 Predefined template variables

  • $END$: 라이브 템플릿 작동 후 커서의 위치를 지정
  • $SELECTION$: 특정 코드를 선택(드래그)한 뒤 Surround Withctrl + alt + t로 라이브 템플릿을 선택하면 지정한 위치에 선택했던 코드가 자동으로 입력됨

추천 플러그인

  • MoveTab: 단축키로 탭 이동하고 싶으면 설치. 단축키는 Move Tab Left/Right 찾아서 shift + ctrl + alt + pageup/pagedown으로 변경
  • CamelCase: 카멜, 케밥, 스네이크 등 케이스 변환 지원. 기본 단축키: shift + alt + u
  • Extra Actions: 몇 가지 기능을 추가하는 플러그인. 단축키를 기본값으로 되돌리는 버그가 있지만, 멀티 캐럿 기능 때문에 써야함.
  • Grep Console: 콘솔 로그에 색을 입히거나 필터링하는 플러그인. 인터페이스가 좀 복잡하긴 한데 쓸만함

Extra Actions

기본 인텔리제이에 없는 추가 기능을 제공하는 플러그인이다. (사실 캐럿 추가 기능 하나 때문에 쓰는 거)

  • 에디터에서 선택한 영역의 각 줄에 캐럿 추가
  • 다음 paragraph(단락, 문단)에 캐럿 추가
  • 따옴표 감싸기 토글
  • String 리터럴을 더하기 연산자로 자르기

GitHub Copilot

AI가 코드를 작성해주는 쩌는 플러그인. 단축키는:

  • 활성화/비활성화 토글: ctrl + alt + shift + o
  • 코파일럿 발동: alt + \\ 인데, 이 키가 IntelliJ 2022.3 버전의 Show Collapsed Main Menu 명령과 충돌하니 삭제해줘야 함.
  • 코파일럿 제안 선택: tab
  • 다음 제안 보기: alt + [
  • 이전 제안 보기: alt + ]
  • 제안을 단어 단위로 적용하기: ctrl + right
  • 제안을 줄 단위로 적용하기: ctrl + alt + right
  • 코파일럿 창 열기: alt + p로 변경
  • 코파일럿 채팅 창 열기: alt + shift + p로 변경

작성자 저장용 단축키 설정

  • File Open Actions > Recent Project: ctrl + alt + shift + e 최근 열었던 프로젝트 열기
  • Help > Find Action: f1 모든 명령 검색창인데 f1이 원래 도움말이었던거 지워버리고 요 키도 추가함
  • Edit > Undo: ctrl + z: 되돌리기. 다른 키는 다 지움
  • Edit > Redo: ctrl + y: 다시 되돌리기. 다른 키는 다 지움
  • Editor Actions > Delete Line: ctrl + shift + d 라인 삭제. 기존 키 매핑은 삭제
  • Editor Actions > Clone Caret Above: ctrl + alt + up 위로 멀티 캐럿 생성. 다른 키는 지움
  • Editor Actions > Clone Caret Below: ctrl + alt + down 아래로 멀티 캐럿 생성. 다른 키는 지움
  • Editor Actions > Duplicate Line or Selection: ctrl + shift + k 중복 라인 생성. 기존 다른 명령의 키 매핑은 삭제
  • Editor Tabs > Select Previous Tab: ctrl + pageup 이전 탭으로 이동. 기존 다른 명령의 키 매핑은 삭제
  • Editor Tabs > Select Next Tab: ctrl + pagedown 다음 탭으로 이동. 기존 다른 명령의 키 매핑은 삭제(캐럿을 현재 화면 내 맨 위나 아래로 이동인데 잘 안써서 삭제함)
  • Editor Tabs > Maximize Editor/Normalize Splits: ctrl + alt + shift + ' 에디터 창 최대화/원래대로 토글
  • Navigate > Back: alt + left 이전 포커스 지점으로 이동. 다른 키 매핑은 내비둠
  • Navigate > Forward: alt + right 다음 포커스 지점으로 이동. 다른 키 매핑은 내비둠
  • Database > Attach Session: alt + s로 단축키 추가. 데이터베이스 연결 선택하는 기능임
  • Active Editor > Soft-Wrap: alt + z
  • Other > Clear text: alt + x: 콘솔 지우기
  • Debugger Actions > Add to Watches: alt + w 디버그 모드에서 지켜볼 표현식 영역에 추가
  • Navigate > Goto by Reference Actions > File Structure: ctrl + \\ 추가. 기존 단축키는 Root directory 인데, 어차피 잘 안쓰니 삭제
  • Main Menu > Window > Editor Tabs > Split Right/Down: 에디터를 수평/수직으로 분할하는 기능이다. 해당 키 조합의 기본값 Zoom in/out은 지우고 alt + shift + \= alt + shift + \- 로 지정

기본 단축키

멀티 캐럿

인텔리제이에선 Add Caret 혹은 Select Next Occurrence 쯤으로 부른다.

  • alt + j: Add Selection for Next Occurrence. 드래그한 단어 기준 다음 단어에 캐럿 추가
  • alt + shift + j: Unselect Occurrence. 캐럿 추가한 거 하나씩 취소
  • ctrl + alt + shift + j: Select All Occurrences. 선택한 단어와 동일한 모든 위치에 캐럿 추가
  • alt + shift + g: Add Carets to Ends of Selected Lines. 선택한 모든 라인에 캐럿 생성

전역

  • esc: 파일 에디터로 포커스
  • alt + insert: 새로 추가. 상황에 따라 구성요소/파일/rule 등을 추가하는 메뉴를 보여줌.
  • shift, shift: Search Everywhere 모든 것(?) 열기
  • ctrl, ctrl: Run Anything 모든 것(?) run하기
  • ctrl + alt + s: Settings 인텔리제이 설정
  • ctrl + alt + shift + s: Project Structure 현재 프로젝트 전용 설정
  • ctrl + shift + ': 포커스가 있는 창 최대화(안 되는 것도 있다)
  • ctrl + shift + a: 실행 가능한 모든 명령 검색창
  • ctrl + shift + n: Go to File 파일 열기
  • ctrl + e: Recent Files 최근 파일 목록 보기
  • ctrl + shift + e: Recently Changed Files 최근 변경된 파일 목록 보기
  • ctrl + f4: 창 닫기
  • alt + home: 파일 트리 탐색으로 포커스
  • ctrl + shift + f: Find in Files 파일 내용으로 검색
  • ctrl + shift + f12: Hide All Tool Windows
  • ctrl + shift+ \\: Go to URL Mapping

북마크

  • ctrl + shift + 1 부터 0까지: 현재 파일과 라인을 북마크로 지정하거나 해제
  • ctrl + 1 부터 0까지: 지정한 북마크로 이동
  • ctrl + f11: 북마크 등록 창 열기
  • ctrl + shift + f11: 북마크 이동 창 열기

윈도우 관련

  • alt + 1: Project 윈도우로 포커싱
  • alt + 2: Bookmarks 윈도우로 포커싱
  • alt + 3: Find 윈도우로 포커싱
  • alt + 4: Run 윈도우로 포커싱
  • alt + 5: Debug 윈도우로 포커싱
  • alt + 6: Problems 윈도우로 포커싱
  • alt + 7: Structure 윈도우로 포커싱
  • alt + 8: Services 윈도우로 포커싱
  • alt + 9: Git 윈도우로 포커싱
  • alt + 0: Commit 윈도우로 포커싱
  • ctrl + h: Hierarchy 윈도우로 포커싱
  • shift + esc: 현재 윈도우 최소화
  • ctrl + shift + ': 현재 윈도우 최대화, 다시 누르면 원래 크기로
  • ctrl + alt + shift + left/right: Stretch to Left/Right. 창을 좌측 혹은 우측으로 늘리거나 줄임. 코드 에디터 화면에선 (가능할 경우에만) Move Element Left/Right 기능으로 작동한다.

코드 에디터

  • ctrl + q: Quick Documentation 퀵 뷰 창에서 서식이 적용된 자바독 보기
  • ctrl + shift + i: Quick Definition. 툴팁창으로 선언부 보기
  • ctrl + b: 정의된 파일이나 선언부로 이동, 이미 선언부일 땐 참조하는 코드 미리보기
  • ctrl + alt + b: (인터페이스의) 구현부가 따로 있으면 그 쪽으로, 아니면 선언부로 이동
  • ctrl + u: 오버라이딩 메서드의 super 메서드로 이동
  • alt + enter: Show Context Actions 파일 에디터에서 발동하면 상황에 맞는 메뉴 보여줌. 대부분 리팩터링 관련.
  • alt + f1: Select in/ 어느 윈도우에서 현재 파일(혹은 포커스가 있는 요소)을 보여줄 지 선택하는 창이 열림. alt + f1, 1 누르면 프로젝트 윈도우에서 현재 파일이 보이는 식.
  • alt + f7: Find Usages 포커스된 대상이 어디서 쓰이고 있는지 프로젝트 전체 검색
  • ctrl + alt + f7: Show Usages 대상을 참조하고 있는 코드를 퀵 뷰 창에서 보여줌
  • ctrl + f7: Find Usages in File/ 포커스된 대상이 어디서 쓰이고 있는지 현재 파일 내 검색. ctrl + shift + f7은 Highlight Usages in File인데, 인텔리제이 2020.1 버전부터 두 기능 간 차이가 없다고 한다. JetBrains Support 답변
  • ctrl + f1: Error Description. 에러 툴팁 보기
  • ctrl + f12: File Structure. eclipse의 빠른 아웃라인 보기 기능과 같음.
  • ctrl + alt + l: 오토 fㅗ매팅
  • ctrl + shift + backspace: 마지막 수정 지점으로 이동
  • shift + f4: Open source in new window. 현재 파일 새 창에서 보기
  • f2 shift + f2: Highlighted Error. 다음/이전 에러 지점으로 이동
  • ctrl + alt + 방향키좌우: 이전/다음 포커스가 있던 지점으로 이동
  • ctrl + alt + t: Surround With. 선택한 코드를 제어문(if, while, try-catch 등)으로 감싸주는 기능
  • ctrl + alt + q: Toggle Rendered View. 자바독 편집/읽기 모드 토글
  • ctrl + shift + t: Go To Test. 현재 클래스의 테스트 클래스로 이동하거나 되돌아옴
  • ctrl + h: Type Hierarchy. 타입 계층 보기
  • ctrl + shift + h: Method Hierarchy. 메서드 계층 보기
  • ctrl + alt + h: Call Hierarchy. 호출 계층 보기
  • ctrl + alt + shift + left/right: Move Element Left/Right. 메서드 파라미터의 순서를 변경할 때 사용함.
  • alt + shift + c: Recent changes. 파일 시스템의 최근 변경 목록을 보여주는 것 같은데, 어떤 기준으로 나오는지 잘 모르겠음 🤔
  • ctrl + shift + l(서브라임 스타일): Split Selection into Lines. Extra Actions 플러그인을 설치해야 사용 가능. 기존 바인딩은 삭제
  • alt + shift + l: Save Context. 컨텍스트를 저장한다. 컨텍스트는 열려있는 파일들을 의미하는 모양
  • alt + shift + s: Load Context. 저장한 컨텍스트를 불러온다.

복사/붙이기

  • ctrl + alt + shift + c: Copy Reference. 현재 커서/캐럿/포커스의 위치를 기준으로 상대 경로를 복사한다. 예를 들어자바 클래스의 메서드에 캐럿을 두고 누르면 패키지/클래스명#메서드명의 형태로 복사한다. 심볼을 특정할 수 없는 경우엔 디렉터리/파일명:라인번호의 형태로 복사한다.
  • ctrl + shift + c: Copy Absolute Path. 현재 파일의 (윈도우에선 드라이브 문자 C:, D: 부터 시작하는) 절대 경로를 복사한다.

빌드, 실행

  • ctrl + f2: 실행 중인 앱 중단
  • ctrl + f9: 빌드하기
  • ctrl + f10: Update Running Application. 런타임이 끝나지 않은 애플리케이션에 어떻게 할 지 묻는 대화창이 나타남. 근데 2023년 3월부터 자꾸 하라는 업데이트는 안하고 IME 툴팁이 나타나서 ctrl + alt + \\도 추가함. (윈도우 11 문제 같은데, 어떻게 하면 또 풀린다.)
  • shift + f9: Debug 모드로 시작
  • shift + f10: Run 모드로 시작
  • ctrl + shift + f9: 어떤 것을 Debug 모드로 시작할지 묻는 대화창이 나타남
  • ctrl + shift + f10: 어떤 것을 Run 모드로 시작할지 묻는 대화창이 나타남

디버깅

  • alt + f10: Show Execution Point. 디버깅 중, 브레이크 포인트에 의해 실행을 정지하고 있는 지점으로 포커스를 이동하는 기능이다.