vim rename refactoring

python으로 작성된 소스코드에 대해서 PEP-8 코딩 스타일 규칙을 반영하기로 결정되어 대부분의 코드를 수정하게 되었다. PEP-8 규칙 반영시 무엇보다 가장 큰  공사는 멤버 변수, 메서드, 함수 이름 변경이다. 즉, IDE의 rename refactoring 기능이 필요하게 되었다. vim은 IDE가 아니기 때문에 refactoring과 같은 기능이 지원되지 않는다. 


2011/06/14 - [개발 도구] - Linux 개발환경 - vim 사용법


이미 알고 있는 명령어들로는 어려움이 있었다. 모든 파일에 대해서 이름을 변경해주는 기능은 없기 때문이다. 간단히는 shell에서 sed 명령어를 활용하는 방법도 있지만 비슷한 단어들을 사용하는 경우에도 함께 변경되는 단점이 있다. 예를 들어, "find_local"이란 이름을 바꾸려고 할 때 "find_local_second"라는게 함께 있다면 "find_local_second"도 match되어 함께 변경될 가능성이 있다.



lvim, lw

처음으로 찾은 것은 lvim과 lw을 활용하는 방법이다.


:lvim /{pattern}/[g][j] {files} ...




아래는 smart_quote 함수를 사용하는 위치를 찾는 방법이다.


:lvim /smart_quote/g *.py

:lw 


lvim을 사용하면 변경하려는 키워드가 어디어디에 있는지 찾아볼 수 있고, lw 명령을 내리면 찾은 위치들이 네비게이션창으로 나타나게 된다. 이 경우에는 파일 단위로  :%s/word/replace/gce 명령으로 변경을 진행한다. 



argdo

생각보다 lvim, lw을 사용하는 것도 시간이 많이 들었다. 그래서 두번째로 찾은 방법은 argdo를 사용하는 방법이다. args를 이용하여 buffer 메모리 공간에 소스코드 파일 내용들을 가지고 오고, argdo는 열려진 buffer 공간에 대해서 내용을 변경할 수 있다.




:args *.py

:argdo %s/smart_quote/smart_quote2/gce | update


args를 실행하면 상단 buffers 공간에 파일들이 표시된다. 참고로 buffer간 이동은 :next or :prev로 가능하다. argdo를 실행하면 모든 buffer에서 찾기 및 변경을 시도하게 되는데, 스크린샷 맨 아래와 같이 변경할 것인지를 물어본다. 실제로 변경이 필요한 내용인지 확인하고 y를 누르거나 a를 통해서 확인 없이 일괄 변경도 가능하다. 마지막 "| update" 명령은 변경된 파일에 대해서 자동으로 저장해준다. 


허무하게도 최종 결론은 pycharm을 활용하는 방법이다. python을 위한 IDE이기 때문에 rename refacotring을 확실하고 쉽게 제공한다. 


python이 아니더라도 이번에 찾은 lvim은 필요한 키워드가 어떤 파일들에 있는지 찾아보는데 도움이 되고 argdo 또한 키워드 일괄 변경시 도움이 되지 않을까 싶다. 



See also 


Tags

Read Next

*

*