Xcode13에서 제가 가장 반긴 신기능은 뭐니뭐니해도 Vim모드 지원입니다. 이 Vim모드란 무엇이고, 왜 사용하는지에 대해 정리해보겠습니다.
Vim이 뭐야?
먼저 Vim이 무엇인지 아예 모르는 분들을 위해 간단히 Vim이 무엇인지 설명드리겠습니다. Vim이란 VI improved의 준말로, “향상된 VI”를 뜻합니다. 그럼 VI는 무엇일까요? VI는 Visual Interface의 약자로, 옛날 GUI기반의 에디터가 없던 시절, CLI 환경에서 그나마 Visual하게 텍스트를 편집 할 수 있도록 만든 프로그램입니다. 한 마디로, “옛날 옛적 컴퓨터에서 쓰이던 텍스트 편집기”란 뜻이죠.
Vim을 갑자기 왜 쓰는거야?
옛날 옛적 CLI환경에서 쓰이던 편집기를 왜 이제와서 다시 Xcode에 집어넣게 된 것일까요? 그 이유를 알려면 VI의 이름을 다시 한 번 뜯어봐야 합니다. VI는 엄밀히 말하면 Interface 입니다. 즉 구체적인 편집기를 말한다기 보다는, 그 편집기가 지원해야 할 기능의 명세라고도 할 수 있습니다. 즉 어떤 편집기도 VI를 지원 할 수 있으며, 실제로 지금까지 Xcode를 제외한 대부분의 IDE들이 기본적으로, 또는 플러그인등을 통해 VI를 지원하고 있었습니다.
그 말인즉슨, 여러 종류의 IDE들을 사용하더라도, VI를 통해 각 IDE를 사용한다면, 각 IDE에 특화된 많은 단축어들을 따로따로 알지 못하더라도, VI에서 지원하는 수많은 조합의 강력한 단축어나 명령어들을 즉각적으로 사용할 수 있다는 것을 뜻합니다. 그러니까 여러분이 VI를 지원하는 SublimeText로 React개발을 하다가, 어느 날 갑자기 안드로이드 개발을 해보고 싶게 되었을 때, “Android Studio에서는 검색 및 치환을 어떻게 하지?” 라는 질문을 할 필요가 없다는 뜻입니다.
여태까지는 이 생태계에서 Xcode는 제외되어 있었습니다. 물론 커뮤니티에서 제작한 XVim 을 활용하는 방법이 없진 않았지만 설치하기가 쉽지 않았고, 또 언제든 Xcode의 구현에 따라 지원이 중단될 수 있다는 불안감을 느껴야만 했습니다. 이제 Xcode가 공식적으로 VI를 지원하게 되었으므로, VI기반으로 IDE를 사용하던 다른 많은 개발자분들이 더 편하게 iOS개발에 뛰어들 수 있음은 물론, 거꾸로 VI기반으로 iOS개발을 익히신 경우, 추후 다른 플랫폼 개발에 좀 더 쉽게 접근 할 수 있게 되는 길이 열리게 된 것입니다.
Vim은 어떻게 쓰는거야?
Xcode에서 Vim을 쓰기 위해선, Editor메뉴에서 Vim Mode를 찾아 클릭하시면 됩니다. 찾기 어렵다면 Help메뉴에서 Vim을 검색하면 쉽게 찾으실 수 있을겁니다.
Vim이 처음이시라면, 아마 처음에 당황하실 겁니다. 커서가 두꺼워지고, 무슨 키를 눌러도 아무것도 입력되지 않을테니까요. 기본적으로 이 상태를 VI에서는 “노말모드”라고 합니다. 이 상태에서는 주로 커서를 옮기거나, 문자열을 찾거나 기존 입력된 텍스트를 가공하는 일들을 하게 됩니다. 평범한 “입력(Insertion)모드”로 가기 위해서는, 노말모드 상태에서 “i” 키(insert의 첫글자)를 누르면 됩니다. 이 상태에서 다시 노말모드로 돌아가기 위해선 esc키를 누르면 됩니다.
현재 내가 어떤 모드에 있는지는, 커서의 굵기를 통해서도 알 수 있고, VI상태바의 표시를 통해서도 알 수 있습니다.
Vim이 왜 강력한가
여기까지 읽었을 때는, 도대체 Vim이 왜 좋다고 하는건지 이해하기 어려울 수 있습니다. 하지만 아마 https://www.openvim.com 등의 튜토리얼등을 진행하시면 금방 왜 Vim이 텍스트 편집의 생산성을 급격히 올려주는지 이해하실 수 있을 겁니다. 이 글에서는 여러분이 이 튜토리얼을 진행하실만한 동기부여가 될 수 있도록 제가 자주 쓰는 기능 몇 가지를 알려드리도록 하겠습니다.
1.
di{Vim의 명령어들은 “조합” 할 수 있다는 점이 큰 특징입니다. 이 명령어의 경우, delete를 뜻하는 d명령어와, “in”을 뜻하는 i, 그리고 in 명령어의 대상이 되는 “{” 기호의 조합으로 이루어져 있습니다. 의미를 풀자면 “delete everything in { to }” 가 되겠습니다.
이것을 응용하여 di" 와 같이 사용하여 따옴표 안에 있는 문자열들을 모두 지우는 명령어로 쓸 수도 있고, yi[ 와 같이 사용하여 대괄호로 묶여진 내용 안의 내용을 모두 복사하라는 명령어로 쓸 수도 있습니다.
2. yy / dd / p
y 명령어는 yank의 약자로, “복사”한다는 뜻입니다. d 명령어는 delete의 약자로, “삭제”한다는 뜻입니다만, 실질적으로는 “잘라내기”에 가깝습니다. 이렇게 복사, 또는 “잘라낸” 내용은 p(paste) 명령어로 붙여넣기 할 수 있습니다. 여기까지는 cmd+c/v 와 다를 것이 크게 없죠? VI는 여기서 한 발 더 나가 이런 명령어들이 연달아 쓰이면 해당 명령어를 “한 줄 단위”로 실행하게 됩니다. yy를 실행하면 한 줄 전체가 복사되고, dd를 실행하면 한 줄 전체가 잘라내지는 식이죠.
3. yy10p또 VIM의 명령어들은 “숫자”와 조합 될 수 있습니다. 명령어를 쓰기 전에 앞에 숫자가 있으면, 어떤 명령어든 그 숫자만큼 실행됩니다. yy를 해서 한 줄을 복사하고, 10을 입력한 다음 p를 쓰면 “한 줄 복사된 내용을 10번 붙여넣기 한다”는 뜻이 됩니다.
4. 다양한 사용처
VI는 각종 IDE들은 물론, Github을 비롯한 많은 개발관련 웹페이지들에서 지원합니다. github의 아무 레포에나 들어가보신다면, VI에서 커서를 움직이는 방식인 h,j,k,l 등으로 포커스를 이동하고 검색을 뜻하는 “/”키를 눌러서 곧장 검색을 하실 수 있다는 것을 아실 수 있을 겁니다. 일단 알고 다시 보면, VI는 일상생활에 생각보다 깊숙이 스며 들어 있답니다.
마치며
이 정도면 Vim을 익히고픈 마음이 들 만큼의 충분한 동기부여가 되었을까요? 만약 그러셨다면, 아래 정리해 둔 다양한 링크들이 도움이 될 것입니다. Vim을 통해 여러분의 생산성이 폭발적으로 향상 되셨으면 좋겠습니다.
참고자료
•
https://www.openvim.com : 인터랙티브한 방식으로 Vim을 배울 수 있는 곳입니다.
•
vimtutor: CLI에서 Vim을 깐 경우, vimtutor가 같이 깔렸을 것입니다. 이 때 CLI에서 vimtutor를 실행하면 공식 튜토리얼을 만나보실 수 있습니다.
•
https://github.com/johngrib/simple_vim_guide: 실무에 꼭 필요한 엑기스 내용만 정리된 한글 Vim guide입니다.