본문 바로가기
Tools

유용한 Vim Plugins

by Calvin H. 2022. 6. 1.

소개

개발을 할 때 보통 Vim 과 Tmux 의 조합을 사용하는 입장에서 몇가지 사용하면 유용할 수 있는 플러그인을 소개하고자 합니다. 일단 Vim 플러그인을 설치하는 방식은 여러 가지가 존재하는데 기본 설치 방식이 아닌 Vundle 이라는 플러그인 매니저를 사용합니다. 

 

https://github.com/VundleVim/Vundle.vim

 

GitHub - VundleVim/Vundle.vim: Vundle, the plug-in manager for Vim

Vundle, the plug-in manager for Vim. Contribute to VundleVim/Vundle.vim development by creating an account on GitHub.

github.com

 

'Vim' 과 'Bundle' 의 합성어로 Vundle 은 쉽게 말해서 Vim 플러그인 설치와 관리를 매우 편리하게 해줍니다. 설치도 매우 쉽고 빠릅니다. 

 

Vundle 설치

'git' 명령어를 사용하던지 레포지토리에서 직접 다운받아 `~/.vim/bundle/Vundle.vim` 경로로 옮기던지 크게 상관은 없스빈다.

1. `git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim`

2. `.vimrc` 파일 (혹은 사용하고 있는 Vim 설정 파일) 에서 다음과 같이 플러그인을 설치할 수 있습니다

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

 

- 보면 `set rtp+=~/.vim/bundle/Vundle.vim` 이 레포가 다운된 경로를 가리킵니다

- `call vundle#begin()` 과 `call vundle#end()` 을 통해서 Vundle 을 통한 패키지 설치 경로들을 명시하고 그 사이에 플러그인 경로들을 넣어주면 됩니다.

 


사용중인 플러그인

먼저 제가 사용중인 플러그인은 다음과 같습니다 (글에 링크가 없다면 플러그인 이름을 깃허브에서 쳐보시면 찾으실 수 있습니다)

