.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

대충 이런 식으로 생겼는데, 이게 어디에 쓰이는 걸까요?

**EditorConfig**라는 이름 그대로, 에디터의 설정 파일입니다.

지원 범위

EditorConfig 공식 사이트에서도 볼 수 있는데,

GitHub, IntelliJ, Visual Studio 등에서 기본으로 지원하고

Vim, Notepad++, Visual Studio Code 등에서도 플러그인을 통해 지원합니다.

그냥 사실상 모든 에디터에서 지원한다고 보면 됩니다.

기능

프로젝트마다 꼭 정해두고 사용하는 것들이 있습니다.

그 중에 이런 것들은 대부분의 에디터에서 설정할 수 있는데요,

에디터마다 설정 파일을 만들 필요 없이, EditorConfig에서 이 설정을 모두 지원합니다.

문법

.editorconfig 파일의 문법은 ini와 비슷합니다.

대신 섹션에 파일명 패턴이 들어가고, 주석은 ; 대신 #으로 시작합니다.

# #으로 시작하는 줄은 주석입니다.
# 속성은 `속성 = 값` 형태로 쓸 수 있습니다.
root = true

# [패턴] 뒤에 오는 속성은 그 패턴에 맞는 파일에 적용됩니다.
# 예를 들어 모든 파일에 적용할 속성은 [*] 뒤에 쓰면 됩니다.
[*]
charset = utf-8

속성

모든 에디터에서 쓸 수 있게 만들려다 보니, 중요한 속성 몇 가지가 전부입니다.

root

root는 특별한 속성입니다.

각 에디터 (또는 EditorConfig 플러그인)은 어떤 파일을 편집할 때

root = true로 지정하면 .editorconfig 파일을 찾는 과정을 멈출 수 있습니다.

일반적으로 프로젝트 루트 디렉터리에서 roottrue로 지정합니다.

charset

utf-8이나 utf-8-bom, latin1 등 charset을 설정할 수 있습니다.

indent_style

들여쓰기를 탭으로 할지 띄어쓰기로 할지 설정할 수 있습니다.

space 또는 tab으로 설정할 수 있습니다.

indent_size

들여쓰기의 크기를 설정할 수 있습니다.

24 등의 크기를 적어도 되고, tab이라고 적어서 tab_width를 사용할 수도 있습니다.

tab_width

들여쓰기와 별개로, 탭의 크기를 따로 설정할 수 있습니다.

기본값으로 indent_size가 되기 때문에 보통 따로 설정하지 않아도 됩니다.

end_of_line

줄바꿈 스타일일 지정할 수 있습니다.

lfcrlf, 또는 cr을 사용할 수 있습니다.

와일드카드 패턴

glob 패턴이랑 비슷해 보이지만 사실 좀 많이 다릅니다.

많이 쓰는 몇 가지만 설명하겠습니다.

*

glob의 *과 비슷하게, 구분자(/)를 제외하고, 몇 글자든 들어갈 수 있습니다.

예를 들어 c파일에만 적용하려면 [*.c]로 쓸 수 있습니다.

.gitignore와 비슷하게, [*]은 하위 디렉터리를 포함한 모든 파일에 적용됩니다.

**

glob의 **과 비슷하게 구분자(/)를 포함해서 몇 글자든 들어갈 수 있지만,

globstar와는 다른 방식을 사용하기 때문에 [src/**/*.c]대신 [src/**.c]로 써야 합니다.

EditorConfig의 src/**/*.csrc/main.c를 포함하지 않습니다.

{a,b,c}

a, b, c 증 하나.

예를 들어 모든 c 파일과 h 파일에 적용하고 싶다면 [*.{c,h}]로 쓸 수 있습니다.

[{Makefile,*.{c,h}}]처럼 중첩도 가능합니다.