EditorConfig 생성기
리포지토리 루트에 둔 .editorconfig는 최신 IDE 모두에게 이 프로젝트가 파일을 어떻게 포맷하는지 알려 주며, 탭이냐 스페이스냐 하는 논쟁을 파일 단위로 끝냅니다. 어려운 쪽은 전역 블록이 아니라 언어별 섹션입니다. YAML은 탭으로 들여쓰는 것 자체가 불가능하고, make는 스페이스로 시작하는 레시피 줄을 거부하며, CRLF로 저장한 셸 스크립트는 실행되지 않습니다. 리포지토리에 있는 언어를 고르면 이 생성기가 각 언어에 필요한 섹션을 써 주고, 그 섹션이 왜 있는지 설명하는 메모를 옆에 붙여 줍니다.
.editorconfig 만드는 방법
-
1
리포지토리에 있는 언어를 고르세요
JavaScript, JSON, HTML과 CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, 셸 스크립트, Windows 배치 파일. 하나를 체크할 때마다 섹션이 하나씩 추가됩니다.
-
2
모든 파일이 물려받을 규칙을 정하세요
들여쓰기 스타일과 크기, 줄 끝, 문자 인코딩, 마지막 줄 개행, 줄 끝 공백, 줄 길이 제한. 이 값들은 맨 위 `[*]` 블록에 들어가고, 아래의 각 섹션은 해당 언어가 실제로 필요로 하는 것만 재정의합니다.
-
3
각 섹션이 왜 있는지 확인하세요
파일 옆의 표가 생성된 모든 섹션을 설명하므로, 커밋하기 전에 팀에 필요 없는 섹션을 덜어낼 수 있습니다.
-
4
리포지토리 루트에 복사하세요
`.gitignore` 옆에 `.editorconfig`라는 이름으로 저장하세요. 편집기는 다음에 여는 파일부터 이 파일을 인식합니다. 빌드 단계도, 플러그인 설정도 필요 없습니다.
.editorconfig가 하는 일
프로젝트 루트에 둔 .editorconfig라는 파일은 형식 규약을 선언합니다. EditorConfig를 지원하는 편집기(모든 주요 IDE와 대부분의 최신 텍스트 편집기)는 파일을 열 때 그 규칙을 적용합니다. 탐색은 편집 중인 파일에서 디렉터리 트리를 위로 거슬러 올라가다가 root = true라고 적힌 첫 파일에서 멈춥니다.
출력 예시
기본 설정(스페이스, 들여쓰기 크기 4, LF, utf-8)과 미리 체크돼 있는 두 섹션을 쓰면 생성기는 다음을 출력합니다:
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.{md,markdown}]
trim_trailing_whitespace = false
[{Makefile,makefile,GNUmakefile,*.mk}]
indent_style = tab
Python이나 Go, YAML을 체크하면 해당 섹션이 아래에 나타나며, 그 생태계의 포매터가 강제하는 관례를 이미 담고 있습니다.
주요 디렉티브
| 디렉티브 | 허용 값 | 참고 |
|---|---|---|
| root | true | 탐색이 여기서 멈추도록 프로젝트 루트에 지정합니다 |
| charset | latin1, utf-8, utf-8-bom, utf-16be, utf-16le | 보통은 utf-8을 씁니다. 명세는 바이트 순서 표식을 권장하지 않으며, utf-16 두 가지는 프로젝트의 모든 파일에 적용돼 대부분의 빌드 도구가 읽지 못합니다 |
| end_of_line | lf, crlf, cr | 여러 운영체제를 오가는 작업에는 lf, Windows 전용 리포지토리에만 crlf |
| indent_style | space, tab | |
| indent_size | 정수, 또는 tab | indent_style = tab일 때도 무시되지 않습니다. tab_width가 이 값을 이어받아 탭이 몇 칸 너비로 보일지를 정합니다 |
| tab_width | 정수 | 기본값이 indent_size와 같아서 따로 쓸 일은 드뭅니다 |
| insert_final_newline | true, false | 파일을 POSIX 규격에 맞게 유지하고 diff를 깔끔하게 만듭니다 |
| trim_trailing_whitespace | true, false | 줄 끝 공백이 줄바꿈을 뜻하는 Markdown에서는 꺼 두세요 |
| max_line_length | 양의 정수, 또는 unset | 핵심 명세에는 없고 속성 위키에 실려 있습니다. 제한을 두지 않으려면 0을 쓰지 말고 줄 자체를 빼세요 |
스타일 가이드가 아니라 빌드를 깨뜨리는 세 가지 규칙
대부분의 .editorconfig 항목은 취향의 문제입니다. 다음 세 가지는 그렇지 않으며, 언어별 섹션을 둘 가치가 있는 이유가 바로 이것입니다:
- YAML은 들여쓰기에 탭 문자를 허용하지 않습니다. 린트 경고가 아니라 파싱 오류입니다. 프로젝트를 탭으로 들여쓰면서 GitHub Actions 워크플로나 Docker Compose 파일, Kubernetes 매니페스트를 두고 있다면, YAML 섹션이 스페이스를 다시 강제해야 합니다.
make는 모든 레시피 줄 맨 앞에 진짜 탭 문자를 요구합니다. 스페이스를 쓰면missing separator. Stop.이 출력되면서 빌드가 멈춥니다.[{Makefile,makefile,GNUmakefile,*.mk}]이 여러 철자를 나열하는 이유가 이것입니다. EditorConfig는 파일 이름을 대소문자를 구분해 매칭하는데, 리포지토리에는Makefile과makefile이 둘 다 있기 때문입니다.- CRLF로 저장한 셸 스크립트는 실행되지 않습니다. 커널이 캐리지 리턴을 인터프리터 경로의 일부로 읽어
/bin/bash^M: bad interpreter: No such file or directory같은 메시지를 냅니다. Windows 배치 파일에는 정반대의 문제가 있습니다.cmd.exe는goto와call :label을 바이트 오프셋으로 찾아가기 때문에, LF만 쓴.bat파일은 엉뚱한 줄로 점프하거나 아무 오류 없이 중간에 멈출 수 있습니다.
이 중 둘은 전역 블록이 고쳐 주는 문제가 아니라 오히려 전역 블록이 일으킬 수 있는 문제라서, 이 생성기가 그 상황을 지켜봅니다. 탭을 고르고 YAML 섹션을 넣지 않거나 CRLF를 고르고 셸 섹션을 넣지 않으면, 생성된 파일에 그 파일들이 한 번도 언급되지 않았더라도 결국 그 파일들을 깨뜨립니다. 생성기는 파이프라인이 실패한 뒤에야 알게 두지 않고 출력 위에서 그 사실을 알려 줍니다. utf-16 문자 인코딩도 마찬가지입니다. 프로젝트의 모든 파일에 적용되는데 make와 셸 인터프리터, Python은 그렇게 저장한 소스를 읽지 못합니다.
이 생성기가 써 주는 언어별 관례
| 언어 또는 파일 | 섹션 | 설정 내용과 이유 |
|---|---|---|
| JavaScript, TypeScript | *.{js,jsx,mjs,cjs,ts,tsx} |
스페이스 2개, Prettier의 기본값 |
| JSON | *.{json,jsonc} |
스페이스 2개, npm이 package.json에 쓰는 너비 |
| HTML, CSS, 템플릿 | *.{html,htm,css,scss,sass,less,vue,svelte} |
스페이스 2개, 들여쓰기 기반 Sass 문법은 이 값이라야 파싱됩니다 |
| YAML | *.{yml,yaml} |
스페이스 2개, 프로젝트가 탭을 써도 스페이스 |
| Python | *.{py,pyi} |
스페이스 4개, PEP 8과 Black |
| PHP | *.php |
스페이스 4개, PSR-12. WordPress는 탭, Drupal은 2개 |
| Go | {*.go,go.mod} |
탭, gofmt가 탭으로 들여쓰기 때문 |
| Rust | *.rs |
스페이스 4개, rustfmt의 기본값 |
| Ruby | {*.rb,*.rake,Gemfile,Rakefile} |
스페이스 2개, RuboCop의 기본값 |
| Java | *.java |
스페이스 4개, Oracle의 규약. Google의 Java 스타일은 2개 |
| Markdown | *.{md,markdown} |
줄 끝 공백 유지, Markdown이 줄바꿈을 적는 방식 |
| Makefile | {Makefile,makefile,GNUmakefile,*.mk} |
탭, make가 요구하는 값 |
| 셸 스크립트 | *.{sh,bash,zsh} |
LF, 프로젝트의 나머지가 무엇을 쓰든 |
| Windows 배치 | *.{bat,cmd} |
CRLF, cmd.exe가 레이블을 바이트 오프셋으로 찾기 때문 |
그 표에 없는 것을 눈여겨보세요. 줄 길이입니다. PEP 8은 79자, Black은 88자, PSR-12는 권고 수준의 120자, rustfmt는 100자를 말합니다. 그중 어느 값이든 언어 섹션에 써 넣으면 프로젝트 전체에 대해 고른 제한을 조용히 덮어써 버립니다. 그래서 생성기는 max_line_length를 [*] 블록에만 남기고, 그 숫자들은 직접 판단해 적용할 수 있도록 여기에 적어 둡니다.
내 편집기가 지원하나요?
기본 지원: VS Code, JetBrains의 IntelliJ 계열, Visual Studio, Sublime Text, Xcode, Notepad++. Vim과 Emacs, Neovim을 비롯한 몇몇은 작은 플러그인이 필요합니다. 파일 형식이 평범한 INI라서 린터와 포매터도 읽을 수 있고, Prettier와 일부 랭귀지 서버가 이 파일과 보조를 맞추는 것도 그 덕분입니다.
자주 묻는 질문
맨 위에 root = true를 적어 프로젝트 루트에 둡니다. 특정 경로를 재정의하려면 하위 디렉터리에 .editorconfig 파일을 더 둘 수 있습니다. 탐색은 편집 중인 파일에서 트리를 위로 거슬러 올라가다가 처음 만나는 root = true에서 멈춥니다.
입력란을 0으로 두면 생성기가 max_line_length를 파일에서 빼 둡니다. 이 속성에 문서화된 값은 양수, 그리고 상위 파일에서 물려받은 값을 취소하려고 존재하는 명세 전역 키워드 unset입니다. 지금 만드는 것은 최상위 파일이라 취소할 값이 없고, 줄이 없는 것이 곧 같은 뜻입니다. 쓰지 말아야 할 것은 이 도구가 예전에 쓰던 max_line_length = 0입니다. 명세는 지원하지 않는 값을 플러그인이 무시하라고 하므로, 0이라는 제한은 제한이 아니라 조용히 아무 일도 하지 않는 줄일 뿐입니다.
아니요. EditorConfig는 모든 편집기에서 공백과 줄 끝을 다룹니다. 내가 쓰지 않고 동료들만 쓰는 편집기까지 포함해서요. Prettier와 언어별 린터는 따옴표, 세미콜론, 끝 쉼표처럼 더 깊은 스타일 규칙을 맡습니다. 둘은 서로를 보완하며, Prettier는 기본적인 항목을 .editorconfig에서 읽어 옵니다.
YAML이 들여쓰기에 탭 문자를 아예 허용하지 않기 때문입니다. 탭으로 들여쓴 워크플로나 compose 파일은 어떤 도구가 보기도 전에 파싱에 실패합니다. 생성기는 나머지 곳에서는 탭을 그대로 두고 YAML 섹션만 재정의하며, 그렇게 할 때는 파일 위에 그 사실을 알려 줍니다.
리포지토리의 Windows 도구가 실제로 필요로 한다면 end_of_line = crlf로 설정하세요. 대개 더 나은 선택은 여기서는 lf를 쓰고 .gitattributes에 * text=auto를 두는 것입니다. 그러면 git이 커밋할 때 줄 끝을 정규화하고, 체크아웃할 때는 운영체제에 맞는 줄 끝이 유지됩니다.
선택한 값은 파일을 만드는 데 쓰이고, 단계를 옮길 때 페이지 링크에 함께 실려 이동하므로 설정을 공유하거나 즐겨찾기에 저장할 수 있습니다. 페이지가 생성된 뒤에는 저희 서버에 아무것도 저장되지 않습니다.
관련 도구
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
Webpack 설정 생성기
순수 JavaScript, React, Vue용 webpack 5 webpack.config.js를 만드세요. TypeScript, Babel, CSS 또는 Sass, 이미지, HtmlWebpackPlugin, 개발 서버, npm install 명령까지 함께 제공합니다.
텍스트 파일 인코딩 변환기
깨진 문자를 고치기 위해 텍스트를 UTF-8, UTF-16, Latin-1, Windows-1252 등 여러 인코딩 사이에서 변환하세요.
HEX → ASCII 변환기
16진 바이트 시퀀스를 ASCII 텍스트로 변환합니다. 프로토콜 디버깅, 리버스 엔지니어링, CTF 챌린지에 좋습니다.
XML 포매터
일관된 들여쓰기로 XML 문서를 정렬 출력하고, 정확한 줄 번호로 적격성 오류를 잡아냅니다.
Protocol Buffers 디코더
hex, Base64, Base64URL, 텍스트 또는 파일의 Protobuf 와이어 형식 바이트를 브라우저에서 디코딩하고 정확한 필드 후보를 확인한 뒤 비공개 보고서로 내보냅니다.
이 도구는 다른 언어로도 제공됩니다
- Generator EditorConfig [ID]
- مولد EditorConfig [AR]
- Generador de EditorConfig [ES]
- EditorConfig-Generator [DE]
- Trình tạo EditorConfig [VI]
- EditorConfig ジェネレーター [JA]
- EditorConfig-generator [SV]
- EditorConfig-generator [NL]
- Gerador de EditorConfig [PT]
- Générateur EditorConfig [FR]
- Generator EditorConfig [PL]
- เครื่องมือสร้าง EditorConfig [TH]
- EditorConfig Oluşturucu [TR]
- EditorConfig 生成器 [ZH]
- EditorConfig Generator [EN]
- Generatore EditorConfig [IT]
- Генератор EditorConfig [RU]