Vim plugins

Bob Hwang
7 min readMar 1, 2023

--

사용하는 플러그인을 정리했다.

플러그인 목록

vim-fugitive

Git 명령을 사용한다.

nerdtree

텍스트 파일관리자다. :NERDTree명령으로 시작하고 ? 키를 눌러서 사용법을 보고 q 키로 종료한다.

nerdcommenter

파일 종류에 맞추어 주석을 만들고 제거한다. 주석 마크 다음에 한 칸 띄우는 아래 설정은 꼭 필요하다.

  let g:NERDSpaceDelims = 1

vim-easymotion

커서를 쉽게 이동한다.

vim-lightline

상태 라인을 보기 좋게 꾸며준다. 아래처럼 INSERT 가 중복 표시됨으로

중복된 INSERT 메시지

아래 설정으로 Vim 내장 메시지를 감춘다.

set noshowmode

surround

짝을 지어 문자열 앞뒤로 문자를 추가하고 변경한다.

"a|pple" → cs"' → 'a|pple'

ctrlp.vim

파일 목록에서 파일을 선택한다.

vim-intent-object

vii 같은 명령으로 들여 쓰기 위치가 같은 문자열들을 블록으로 지정한다.

vim-visual-multi

여러 커서를 만들어 동시에 수정한다.

emmet-vim

HTML, CSS 코드를 빠르게 입력한다.

SirVer/ultisnips

짧은 문자열로 코드 조각을 입력할 수 있다. 확장 트리거 기본값인 <tab> 대신 <c-j>를 사용하려면 아래 설정을 사용한다.

let g:UltiSnipsExpandTrigger="<C-j>"

chrisbra/matchit

Vim의 % 키 기능을 확장한다. if, else, endif 같은 단어를 짝지어 이동한다.

chrisbra/NrrwRgn

블록을 선택한 후 :NR 명령으로 별도의 윈도에서 편집한다.

MultipleSearch

검색 패턴으로 문자열에 색을 입힌다. 코드 분석할 때나 설명할 때 편하다.

auto-pairs

