vscode에서 lazygit 사용하기
포스트
취소

vscode에서 lazygit 사용하기

Intro

요즘 vscode를 설정하는데 푹 빠져있다.
원래 더 자유도가 높고, 마우스도 잘 안쓰는 neovim을 쓰려고 했는데, 컴퓨터가 안좋은 탓인지 몰라도 커맨드를 여러 개 중첩시키면 제대로 동작하지 않는 현상이 벌어진다.
예로 들면, 전체 선택을 하기 위해 커서를 파일 끝으로 옮기고, 선택 모드로 진입 후 첫 라인으로 이동, 그리고 커서를 앞으로 옮기는 커맨드를 만들었는데, 제대로 동작하지 않았다. 아마 딜레이를 주고 어쩌고 하다보면 될 테지만, 한국어 자료도 별로 없는 neovim을 잘 쓸 자신도 없고, 익숙하지 않아서 그런가 생산성도 떨어지는 기분이 들었다.
해서 vscode로 다시 넘어왔다.

그런데 이거 보세요…

vscode-git

이게 2023년도에 git을 지원하는 에디터 맞습니까? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
물론 여러가지 확장을 쓰게 되면, 진짜 좋아지긴 하지만 단 한가지 커밋 작성에 대해서는 정말 꽝이다.
이래저래 찾아봐도 뭐가 없었고, 내심 인텔리제이에서 사용하는 코드 단위 커밋은 정말 써보고 싶은데 유료라서 사용할 엄두가 안 난다.
그래도 뭐 깃을 쓸 때는 소스트리나 lazygit을 쓰면 되니깐 문제가 없는데, 이걸 켜고 끄는 것 마저 귀찮아지기 시작했다.
그래서 몇날을 고민한 끝에 ‘아 내가 그냥 vscode 확장을 만들어야겠다.’ 생각했다.

고민

먼저, 소스트리는 자체 실행 파일이기 때문에 제외를 했고, ‘lazygit을 어떻게 하면 vscode에서 바로 실행되게 할 수 있을까?’를 고민했다.
내가 원하는 것은 vscode는 하단에 자체 터미널 탭을 가지고 있기 때문에 이걸 최대화 시킨 후, lazygit 명령어를 실행시키는 것이다.
근데 중요한 점은 내가 extension을 한 번도 만들어 본 적이 없어서 이걸 만드는데 얼마나 걸릴지 알 수가 없다는 것이다.

그래서 뭐 여차저차 구글 검색을 때려본 결과 이미 나와 같은 생각을 하고 있는 사람을 찾았다.
해당 블로그 글은 vscode task를 만들어서 lazygit을 띄우는 명령어를 만드는 것인데,,,
여기서 문제는 저 명령어를 실행시키면 터미널에 포커스를 두는 것과 터미널 창을 최대화 시키는 것은 또 따로 해야하는 것이다.
나는 하나의 단축키로 터미널 포커스, 최대화, lazygit 실행을 하고 싶은데 말이지… 그러다가 우연히 진짜 대박인 확장을 찾았다.
간략하게 설명하자면 커맨드 여러 개를 한 루틴에 묶을 수 있는 확장인데, 내가 딱 원하던 거다!

해결

와 이 확장을 찾은건 정말 천운이나 다름없다.
이게 진짜 대박인게 이걸 잘만 사용하면 vscode를 vim처럼 사용할 수 있다.
일단 추후에 그렇게 만들도록하고, 내가 지금 원하는 걸 해야지.

해당 확장으로 다중 커맨드를 사용하는 법은 간단하다.
먼저 settings.json에 사용할 커맨드를 등록하고, keybindings.json에서 바인딩만 해주면 끝이다.

코드로 보면 아래와 같다.

settings.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
  "multiCommand.commands": [
    {
      "command": "startLazygit",
      "sequence": [
        "workbench.action.toggleMaximizedPanel",
        "terminal.focus",
        {
          "command": "workbench.action.terminal.sendSequence",
          "args": { "text": "lazygit\n", "delay": 100 }
        }
      ]
    }
  ]
]

keybindings.json

1
2
3
4
5
6
7
8
9
[
  {
    "key": "cmd+ctrl+l",
    "command": "extension.multiCommand.execute",
    "args": {
        "command": "startLazygit" 
    },
  }
]

먼저 settings.json에 사용할 command를 등록해주고, sequence에 내가 원하는 vscode command를 순차적으로 작성해주고, keybindings.json에서 저렇게 등록해주기만 하면 잘 실행된다.

여기서 주의할 점은 기존 바인딩 할 때 커맨드를 커스텀한 커맨드로 작성하는게 아니고, 기존 커맨드는 extension.multiCommand.execute를 넣어주고, 인자로 커스텀 커맨드를 넣어주는 것이다.

나는 cmd+ctrl+l에 매핑했고, 실행하고 나서 지렸다.

before

실행 하기 전에 이 화면이었다면, 실행하게 되면…

after

Awesome

미쳐버리겠다. 내 일주일 동안의 고민을 한 번에 해결해주신 개발자 ryuta46님 정말 감사드립니다!!!

후기

아직 저 커맨드는 엉뚱한 작동을 할 가능성이 높다. 그럼에도 너무 흥분한 나머지 이 확장을 전파하고자 해당 게시글을 작성했다.
엉뚱한 작동은 현재 터미널이 다른 디렉토리에 있어도 현재 워크 스페이스가 아닌 다른 위치에서 lazygit이 실행 될 것이다.

뭐, 그 정도는 다른 터미널 세션을 띄우는 작업을 넣는다던지, 현재 위치로 가도록 하는 커맨드를 넣는다던지 해서 쉽게 해결할 수 있으니깐…
이 확장을 잘만 사용하면 여러 커맨드를 잘 중첩시켜 진짜 대박인 커맨드를 만들어낼 수 있겠다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.