Vim

1. CheatSheet

1.1. File

Dark
Blue
HighDPI


2. Neovim 설치

2.1. Linux

Neovim 최신 안정 버전 설치

sudo add-apt-repository ppa:neovim-ppa/stable
sudo apt-get update
sudo apt-get install neovim

vi를 neovim으로 대체

sudo update-alternatives --install /usr/bin/vi vi /usr/bin/nvim 60
sudo update-alternatives --config vi 
sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60 
sudo update-alternatives --config vim 
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/nvim 60
sudo update-alternatives --config editor

Neovim의 설정 파일은 ~/.config/nvim/init.vim에 위치한다. init.vim
init.vim에서 vim-plug을 사용할 것이므로 vim-plug을 설치한다.

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

nvim-tree에서 icon을 표기하기 위해서 patched-font를 설치한다.

nvim에서 다양한 Plugin을 사용하기 위해서 package를 설치한다.

sudo npm i -g pyright
sudo npm i -g vscode-langservers-extracted
sudo npm i -g markdownlint --save-dev
sudo npm i -g markdownlint-cli
conda install -c conda-forge pynvim
pip install cmake-language-server
sudo apt install clang
sudo apt install clang-format

vim-vsnip Python snippets를 ~/.vsnip/에 복사한다. python.json

clang-format을 사용하기 위해서 Project folder에 clang-format 설정파일를 .clang-format파일로 저장한다(버전 12이상 지원).

gnome-terminal에는 ctrl+shift 키가 정상 동작하지 않으므로 Autokey를 설치하고 아래와 같이 Ctrl+Shift+f와 Ctrl+Shift+p를 remapping 한다.

keyboard.send_keys("<shift>+<home>f")


2.2. Window

https://github.com/neovim/neovim/releases 에서 실행 파일 다운로드

Neovim의 설정 파일은 ~/AppData/local/nvim/init.vim에 위치한다. init.vim ginit.vim
init.vim에서 vim-plug을 사용할 것이므로 vim-plug을 설치한다.

iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
    ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force

nvim-tree에서 icon을 표기하기 위해서 patched-font를 설치한다.

nvim에서 다양한 Plugin을 사용하기 위해서 package를 설치한다.

npm i -g pyright
npm i -g vscode-langservers-extracted
npm i -g markdownlint --save-dev
npm i -g markdownlint-cli
conda install -c conda-forge pynvim
pip install cmake-language-server

vim-vsnip Python snippets를 ~/.vsnip/에 복사한다. python.json

Nvim의 argument로 받은 파일 혹은 폴더로 PWD를 변경하는 Script는 다음과 같다.

@echo off
call c:\Users\ok974\Anaconda3\scripts\activate
set MPLCURSORS={"multiple": 1}
IF "%1"=="" (
    d:
    cd \codepy
    nvim-qt
) ELSE (
    IF exist %1\ (
    cd /D %1
    nvim-qt
    ) ELSE (
	cd /D %~dp1
    nvim-qt %*
  )
)

아래 Registry를 이용하여 Context menu에 nvim을 등록한다.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Neovim]
@="Edit with Neovim"
"Icon"="C:\\PCsetup\\nvim\\Neovim\\bin\\nvim-qt.exe"

[HKEY_CLASSES_ROOT\*\shell\Neovim\command]
@="\"C:\\PCsetup\\nvim\\helper\\nvim_anaconda.exe\" \"%1\""

[HKEY_CLASSES_ROOT\Directory\shell\Neovim]
@="Edit with Neovim"
"Icon"="C:\\PCsetup\\nvim\\Neovim\\bin\\nvim-qt.exe"

[HKEY_CLASSES_ROOT\Directory\shell\Neovim\command]
@="\"C:\\PCsetup\\nvim\\helper\\nvim_anaconda.exe\" \"%1\""


3. vim을 위한 ipython 설정

Vim을 위한 ipython 설정을 위해서 profile을 생성한다.

ipython profile create vim
vi ~/.ipython/profile_vim/ipython_config.py

~/.ipython/profile_vim/ipython_config.py에 아래 명령어 추가

c.InteractiveShellApp.exec_lines = ['%autoreload 2', 'import matplotlib.pyplot as plt;plt.ion()']
c.InteractiveShellApp.extensions = ['autoreload']


4. ESC 입력시 자동 영어 변환 (VScode)

Vim에서 한글 입력 후에 ESC를 눌려 Normal 모드로 진입하면 어떤 명령어도 동작되지 않는 문제가 발생한다. 명령어가 영어가 아닌 한글로 입력되면서 벌어지는 문제인데 VScode의 Vim Plugin은 이 문제를 해결하기 위한 방안을 제공한다.


4.1. Windows

설정 -> 언어 -> 영어(미국) 추가한다.
https://github.com/daipeihust/im-select 에서 im-select 를 다운 받는다.
Vscode의 환경설정에 다음 내용을 추가한다.

"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "1033",
"vim.autoSwitchInputMethod.obtainIMCmd": "D:\\bin\\im-select.exe",
"vim.autoSwitchInputMethod.switchIMCmd": "D:\\bin\\im-select.exe {im}"


4.2. Ubuntu

fcitx 사용자일 경우 Vscode 환경설정에 다음 내용을 추가한다.

"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "fcitx-keyboard-kr-kr104",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/fcitx-remote",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/fcitx-remote -s {im}",


5. Capslock -> ESC

5.1. Windows

AutoHotKey를 설치하고 ahk 확장자 파일을 만들어 아래 내용을 추가하거나 Registry를 변경한다.

  • AutoHotKey Script
Capslock::Esc
Esc::Capslock
  • Registry
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01,00,3a,00,00,00,00,00


5.2. Mint

  • 설정 -> 키보드 -> 배치 -> 옵션 -> Capslock 동작 변경
  • 위의 방안이 동작 안할 시 .xsession 혹은 .xinirc 혹은 .bashrc에 아래 내용 추가
setxkbmap -option caps:swapescape
  • vscode 환경 설정에 아래 내용 추가
"keyboard.dispatch": "keyCode"


6. IdeaVim 설정

pycharm에서 ideavim을 이용하여 vim 모드를 사용할수 있다. 현재 ideavim의 설정 파일인 .ideavimrc는 아래와 같다.

" ----- Options -----
set hls     "hlsearch
set ic      "ignorecase
set is      "incsearch
set scs     "smartcase
set nu      "line number
set rnu     "line relativenumber

" ----- Plugins -----
set commentary
set highlightedyank
set NERDTree
set easymotion

" ----- KeyMap -----
let mapleader=" "
:map <leader>f <Action>(ReformatCode)
:map <leader>d <Action>(Debug)
:map <leader>b <Action>(ToggleLineBreakpoint)
map <leader>e :NERDTree<CR>