vim의 탭 및 들여쓰기 관련 설정

vim 설정 파일을 작성할 때, 초반에는 누군가의 설정 내용을 참고해서 만들고 불편한 부분들을 나에게 맞게 고쳐나가는 방식을 많이 사용하다 보니, 어떤 부분은 설정 파일에 떡하니 설정은 해두었지만 무슨 내용인지, 어떤 효과를 내는지 모르는 것이 많다. 특히 탭이나 들여쓰기 관련 설정이 그러한데, 일부 언어에서는 공백의 수가 문법적으로 크리티컬한 경우도 있다. 이런 문제 외에도 들여쓰기와 탭 동작은 취향과 필요에 따라서 잘 설정해야 하는 부분일 것이다. 오늘은 탭과 관련된 설정 몇 가지에 대해서 알아보도록 하자.

tabstop, ts

'tabstop' 옵션은 탭의 간격을 지정한다. 기본값은 8이다. 보통 탭 키를 사용하는 의미가 탭 문자를 삽입한다기 보다는 “들여쓰기”를 위한 의도인 경우가 더 많기 때문에, 이 옵션은 다른 옵션들에게 영향을 주기도 해서 어떻게 사용하는게 좋다는 언급을 하기는 좀 힘들다. 단순히 들여쓰기할 때의 깊이로 사용할 것인가, 혹은 테이블 형태의 데이터를 정렬하기 위해 사용할 것인가 등의 상황을 모두 고려하는 것이 좋겠다.

softtabstop, sts

'softtabstop' 옵션은 'tabstop' 옵션을 기본값이나 따로 설정해놓은 값에서 변경하지 않은 채로, 편집중에 <TAB> 키나 <BS> 키를 눌러서 들여쓰거나 내어쓰는 간격을 조정하려고 하는 경우(보통은 더 적게)에 사용한다. 사용자에게는 마치 ‘줄어든 탭’을 사용하는 것처럼 보이지만, 실제로는 탭 문자와 공백을 섞어서 사용하게 된다. 예를 들어 tabstop=8 이면 탭 문자는 1개가 삽입되고, 화면 상에서 최대 8칸의 공간을 사용한다. 이 때 sts=2 라고 설정했다면 탭 키를 사용했을 때 8칸이 아닌 두 칸씩 들여써지게 된다. 다음은 ts=8, sts=2 로 설정했을 때 탭키를 눌렀을 때 들여써지는 방식을 시각화 한 것이다.

|------>apple  : ts=8, sts=0
**apple        : ts=8, sts=2
****apple      : <TAB> x 2
******apple    : <TAB> x 3
|------->apple : <TAB> x 4. 공백이 다시 탭으로 한 번에 바뀐다.

탭 키를 한 번 눌렀을 때에는 공백 두 개가 삽입된다. 이 때 <BS> 키를 누르면 두 개 공백을 한 번에 지우기 때문에 마치 작은 탭처럼 느껴진다. (대신 커서를 옮겨서 각각의 공백을 지울 수 있다.) 탭 키를 한 번 더 누르면 공백이 추가되어 네 개 만큼 들여써진다. 이런 식으로 탭을 계속 눌러서 들여쓴 깊이가 실제 ts의 배수에 해당하는 값에 오면 앞의 공백 8개가 탭으로 치환된다.

:set list 를 실행해서 조판 문자를 확인하면서 비교하면 알기 쉽다.

  • 0 으로 설정하면 이 옵션은 꺼진다. 'expandtab' 옵션을 사용하지 않는다면 꺼두는 것도 좋다.
  • -1로 (아무 음수나) 설정하면 'shiftwidth' 값을 사용한다.

이 옵션의 치명적인 문제는 탭 문자와 일반 공백문자를 섞어서 입력하는 것이다. ts 옵션 값을 변경했을 때, 탭 문자의 너비가 달라지지만 공백으로 입력해놓은 칸들은 고정되기 때문에 들여쓰기가 틀어질 수 있고, 이렇게 작성한 파일을 다른 편집기에서 열었을 때에도 문제가 될 수 있다. 그래서 보통은 'ts' 에 설정한 값과 같은 값을 사용한다. (이렇게하면 expandtab 옵션을 사용해도 탭을 탭처럼 사용할 수 있게 된다.)

shiftwidth, sw

