2021년 2월 27일 토요일

vscode + vim plugin

* vscode vim plugin 설치
sidebar > extensions > vim > install

* 클립보드 사용
설정 > Vim: Use System Clipboard 입력 > 해당 항목 체크
x, y, p (이름 없는 레지스터)가 클립보드와 연동된다.

* 자동완성 끄기
설정 > Editor: Auto Closing Quotes 입력 > 해당 항목 에서 never 선택
설정 > Editor: Auto Closing Brackets 입력 > 해당 항목 에서 never 선택

* vim 모드 토글
ctrl + shift + p > vim toggle 입력 > tab > enter

아직 많이 안써봐서 이 동작을 얼마나 자주하게 될지는 모르겠지만
해보니 상당히 귀찮다. 다음과 같이 키바인딩 설정

* 키바인딩 추가
ctrl + shift + t 를 vim 모드 토글로 설정
ctrl + k s > Vim: Toogle Vim Mode 입력 > 마우스를 올렸을 때 왼쪽에 나타나는 + 클릭
ctrl + shift + t > enter

디폴트로 View: Reopen Closed Editor 가 같은 키를 사용하고 있음.
중복이지만 조건이 같을 때 사용자 바인딩이 우선하는지 vim 모드 토글로 잘 동작함.
혹시 문제가 생긴다면 다음과 같이 기존 바인딩을 지울 수 있음.

* 키바인딩 삭제
ctrl + k s > ctrl+shift+t (빈칸 없이) 입력 > View: Reopen Closed Editor 선택 > delete

* 기본 키바인딩 (vim 모드에서도 동작)
동작
ctrl + tab탭 이동
alt + shift + f문서 포멧
ctrl + shift + drun
ctrl + shift + eexplorer
ctrl + shift + gsource control
ctrl + shift + pprompt
ctrl + `터미널 토글
ctrl + ,설정

* 기본 키바인딩 (vim 모드 끄고 동작)
동작
ctrl + k s키보드 단축키
ctrl + b 사이드바 토글

# 링크가 자동으로 생성되고 ctrl + ], ctrl + t 를 그대로 쓸 수 있어 좋다.

* vim 에서 사용하지 않는 키바인딩 해제
vim 에서 ctrl + k 를 사용하지 않도록 설정하면 ctrl + k 로 시작되는 vscode 의 키바인딩을 vim 모드에서도 사용할 수 있음.
예) Markdown: Open Preview to the side (ctrl + k, v),
Format Selection (ctrl + k f) 등

설정 > Vim: Handle Keys 입력 > Edit in settings.json 클릭 > 마지막의 settings.json 예제와 같이 원하는 키(<C-k>)에 false 값을 설정

* alt 이용
ctrl + b 의 경우 vscode 의 '사이드바 토글'과 vim 의 '앞 페이지로 이동' 이 충돌.
마우스 스크롤, page up 등을 좋아하지 않아 vim 의 기능을 포기할 수 없음.
vim 모드 중에도 alt 를 누르면 메뉴로 포커스가 옮겨져 ctrl + b 가 '사이드바 토글'로 동작함. 

vim 만으로 작업할 수 있는 환경에서는 vim 을 쓰겠지만 그게 아닌 경우는
vscode + vim plugin 도 꽤 매력적이다.
vscode 와 vim 의 좋은 점만 골라 쓰기 위해서는 키바인딩을 어떻게 하느냐가
제일 중요한 것 같다. 

# settings.json
{
    "editor.autoClosingBrackets": "never",
    "editor.autoClosingQuotes": "never",
    "editor.fontFamily": "'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace",
    "editor.fontSize": 16
    "editor.linkedEditing": true,
    "html.autoClosingTags": false,
    "python.formatting.autopep8Args": ["--max-line-length", "120"],   
    "vim.useSystemClipboard": true,
    "vim.handleKeys": { 
        "<C-k>": false
    },
    "editor.fontSize": 16,
    "editor.minimap.enabled": false
}
# keybindings.json
[
    {
        "key": "ctrl+shift+t",
        "command": "toggleVim"
    }
]
# %%  jupyter-like code cell