.editorconfig 파일?
오픈소스를 구경하다 보면 심심찮게 .editorconfig 파일을 볼 수 있습니다.
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
tab_size = 8
[{Makefile,*.{mk,c,h,cpp,hpp,tpp,ixx}}]
indent_style = tab
indent_size = 4
tab_size = unset
Shell
복사
.editorconfig 파일 예시
대충 이런 식으로 생겼는데, 이게 어디에 쓰이는 걸까요?
EditorConfig라는 이름 그대로, 에디터의 설정 파일입니다.
지원 범위
EditorConfig 공식 사이트에서도 볼 수 있는데,
GitHub, IntelliJ, Visual Studio 등에서 기본으로 지원하고
Vim, Notepad++, Visual Studio Code 등에서도 플러그인을 통해 지원합니다.
그냥 사실상 모든 에디터에서 지원한다고 보면 됩니다.
기능
프로젝트마다 꼭 정해두고 사용하는 것들이 있습니다.
•
charset
•
줄바꿈 (LF/CRLF)
•
들여쓰기 (tab/space, 크기)
그 중에 이런 것들은 대부분의 에디터에서 설정할 수 있는데요,
에디터마다 설정 파일을 만들 필요 없이, EditorConfig에서 이 설정을 모두 지원합니다.
문법
.editorconfig 파일의 문법은 ini와 비슷합니다.
대신 섹션에 파일명 패턴이 들어가고, 주석은 ; 대신 #으로 시작합니다.
# #으로 시작하는 줄은 주석입니다.
# 속성은 `속성 = 값` 형태로 쓸 수 있습니다.
root = true
# [패턴] 뒤에 오는 속성은 그 패턴에 맞는 파일에 적용됩니다.
# 예를 들어 모든 파일에 적용할 속성은 [*] 뒤에 쓰면 됩니다.
[*]
charset = utf-8
Shell
복사
charset만 설정하는 간단한 .editorconfig 예시
속성
모든 에디터에서 쓸 수 있게 만들려다 보니, 중요한 속성 몇 가지가 전부입니다.
root
root는 특별한 속성입니다.
각 에디터 (또는 EditorConfig 플러그인)은 어떤 파일을 편집할 때
그 파일에 적용할 설정을 찾기 위해 .editorconfig 파일을 찾습니다.
root = true로 지정하면 .editorconfig 파일을 찾는 과정을 멈출 수 있습니다.
일반적으로 프로젝트 루트 디렉터리에서 root를 true로 지정합니다.
charset
utf-8이나 utf-8-bom, latin1 등 charset을 설정할 수 있습니다.
indent_style
들여쓰기를 탭으로 할지 띄어쓰기로 할지 설정할 수 있습니다.
space 또는 tab으로 설정할 수 있습니다.
indent_size
들여쓰기의 크기를 설정할 수 있습니다.
2나 4 등의 크기를 적어도 되고, tab이라고 적어서 tab_width를 사용할 수도 있습니다.
tab_width
들여쓰기와 별개로, 탭의 크기를 따로 설정할 수 있습니다.
기본값으로 indent_size가 되기 때문에 보통 따로 설정하지 않아도 됩니다.
end_of_line
줄바꿈 스타일일 지정할 수 있습니다.
lf나 crlf, 또는 cr을 사용할 수 있습니다.
와일드카드 패턴
glob 패턴이랑 비슷해 보이지만 사실 좀 많이 다릅니다.
많이 쓰는 몇 가지만 설명하겠습니다.
*
glob의 *과 비슷하게, 구분자(/)를 제외하고, 몇 글자든 들어갈 수 있습니다.
예를 들어 c파일에만 적용하려면 [*.c]로 쓸 수 있습니다.
.gitignore와 비슷하게, [*]은 하위 디렉터리를 포함한 모든 파일에 적용됩니다.
**
glob의 **과 비슷하게 구분자(/)를 포함해서 몇 글자든 들어갈 수 있지만,
globstar와는 다른 방식을 사용하기 때문에 [src/**/*.c]대신 [src/**.c]로 써야 합니다.
EditorConfig의 src/**/*.c는 src/main.c를 포함하지 않습니다.
{a,b,c}
a, b, c 증 하나.
예를 들어 모든 c 파일과 h 파일에 적용하고 싶다면 [*.{c,h}]로 쓸 수 있습니다.
[{Makefile,*.{c,h}}]처럼 중첩도 가능합니다.