Vim 으로 개발한다는 것

회사에서 Vim을 일하면서 사용한지 2달 쯤 되가는 것 같다.

아직도 기존에 쓰던 에디터인 Atom을 왔다갔다 하지만 점점 Vim을 사용하는 시간이 더 늘어나 것 같다.

이제는 거의 Vim : Atom = 8 : 2 정도?

아직 허접이지만 그동안 Vim을 사용한 후기 정도를 적어보려한다.

Tmux & Vim 의 조합이란!

Tmuxterminal multiplexer 이다.

터미널에서 session 별로 window를 만들게 해주고 터미널을 종료해도 session 이 유지되기 때문에 작업하기에 많은 도움을 준다.

또한 터미널을 pane으로 분할하여 여러 화면을 쓰게 해주는데 Vim과 서버를 띄워둔 터미널을 같은 화면에 띄워 놓고 작업한다면 생산성이 좋아진다.

테스트 코드를 작성하고 그 자리에서 테스트 코드를 실행할 수 있는 플러그인을 사용해서 쓰는데 정말 좋다.(vimux-nose-test 짱!)

Vim 으로 어디까지 될까…

사실 Vim을 이렇게 까지 써보기 전까지는 .vimrcset=number라던가 syntax=on 정도만 사용해서 Vim은 내게 매우 불편한 에디터 였다.(사실 에디터라고 생각하지도 않았다. 그냥 매우 엄청 되게 많이 불편한 무언가라고만 생각했었다.)

하지만 여러가지 플러그인들을 설치하고 Vim의 단축키들을 손에 익히니 정말 어디까지 되는 것인가 궁금할 정도였다.

지금은 거의 10개 정도의 플러그인을 설치해서 Auto Complete나 snippets 등 여러가지 기능들을 사용하고 있어서 여타 에디터 부럽지 않다.

내 vim이 이렇게 변하다니...

아직 셋팅하고 싶은 것들이 많기도 하고 과연 어떤 기능까지 될까 궁금해서 한때는 vim 플러그인들을 모아둔 사이트인 Vim Awesome을 틈만나면 들어가곤 했다.

얼마전에는 우아한형제들 기술 블로그에서 Vim 플러그인으로 벽돌깨기 게임을 만드신 분을 봤는데 정말 충격적이었다.

속으로 아마 저분은 Vim으로 우주도 창조할 수 있을 것 같다고 생각했다.

작업 환경을 통일하는 매직!

이렇게 터미널 기반으로 작업하다보니 여러가지 설정들만 가져가면 같은 환경에서 작업할 수 있는 이점이 생겼다.

.vimrc.tmux.conf를 관리하는 dotfiles라는 Repo를 만들어서 관리하고 있다.

이렇게 관리하니 다른 PC에서 이 저장소만 불러와서 적용하면 어디서든 내가 사용하던 환경으로 작업할 수 있다.

새로운 PC로 이동한다거나, AWS, Azure 서버에서 단 2 줄 이면 끝!

1
2
$ git clone https://github.com/songyunseop/dotfiles.git .dotfiles
$ cd .dotfiles && ./setting.sh

아직 멀었다.

뭐 이렇게 Vim을 사용하고 있지만 아직까지도 단축키가 궁금해서 구글링을 하고 급하게 작업해야하는 일이라면 Atom을 쓰곤한다.

아직 Vim의 숨겨진(사실 숨겨져 있진 않지만) 기능들을 전부 사용해보려면 멀었고, 그 기능들을 숙련되게 사용할 수 있을 때 생산성에 얼마나 영향을 줄지 상상도 되지 않는다.

하지만 지금 사용하는 만큼만 vim을 사용해도 손이 키보드에만 머무를 수 있게 되고 터미널 밖으로 나가지 않아도 되니 집중이 더 잘 되는 느낌이다.

언젠가는 Vim 없이 개발을 하지 못하는 날이 올지도…(아닐거다)

여담이지만…

내가 사용하고 있는 무선 마우스는 얼마동안 사용하지 않으면 절전모드로 돌아가는데 터미널에서 작업을 하다가 가끔 마우스를 잡았을 때 절전모드로 되어 있을 때는 은근 기분이 좋다.

Vim 을 셋팅해보자

옛날부터 vim을 사용해보고 싶었지만… 넘나 편리하고 강력한 IDE와 에디터들이 많아서 쓰질 못했다.(절대 내탓 아님)
또 내 주변에 vim보다는 IDE나 에디터들을 사용하는 개발자들이 많아서 필요성을 딱히 못느끼고 있었다.