shiftwidth 옵션은 들여쓰기, 내어쓰기 (>>, << 키 입력으로 옮기거나, 자동 들여쓰기)할 때의 크기를 지정한다. 보통 ts와 같이 쓰는 경우가 많은데, et 옵션과 함께 쓴다면, 자신이 원하는 크기로 설정하고 sts=-1 로 설정하면 공백으로만 들여쓰기, 내어쓰기가 잘 맞아떨어지게 만들 수 있다.

expandtab, et

'expandtab' 옵션은 말 그대로 탭 문자의 입력을 공백으로 치환하는 것이다. 겉보기 모양은 탭을 입력하는 것과 다르지 않지만 실제로는 최대 8개의 공백이 삽입된다. (이 때 8개는 tabstop 옵션값에 의한 것이다.) 파이썬 코드를 작성해야 하는 상황이나 혹은 편집기마다 탭 간격, 표시 방법이 다른 상황에서 들여쓰기가 일관되게 출력되기를 원한다면 사용하는 것을 추천한다. 이 옵션을 사용한다면, 꼭 'softtabstop' 옵션을 사용해서 <BS>키로 탭을 삭제할 때 한 번에 한 단씩 삭제되도록 하는 것이 좋다.

추천 설정

개인적으로는 다음과 같이 세팅해서 사용하고 있다. 기본적으로 탭 문자를 모두 공백으로 치환하고 있기에 이 설정이 가장 나에게 맞다고 생각한다. 참고로 이를 기본적인 전역 설정으로 만든 상태에서 상황에 따라 들여쓰기 간격을 조정하려 할 때에는 shiftwidth 값만 바꿔서 사용한다.softtabstop 값은 -1로 설정되어 있어 이 값을 자동으로 따라가게 되어 있다.

set tabstop=4 softabstop=-1 shiftwidth=4 expandtab
  • 탭 간격은 4로 하고 탭을 공백으로 표현한다.
  • 들여쓰기 간격도 탭과 동일하게 4로 설정한다.
  • 들여쓰기 간격을 변경해서 편집해야 하는 파일 타입에서는 shiftwidth 값만 로컬 설정값을 변경해준다.

Read more

워드프레스에서 고스트로 이전

워드프레스에서 고스트로 이전

이 글을 쓰면서도 믿기 힘든 사실인데, 블로그라는 걸 처음 시작한지가 20년이 되었습니다. 이글루스에서 처음 시작했다가, SK컴즈가 인수한다고 발표함과 동시에 워드프레스로 플랫폼을 옮겼죠. 워드프레스오 옮긴 이후에는 호스팅 환경을 이리 저리 옮기긴 했지만 거의 18년 가까이 워드프레스를 사용해온 것 같습니다. 그 동안 워드프레스는 블로깅 툴에서 명실상부한 범용CMS로 발전했습니다. 사실 웬만한 홈페이지들은 이제

By sooop
띄어쓰기에 대한 생각

띄어쓰기에 대한 생각

업무 메일을 쓸 때 가장 많이 쓰는 말 중에 하나가 메일 말미에 ‘업무에 참고 부탁 드립니다.‘인데요, 어느 날부터 아웃룩에서 이 ‘부탁 드립니다’가 틀렸다고 맞춤법 지적을 하기 시작했습니다. 맞는 말은 ‘부탁드립니다’라고 붙여 쓰는 거라고. 사실 아래아한글 시절부터 이전의 MS워드까지, 워드프로세서들의 한국어 맞춤법 검사 실력은 거의 있으나 마나 한

By sooop

구글 포토에서 아이클라우드로 탈출한 후기

한 때 구글 포토가 백업 용량을 무제한으로 제공해 주겠다고해서, 구글 포토를 사용해서 사진을 백업해왔습니다. 물론 이 이야기의 결말은 저나 이 글을 읽고 있는 여러분이나 모두 알고 있습니다. 사실 AI에게 학습 시킬 이미지 데이터를 모으기 위한 것일 뿐이라거나 하는 이야기는 그 당시에도 있었습니다만, 에이 그래도 구글인데 용량은 넉넉하게 주겠지…하는 순진한

By sooop

Julia의 함수 사용팁

연산자의 함수적 표기 Julia의 연산자는 기본적으로 함수이며, 함수 호출 표기와 같은 방식으로 호출하는 것이 가능합니다. 또한 그 자체로 함수이기 때문에 filter(), map() 과 같이 함수를 인자로 받는 함수에도 연산자를 그대로 적용하는 것이 가능합니다. 특히 + 연산자는 sum() 함수와 같이 여러 인자를 받아 인자들의 합을 구할 수 있습니다. 2 + 3 # = 5 +(2,

By sooop