나는 작년, 사내에서 사용하는 IDE를 PyCham에서 VSCode(이후 현재 Cursor)으로 옮겨가면서, 굉장한 어려움(?)을 겪었었다. 사실 IDE를 옮길 일이 많지 않다. 하지만 나는 사내에서는 VSCode(Cursor)로 개발을 진행하고, 집에서 진행하는 개인 프로젝트 및 개발 공부는 JetBrains 의 IDE을 사용하는 멀티 IDE(?)를 사용하곤 했다.
두개의 IDE를 사용하면서 나는 굉장한 생산성 저하가 발생했다. 단축키가 헷갈리면서 그 어느곳에서도 득을 보지 못했다. 집에서는 Cursor의 단축키를 입력하고, 회사에서는 JetBrains의 단축키를 입력하고... 그러다가 결국 나는 단축키를 사용하지 않는 지경에 도달했었다.
단축키를 사용하지 않는다는 것은, 사용하기 이전에는 할 수 있지만 단축키를 사용하던 사람이 그럴 순 없다.(반박시 님말이 맞음)
- 나는 굉장한 생산성 저하와 답답함을 느꼈다.
그래서 몇가지 시도를 해보았었다. 1. 내가 사용하는 기능의 단축키를 모두 커스텀하여 사용하는 것 2. 단축키를 양방향으로 모두 외워버리는 것 3. 단축키를 포기하기하는 것 4. VIM을 시도해보는 것 이었는데, 결과적으로 나는 지금 현재 VIM을 중심으로 사용하고 있다.
- 내가 사용하는 단축키를 모두 커스텀하여 사용하는 것은 굉장히 어려웠다. 각각 IDE 별로 기능의 명칭이 달랐고, 개발을 진행하면서 계속해서 자주 사용하는 단축키를 지정해야했기에.. 포기했다.
- 단축키를 양방향으로 외우는 것은 가장 오랫동안 시도한 방법이었는데, 주말이 지나면 회사에서 사용하는 단축키를 다시 보고 입력해야하는.. 나의 한계에 부딪혀 포기했다.(주말에 공부를 하지 말아야하나.. 싶기도 했다...)
- 단축키 사용을 포기하는 것은 가장 마지막에 자포자기하는 마음으로 단축키 안써!! 라고 외쳤으나, 더 답답함을 느껴 마음을 고쳐먹었다.
- VIM을 시도해보는 것 은 사실 나의 로망(?)이었다. 하지만 섣불리 사용하기에 어려웠던 이유는 IDE도 바뀌어서 잘 못쓰는데, VIM 까지 적용하면 더 못쓰는게 아닌가... 하는 걱정이 사용해볼 생각을 못했다.
나는 VIM을 사용하면서 만족감이 크다. 그래서 VIM을 사용하면서 유용했던 단축키들을 정리해보고자한다. 그리고 계속해서 유용했던 단축키 및 설정을 추가해보고자 한다.
- 모든 명령어는 [ ] 안에 작성된 것이다. 파일 저장의 경우 [ : + q ] 으로 표기한다.
- 모든 명령어는 대소문자가 구분된다.
나의 VIM 사용 설정 환경
나는 기본적으로 VIM 플러그인을 설치하고, IDE에서 제공하는 몇몇 기능(파일 탐색, 전체 찾기 등)을 함께 섞어 사용하고 있다.
- vscode에서는 vim 플러그인을, jetbrains에서는 ideavim 플러그인을 설치하여 사용하고 있다.
나는 VIM에 사용하면서몇가지 불편한 몇가지를 발견했다.
- [ : + cmd ] 동작 과정에서 cmd의 입력에서 소문자가 아닌 대문자 오타가 발생하여 자꾸만 같은 명령어를 입력하는 과정이 발생했다.
- 한글을 사용하다가 입력하는 경우, 명령어가 입력되지 않아 다시 한영 전환 후, 다시 명령어를 입력하는 과정이 발생했다.
- visual mode로 나가는 esc를 누르는게 너무 불편했다.(그 손가락 조금 움직이는게 불편하더라..)
내가 겪은 문제들은 모두 내 문제들이 맞다.(옛날부터 VIM을 사용하던 동료분은 내가 겪고 있는 문제를 전혀 겪고 있지 않다는 말씀을 하시더라..) 이 문제를 해결하기 위해 나는 몇가지 VIM 커스텀을 진행했다. 그리고 커스텀들은 필수는 아니지만, 개인적으로 꼭 추천한다.(너무 편함!!)
- 자주 사용하는 명령어에 대하여, 한글 입력이 되도록 설정했다.
- esc 명령어의 경우, 다른 키매핑을 추가했다.
- 모든 명령어에 대하여, 소문자도 입력이 가능하도록 설정했다.
나는 Cursor를 활용하여 설정을 진행했었다. 필요한 부분만 바로 적용하기에 편리했다. 그러나 글을 작성하면서, 다른 VIM 관련 포스팅을 찾아보니 한번 세팅을 할 때, 유용한 다양한 세팅을 한번에 하는 것도 좋아보인다. 근데 나는 아직 언급한 문제 말고는 불편함을 못느끼고 있어 적용하진 않았다.
설정 이후로는 정말 신세계였다. 코드를 입력할 때 굉장히 편했고, 몇몇 기능은 IDE에서 제공하는 기능을 사용하면서 내 개발 생산성이 많이 증진되는 것을 느꼈다. 그리고 내가 느낀 많이 유용한 명령어들을 정리해본다.
명령어 모음
내가 작성하는 단축키는 (굉장히) 주관적으로 유용하다 생각한 명령어들이다. 누군가에게는 유용할수도 아닐수도 있다. 그러나 이제 작성하는 단축키들은 어렵지(?) 않으면서 동료 개발자분들께 추천하고 싶은 그런 명령어라고 생각하면 좋을 것 같다.
입력모드에 들어가지 않고 바로 수정하기
VIM을 사용하면서, 모든 입력은 입력모드를 들어가야한다. 입력을 다하면 입력모드에서 나와야한다. 이 과정이 생각보다 번거롭다. 그래서
나는 입력모드에 들어가지 않고 내가 원하는 동작을 하는게 굉장히 편하고 유용했다.
// 대소문자 변경
[ ~ ] 커서(혹은 선택영역) 위치 문자 대소문자 변환
[ U ] 선택 영역 대문자로 수정
[ u ] 선택 영역 소문자로 수정
// 숫자 증감
[ ctrl + a ] 숫자 증가
- [5ctrl + a ] 5만큼 증가
[ ctrl + x ] 숫자 감소
수정할 때, 동작을 원하는 동작(삭제, 수정) (혹은 바로 입력모드)
입력을 해야할 때는 보통 특정 단어들을 삭제 -> 입력(수정)하는 상황이 많다. 이런 상황을 고려할 때, 입력모드 -> 코드 선택, 삭제 -> 작성의 순서는 번거롭다. VIM을 사용하지 않는 경우, 수정하고자하는 영역을 선택하고, 바로 입력하여 수정하곤 한다. 그리고 당연하게도 VIM에서도 이를 할 수 있다.
이를 위해서는 명령어를 조합해야 한다. 그리고 조합에 필요한 명령어는 크게 세가지("영역 선택 + 이동 + 동작")이다.
// 함께 사용되는 명령어(영역 선택)
[ v ] 영역 선택
[ shift + v ] 문장 단위 선택
[ ctrl + v ] 블록 단위 선택(멀티 커서 가능)
// 함께 사용되는 명령어(커서 이동)
[ h, j, k, l ] 좌, 상, 하, 우 이동
[ gg ] 문서 맨 위로 이동
[ G ] 문서 맨 아래로 이동
[ H, M, L ] 화면 상/중/하 이동
[ zz ] 현재 커서 위치가 보기 좋게 위치 이동
[ 0(숫자) ] 줄 맨앞
[ $ ] 줄 맨 끝
[ ^ ] 문장 맨 앞
[ g_ ] 문장 맨 뒤
[ w ] 다음 단어 시작으로 이동 예) 123 456 인경우, 123 에서 4 으로 이동
[ b ] 이전 단어 시작으로 이동 예) 123 456 인경우, 456 에서 1 으로 이동
[ e ] 다음 단어 끝으로 이동 예) 123 456 인경우, 123 에서 6 으로 이동
[ ge ] 이전 단어 끝으로 이동 예) 123 456 인경우, 456 에서 3으로 이동
// 함께 사용되는 명령어(동작)
[ c ] 선택된 영역을 삭제하고 바로 입력모드
[ s ] 선택된 영역을 삭제하고 바로 입력모드
[ d ] 선택된 영역을 삭제(visual 모드)
관련하여 자주 사용했던 명령어를 정리한다.
[ v + i + (,[,`,'," + c ] (,[,`,'," ] 내의 영역 내 내용을 삭제하고 입력모드
[ v + i + (,[,`,'," + d ] (,[,`,'," ] 내의 영역 내 내용을 삭제
[ v + i + w + c ] 단어를 선택하고 수정
- 바로 수정하는 경우, [ c + a/i + w ] 를 통해 사용하기도 함
- 영역 선택은 "i + w"이 해당한다.
[ dd ] 한줄 삭제
[ S / cc ] 현재 줄 삭제 후 입력 모드
[ D ] 커서 위치부터 줄 끝까지 삭제
[ C ] 커서부터 줄 끝까지 삭제 후 입력 모드
[ J ] 다음 줄을 현재 줄과 병합
그리고 수정을 하다보면 실수가 초반에 굉장히 많이 발생했다. 이 때는 다음 명령어를 잘 활용했다.
[ u ] 마지막 변경 되돌리기
[ U ] 현재 줄 변경 모두 되돌리기
[ ctrl + r ] 되돌리기 취소
(편집)창/ 탭 관리 관련
코드 작업을 하다보면, 편집 창 관련 작업을 많이하게 된다. 한 화면에 여러 편집창을 열어두기도 하고, 하나의 편집창에 여러 탭을 만들기도한다. 이 때 유용한 명령어들은 다음과 같다.
// 분할
[ :vs ] 수평 분할
[ :sp ] 수직 분할
// 탭이동
[ gt ] 오른쪽 탭 이동
[ gT] 왼쪽 탭이동
// 탭 그룹 이동
[ ctrl + ww ]
그런데 창 관련해서는 IDE에서 제공하는 단축키를 사용하는 것이 더 편리했다. 그래도 알아두면 분명 도움이 되곤했다.
그리고 여러 편집창과 그룹을 넘나들 때면 이전 커서 위치로 이동해야할 때가 있다. 이때 다음 커맨드들이 유용했다.
[ ctrl + o(알파벳) ] 이전 커서 위치 이동
[ ctrl + i ] 다음 커서 위치 이동
[ `` ] 직전 커서 이동
[ ` + . ] 마지막으로 삽입 모드를 수정한 위치로 이동
끝내며
나는 아직 VIM 을 100% 활용을 못하고 있는 것 같다고 느낀다. 그렇다고 100% 까지 활용할 수 있는 수준까지 역량을 키우고 싶진 않다. 지금도 나는 굉장히 만족스럽다. 정말 작은 부분에서의 개선이 돌이켜 보면 생각보다 많이 크다는 걸 느낀다.
나는 VIM을 사용하면서 특히 코드 수정에서 편리함을 많이 느끼게 되었다. 자연스럽게 트랙패트(혹은 마우스)를 사용하지 않게되고, 코드 작업을 할 때면, 진짜 특정 영역에 선택(클릭)해야하는 것이 아니라면 키보드로만 조작을 하고 있는데 이게 정말 편하다.(마우스가 불편하다고 생각이 드는걸 보면 말이다.)
근데 최근에는 사용하는 커스텀 단축키를 개인 맥북과 회사 맥북을 동기화 시키는게 귀찮아서, VIM으로 그냥 모든걸 해결할 수 있는 방법을 계속해서 찾아 나가고 있다. 앞으로 계속해서 VIM와 관련하여 편리하거나 좋은 내용이 있다면 업데이트 해야겠다.
'개인공부' 카테고리의 다른 글
스프링에서 환경 설정을 어떻게 구분할까? (0) | 2024.11.15 |
---|---|
Gradle의 apply from을 통해 의존성 관리하기 (0) | 2024.11.13 |
[ SQLAlchemy ] selecteload 와 joinload의 차이는 무엇일까? (1) | 2024.11.12 |
[ Django ] 유저 모델을 설계할 때, User, AbstractBaseUser, AbstractUser 중 어떤 클래스를 사용해야 할까? (0) | 2024.11.10 |
[ Pydantic ] Pydantic을 활용한 Serialization(직렬화)와 Deserialization(역직렬화) (0) | 2024.05.30 |