Plugin 'sickill/vim-pasta'
Plugin 'VundleVim/Vundle.vim'
Plugin 'neoclide/coc.nvim', {'do': { -> coc#util#install()}}
Plugin 'vim-scripts/indentpython.vim'
Plugin 'preservim/nerdcommenter'
Plugin 'preservim/nerdtree'
Plugin 'morhetz/gruvbox'
Plugin 'vim-airline/vim-airline'
Plugin 'mbbill/undotree'
Plugin 'tpope/vim-fugitive'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'machakann/vim-highlightedyank'
Plugin 'mattn/emmet-vim'
Plugin 'tpope/vim-obsession'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'prettier/vim-prettier', {
            \ 'do': 'yarn install',
            \ 'for': ['javascript', 'css', 'html', 'json']
            \ }
Plugin 'tpope/vim-surround'
Plugin 'adelarsq/vim-matchit'
Plugin 'sillybun/vim-repl'
Plugin 'junegunn/fzf', { 'do': { -> fzf#install() } }

 

좀 많아 보이지만 정리 안한 부분도 있고 하나 둘 씩 추가하다 보니 이렇게 많아지네요.

 

gruvbox

몇 년동안 지속적으로 한번도 바꾸지 않은 플러그인 중 하나입니다. gruvbox 는 Vim 의 모양새를 바꿔주는 테마 플러그인입니다. 좀 어두운 색과 그에 어울리는 syntax highlighting 은 정말 질리지가 않습니다.

 

예시로 보여드리자면 

gruvbox dark theme

 

물론 어두운 테마를 선호하지 않는다면 밝은 색이 있긴 합니다...

(참고로 위 Vim 은 Vim 에서 자체 제공하는 기능으로 화면 분할해서 사용중입니다)

 

https://github.com/morhetz/gruvbox

 

GitHub - morhetz/gruvbox: Retro groove color scheme for Vim

Retro groove color scheme for Vim. Contribute to morhetz/gruvbox development by creating an account on GitHub.

github.com

 

nerdtree

Vim 을 사용하면 불편한 점 중 하나는 디렉토리나 파일을 쉽게 볼 수 없거나 접근하기 위해서는 어떻게 해야 할 지 잘 모른다는 점입니다. 저도 처음에 매번 나갔다 들어오거나 별도로 파일 탐색기를 실행해서 작업했었습니다. 그런데 이렇게 작업을 하게 되면 불편함은 둘 째치고 파일 동기화나 Vim 설정에 따라 에러가 종종 발생하기도 했습니다.

 

현재는 Vim 에서 나가지 않고 단순하게 '스페이스바 + p  + v' 조합으로 nerdtree 를 열어 사용중에 있어서 더 편해졌습니다.

 

위 조합으로 다음과 같은 화면이 열립니다 (왼쪽 사이드바 메뉴)

 

 

한가지 알면 좋은 부분은 해당 플러그인을 처음 제작하고 관리해온 분들이 다음 maintainer 들을 찾고 있는 중입니다. 그 이유는 https://github.com/preservim/nerdtree/issues/1280 에서도 명시되어 있는 것처럼 시간이 지난 지금 비슷하고 더 많은 기능을 제공하는 플러그인들이 나타나기 시작했고 Vim 이 버전 8로 들어서고 Nvim 도 새로운 기능들을 제시하면서 해당 플러그인의 타당성을 찾기 힘들다는 부분입니다.

 

혹시 글을 읽으시다가 관심 있으시면 저도 개인적으로 부탁드리겠습니다...

 

https://github.com/preservim/nerdtree

 

GitHub - preservim/nerdtree: A tree explorer plugin for vim.

A tree explorer plugin for vim. Contribute to preservim/nerdtree development by creating an account on GitHub.

github.com

 

vim-fugitive

코드를 작성하면 보통 깃을 사용합니다. 그렇다면 Vim 에서는 어떻게 깃 레포지토리와 연결을 할 수 있을까요? Vim fugitive 를 사용하시면 편리하게 commit, push, pull 등 다양한 기능을 Vim 을 종료하지 않고 실행할 수 있습니다.

 

저 같은 경우에는 '스페이스바 + g + s' 의 조합으로 해당 플러그인을 사용합니다.

 

 

위 그림에서 볼 수 있는 것처럼 (아래 분할 화면) 추적되지 않은 파일들, 혹은 스테이징 필요한 파일 등을 확인하고 'u' 나 's' 단축키로 쉽게 추가하거나 제외할 수 있습니다. 그리고 준비되면 `:Git commit -m 'commit message'` 로 커밋을 하거나 `Git push origin main` 처럼 푸쉬도 할 수 있습니다.

 

혹은 파일의 변경사항을 확인하려면 `:Git diff` 를 통해서 확인할 수도 있고 `:Git blame` 도 Vim 버퍼 내에서 실행 가능합니다.

 

자주 사용하는 명령어들은 Vim 설정 파일에서 별도로 설정해서 사용하면 훨씬 편해집니다.

 

https://github.com/tpope/vim-fugitive

 

GitHub - tpope/vim-fugitive: fugitive.vim: A Git wrapper so awesome, it should be illegal

fugitive.vim: A Git wrapper so awesome, it should be illegal - GitHub - tpope/vim-fugitive: fugitive.vim: A Git wrapper so awesome, it should be illegal

github.com

 

coc.nvim

지금까지 소개한 플러그인은 도움은 되지만 Vim 에서 실질적인 개발에 크게 도움은 되지 않습니다. 물론 편리성은 높아지겠지만요.

 

Vim 생태계에서는 개발에 사용할 수 있는 몇가지 유명한 플러그인들이 있습니다. ALE 과 CoC 입니다. 물론 이 두 개의 전통적으로 큰 플러그인 외에도 몇가지 더 있고 원한다면 kite 등 다른 제품과 Vim 연동도 할 수 있습니다만 사실 크게 봐서는 이 두 개를 많이 사용합니다.

 

CoC, Conquerer of Completion 은 코드 자동완성부터 시작해 개발 언어에 최적화된 커스텀화 기능, 함수 정의 보기 등 다양한 기능을 제공합니다.

 

다음은 깃헙 레포지토리에 있는 작동 예시입니다.

 

보시면 Vim 에서 개발이 얼마나 쉬워지는지 알 수 있는 부분입니다. 물론 자동완성과 타입 정의 등 여러가지 기능을 제공하지만 해당 플러그인이 인기가 많은 이유 중 하나는 language server 로 언어별 기능을 연계한다는 점입니다. 따라서 특정 서버를 사용하거나 커스텀 서버를 새로 생성해서 사용할 수 있어서 다양한 가능성과 자유를 줍니다.

 

Language Server 목록 https://github.com/neoclide/coc.nvim/wiki/Language-servers

 

GitHub - neoclide/coc.nvim: Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.

Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers. - GitHub - neoclide/coc.nvim: Nodejs extension host for vim & neovim, load extensions like VSC...

github.com

 

또한 수많은 사람들이 사용하고 있기 때문에 당분간 관리나 업데이트를 걱정할 필요가 없습니다.

 

설치에서 팁을 드리자면 CoC 는 node 를 뒤에서 사용하는데 이 때 Vundle 로 사용할 경우 `:PluginInstall` 을 한 뒤에 해당 플러그인 디렉토리로 가서 `yarn install` 을 추가로 해줘야 합니다.

 

Node 를 처음 사용하시는 분들은 NVM (Node Version Manager) [https://github.com/nvm-sh/nvm] 을 설치하시고 `latest` 나 `lts` 버전을 기본으로 설정한 뒤에 yarn [https://yarnpkg.com/]을 global 설치해서 사용하는 것을 추천드립니다.

 

참고로 파이썬을 사용하시는 분들은 `:CocInstall pyright` 을 해주시면 권장하는 파이썬 language server 를 사용하실 수 있습니다.

 

https://github.com/neoclide/coc.nvim

 

GitHub - neoclide/coc.nvim: Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.

Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers. - GitHub - neoclide/coc.nvim: Nodejs extension host for vim & neovim, load extensions like VSC...

github.com

 

 

마치며

소개해드리고 싶은 플러그인들은 많지만 아마도 제일 핵심을 본다면 위 4개 정도가 되지 않을까 싶습니다. 물론 Vim 에서 복사/붙여넣기를 쉽게 해주는 플러그인이나 버퍼의 되돌리기 기록을 볼 수 있는 플러그인 등 여러 가지가 더 있으면 더 섬세하겠지만 아마도 처음 접하시는 분들은 위 4 개만 설치하셔도 충분히 개발이 가능하다 생각합니다.

'Tools' 카테고리의 다른 글

라즈베리파이 4 과 파이썬, Firefox, Selenium - CLI  (2) 2023.11.17
k3s 라즈베리파이 클러스터 ArgoCD 설치  (0) 2023.10.12
Intro to Scrapy  (0) 2022.06.01
iTerm과의 고군분투쓰  (0) 2022.05.31
Atom text-editor  (0) 2022.05.30