본문 바로가기
컴퓨터/자질구레 팁

vi 에서 tab 이 계속 space 로 바뀔 때

by adnoctum 2016. 12. 14.




   vi 혹은 vim 에서 tab 이 계속 space 로 바뀔 때는 :set noexpandtab 명령어를 사용한다. 설정 파일에서 변경을 했음에도 불구하고 적용이 되지 않을 경우 :verb 명령어로 가장 마지막에 적용된 파일을 찾아서 변경한다. 


   다른 텍스트 편집기와 마찬가지로 vi 에서도 tab 과 space 를 상호 전환할 수 있는데, 그 때 사용하는 명령어가 


:set expandtab

:set noexpandtab

:retab


등이다. 관련 명령어로는 tabstop, shiftwidth, softtabstop 등이 있다. 지금 나의 경우 기본 설정이 계속 tab 을 space 로 변경을 하고 있었다. 그런데 기존 python code 들은 전부 tab 으로 사용했기 때문에 python 코드가 space 와 tab 이 섞여 있다고 하며 실행이 되지 않았다. 그래서 _vimrc[각주:1]에 다음과 같이 설정했다. 




42번 줄처럼 noexpandtab 을 설정했음에도 불구하고 계속 tab 이 space 로 변환되어 편집 모드가 시작되었다. 예전에 이것과 비슷하게, _vimrc 에 지정한 설정이 적용이 되지 않았던 경우가 있었는데 그 때 알아 낸 것은 _vimrc 파일에 source 명령어로 다른 파일에 있는 설정을 적용하면서 설정이 덮어쓰여졌기 때문이었다. 그래서 이번에도 그 경우인가 해서 살펴 보았는데 _vimrc 파일의 가장 마지막에 설정을 했기 때문에 그렇지 않아야 했다. 그래서 다음과 같이 설정이 영향을 받은 가장 최근의 상황을 표시해 보았다. 


:verb set expandtab?


그 결과 다음과 같았다. 




즉, _vimrc 파일이 적용된 이후, 저 python.vim 파일의 설정이 적용된 것이다. 그래서 그 안을 살펴 보았더니, 



이런 부분이 있었다. 그래서 이 부분을 주석처리 하였더니[각주:2] 의도대로 동작하였다. 




  1. 지금은 Windows 에서 작업 중. Vim 이 설치된 곳에 _vimrc 파일이 있고, 없으면 만들면 된다. linux 의 경우 home 의 .vimrc 파일이다. ~/.vimrc, 이고, 점(.)으로 시작하는 파일명은 숨김파일로 간주, ls 를 했을 때 표시가 되지 않으며 ls -a 를 해야 표시가 된다. 어쨌든 있는 파일이다. [본문으로]
  2. 쓰기 권한이 없어서 :w! 로 강제로 쓰려고 해도 되지 않는데, 이럴 땐 이 파일을 다른 곳에 복사 후 수정한 뒤 다시 복사하면서 덮어 쓰면 된다. [본문으로]