하지만 vim 으로 개발하는 개발자들을 볼때면 항상

아 나도 언젠간…

이런 생각에 잠기곤 했다.

그러던 중 회사에서 vim 으로 개발하는 개발자분과 페어 프로그래밍을 하게 되었는데 vim 써보는 것을 제안했다.

나는 당연히 수락했고 이제 점점 셋팅을 하면서 익숙해져가는 중이다.

해보자

vim은 시작할 때 home directory에 있는 ~/.vimrc에 있는 설정들을 불러와서 적용한다.

회사에서 셋팅한 것과 인터넷을 보고 참고하여 일단은 대충 셋팅했다.

General Setting

.vimrc description
set history=500 편집한 500줄 까지 기억하자!
let mapleader=”,” leader key, 을 사용.
set ruler 오른쪽 하단에 현재 위치를 표시함.
set showmatch 괄호 위에 커서가 올라가면 매치되는 괄호를 표시.
set number 줄 번호를 표시함.
set relativenumber 줄 번호를 상대적으로 표시함.
syntax on 문법 체크를 하자!
color seti color scheme를 seti로 사용

leader key

vim에서 기본적으로 <leader>를 사용하는데 다른 키와 매핑하여 다른 기능을 사용한다.

편의를 위해서 ,로 바꾸자

Color Schema

http://vimcolors.com/ 에서 다양한 color scheme를 확인할 수 있는데 원래 Atom에서 쓰던 seti를 사용했다.

Search Setting

.vimrc description
set ignorecase 찾을 때 대소문자 구별 안함.
set smartcase 똑똑하게 찾는다는데…
set hlsearch 찾은 결과를 highlight
set smartcase 찾을 때 커서를 옮김.

Indent Setting

.vimrc description
set tabstop=4 Tab을 4개 space로
set shiftwidth=4 Indent를 4개 space로
set softtabstop=4 Tab 키를 눌렀을 때 4개 space로
set expandtab 모든 Tab을 space로 설정
set smarttab 똑똑한 Tab?
set ai Auto Indent
set si Smart Indent

Key Mapping

.vimrc description
nnoremap vi :tabe ~/.vimrc ,vi => .vimrc 편집 탭 띄우기
nnoremap src :source ~/.vimrc ,src => Reload .vimrc
map q :q ,q => 종료
map :w F2 => 저장
map :set nu! relativenumber! F3 => Toggle line number
inoremap jk jk => Escape insert mode

Moving tab Setting

.vimrc description
map j Ctrl+j => 아래쪽 탭으로 이동
map k Ctrl+k => 위쪽 탭으로 이동
map h Ctrl+h => 왼쪽 탭으로 이동
map l Ctrl+l => 오른쪽 탭으로 이동

그래서

최종적으로 다음과 같은 .vimrc를 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" General Setting
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" Sets history line
set history=500

" Mapping <leader> => ,
let mapleader=","

" Show current position at bottom-right
set ruler

set lazyredraw

set magic

" Show matching brackets when text indicator is over them
set showmatch

" How many tenths of a second to blink when matching brackets
set mat=2

" Show line number
set number

" Set line number relative
set relativenumber


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Search Setting
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" Ignore case when searching
set ignorecase

" Be smart when searching
set smartcase

" Highlight search last result
set hlsearch

" Move cursor when searching
set incsearch


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Color Setting
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" Syntax Enable
syntax on

" Use color scheme 'seti'
color seti



""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Indent Setting
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" tab == 4 space
set tabstop=4
set shiftwidth=4
set softtabstop=4

" Using tab like 4 space
set expandtab
set smarttab

" Auto Indent
set ai
" Smart Indent
set si


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Key Mapping
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" ,vi => Show edit tab .vimrc
nnoremap <leader>vi :tabe ~/.vimrc<CR>

" ,src => Reload .vimrc
nnoremap <leader>src :source ~/.vimrc<CR>

" ,q => Quit
map <leader>q <ESC><ESC>:q<CR>

" F2 => Save File
"imap <F2> <ESC><ESC>:w<CR>
map <F2> <ESC><ESC>:w<CR>

" F3 => Toggle line number
map <F3> <ESC>:set nu! relativenumber!<CR>

" jk => esc, Escape insert mode
inoremap jk <ESC>


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Moving tab Setting
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×