[ → [] 이렇게 짝지어진 문자를 자동으로 입력한다.

VisIncr

세로 블록으로 감싸진 숫자, 문자, 요일 등을 증가하거나 줄인다.

speeddating

숫자를 증감하는 Vim의 <C-A>, <C-X> 기능을 확장한다.

repeat.vim

surround, speeddating 플러그인을 위하여 vim의 . (dot) 기능을 확장한다.

vim-tmux-navigator

tmux와 vim 같이 사용할 때 tmux panel과 vim window 구분 없이 이동한다.

indentLine

동일한 들여쓰기 위치에 세로 선을 보여준다.

csv.vim

CSV 파일을 편집한다.

vim-signify

git 수정 상태를 vim 신호 칼럼에 표시한다. 다른 VSC도 지원한다.

tabular

특정 문자 중심으로 정렬한다.

vim-lion

특정 문자 중심으로 정렬한다.

vim-argwrap

함수 인자, 배열, 객체 나열을 한 줄 혹은 여러 줄로 전환한다.

vim-slime

vim의 문자열을 tmux를 포함한 여러 터미널로 전달한다. 그 문자열을 터미널에서 수행한다.

ctrlsf.vim

여러 파일에서 문자열을 검색하고 동시에 수정한다.

vim-diminactive

커서가 없는 윈도 배경을 흐릿하게 한다.

vim-buffergator

버퍼를 목록으로 보여주고 이동한다.

vim-vertical-move

새로 블록 설정 시 빈 라인전에 멈춘다.

DrowIt

텍스트 박스, 원, 화살표를 그린다.

betterga

Vim의 ga 명령을 확장한다.

unicode.vim

유니코드를 검색하고 사용한다.

vim-rest-console

Vim을 REST 테스트를 위한 콘솔로 사용한다.

vim-dirdiff

두 폴더를 비교한다.

ferret

여러 파일을 검색하고 동시에 문자열을 변경한다.

sideways.vim

함수 인자, 배열, 객체의 각 항목의 위치를 좌우로 옮긴다. HTML 속성, CSS 속성도 좌우로 옮긴다.

vim-windowswap

버퍼 위치는 그대로 두고 내용만 변경한다.

vim-tmux

.tmux.conf 파일에 syntax highlighting을 제공하고 K 명령으로 tmux man 페이지를 보여준다.

trailertrash.vim

문자열 뒤에 공백을 지운다.

vim-javascript

Javascript 구문 파일이다. 일부 키워드를 지정한 심벌로 보여준다.

typescript-vim

Typescript 구문 파일이다.

vim-jsx-pretty

JSX 구문 파일이다.

vim-startify

최근 읽었던 파일 목록을 보고 이동할 수 있다. 설정하면 북마크 목록이나 세션 목록도 볼 수 있다.

coc.nvim

Vim을 vscode처럼 사용하도록 도와준다. 제안 목록을 <enter>로 선택하기 위해 아래 설정을 사용한다.

inoremap <expr> <cr> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"

vim-bookmarks

이름을 붙여 파일 위치를 등록할 수 있고 목록을 선택하여 이동한다. 마크된 라인의 색상을 변경할 수 있다. 아래처럼 ma, mi 이런 식으로 키가 지정되어 있어서 Vim의 소문자 마크와 중복됨으로 키 재설정이 필요할 수 있다.

n  mg            <Plug>BookmarkMoveToLine
n mjj <Plug>BookmarkMoveDown
n mkk <Plug>BookmarkMoveUp
n mx <Plug>BookmarkClearAll
n mc <Plug>BookmarkClear
n mp <Plug>BookmarkPrev
n mn <Plug>BookmarkNext
n mi <Plug>BookmarkAnnotate
n mm <Plug>BookmarkToggle
n ma <Plug>BookmarkShowAll

vim-floaterm

Vim안에서 터미널을 팝업을 띄운다.

vifm.vim

Vifm을 호출한다.

플러그인 설치

플러그인 매니저를 사용하지 않고 Vim 8+ pacakges 기능을 사용하여 플러그인을 설치한다. 지정된 경로에 플러그인을 복사하는 방법이다. 아래 스크립트를 사용하여 한꺼번에 설치한다. 업데이트가 필요할 땐 ~/.vim/pack 폴더를 삭제하고 다시 스크립트를 수행하여 설치한다.

Vim 컴파일

우분투에서 apt로 vim을 설치했는데 clipboard 기능이 빠져있어서 https://www.vim.org/의 설명을 참조하여 vim을 컴파일했다.

git clone https://github.com/vim/vim.git
cd vim/src
make

git, make, gcc가 없다면 설치한다.

sudo apt install git make gcc build-essential

컴파일된 vim을 설치한다.

make install

Vim 버전과 기능 목록을 확인하고

/usr/local/bin/vim --version
vim --version | head -2
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Feb 10 2023 23:51:38)
Included patches: 1-1151

여러 vim이 설치되어 있다면 방금 설치한 버전에 별명을 붙인다.

alias vim='/usr/local/bin/vim'

.vimrc 설정파일이 필요하다. 아래 코드를 사용하여 다른 vimrc 파일을 같이 사용해도 좋다.

" ~/.vimrc
if filereadable(expand("~/.vim/other.vimrc"))
source ~/.vim/other.vimrc
endif

만약에 ultisnips 사용중에 아래 에러가 난다면 Vim에 파이썬 기능을 추가한다.

E319: Sorry, the command is not available in this version: py3 UltiSnips_Manager._track_change()

vim/src/Makefile 파일에서 아래 코드의 주석을 해제하고

CONF_OPT_PYTHON3 = --enable-python3interp=dynamic

파이썬 설치되었나 확인하고

python -V
Python 3.10.0

다시 컴파일한다.

make clean distclean
make

--

--

No responses yet