sonumb

vim -c option을 사용하여 소스코드 정렬(indent) 하기. 본문

개발자 이야기

vim -c option을 사용하여 소스코드 정렬(indent) 하기.

sonumb 2018. 12. 24. 18:09

간혹 다수의 파일을 indentation 할 필요가 있다. 


일일이 손으로 할 수 없을 만큼 파일의 개수가 많을 때 아래의 내용이 유용할 것이다.


일단 크게 두 가지 작업으로 나뉜다.



1. tab을 space로 대체.

\t을 스페이스로 곧장 대체되면 원소스 코드의 모습이 망가진다.

예를 들어 원소스에서 tab사이즈가 8인데, 내가 쓰는 환경에서는 tab크기가 4라고 하자.

곧장 %s/\t/    /g 명령어로 변환시키면,  주석의 위치가 들쑥날쑥 해진다.

 

따라서 retab 명령어를 쓰는 것이 좋다. (이 작업을 하기 전에 vimrc파일에서 tab 사이즈는 원소스 코드의 tab사이즈와 일치 시킨다.)



$ vi ~/.vimrc #(tab 사이즈와 관련된 것들은 모두 수정)

 $ for i in `find . -name "*.[ch]"`; do vi -c "retab" -c "wq" $i; done;

 $ vi ~/.vimrc #(tab 사이즈 복구)



2. indentation

tab을 스페이스로 대체하였다면 이제 소스코드 포맷을 정렬할 때다.


인덴트를 맞출때, vim의 normal 모드에서 gg=G를 타이핑하여 맞추는 경우가 많다.


그러므로 vi 를 구동할때 -c 옵션에 이를 지정할 수 없으나, 할 수 있는 방법이 존재한다.


http://vim.wikia.com/wiki/Shifting_blocks_visually

를 참조

command 모드에서 아래의 내용을 타이핑하여 정렬 가능하다.

:argdo normal gg=G


이를 -c 옵션의 인자값으로 넘겨주면 아래와 같다. 



  $ for i in `find . -name "*.[ch]"`; do vi -c "argdo normal gg=G" -c "wq" $i; done;

 


혹은 vim 하나의 프로그램으로 전체를 수정할 수 있다.

( ⚠️그러나 mac에서 잘 동작하지 않는 것 같다. )



  $ find . -name "*.[ch]"| xargs vi 


 :argdo normal gg=G

 :wa

 :wq


 $



반응형