Python, SaltStack 편집을 위한 vim 세팅
서버를 다루다보면 Python, SaltStack 을 작성해야 하는데 이를 위해서 윈도우즈로 다운로드 받아서 편집기를 열어서 하기가 영 귀찮습니다. 터미널을 이용해기 때문에 vim 를 이용하면 아주 편한데, 이 문서는 Python, SaltStack 편집을 위한 vim 세팅 위한 것입니다.
환경
환경이 중요합니다. 이 문서의 환경은 다음과 같습니다.
- OS Distro: Ubuntu 16.04
- vim version: 7.4
- Python Virtualenv: /home/systemv 계정에 Python 가상환경을 만들었으며 여기에 각종 Python 라이브러리가 설치되어 있다.
Vundle 플러그인 설치
Vundle 은 vim 플러그인 입니다. 이 플러그인은 vim 의 각종 플러그인을 아주 편하게 설치 및 관리를 해주는 플러그인 매니저 입니다.
다음과 같이 설치 해줍니다.
1 2 3 4 5 6 7 |
(saltenv) systemv@wlserv1:~/.vim/bundle$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim Cloning into '/home/systemv/.vim/bundle/Vundle.vim'... remote: Counting objects: 3128, done. remote: Total 3128 (delta 0), reused 0 (delta 0), pack-reused 3128 Receiving objects: 100% (3128/3128), 931.68 KiB | 638.00 KiB/s, done. Resolving deltas: 100% (1101/1101), done. Checking connectivity... done. |
git 를 이용해서 Vundle 플러그인 매니저 파일을 vim 디렉토리에 다운로드 받습니다.
.vimrc 파일 작성
이제 vim 의 환경설정 파일을 다음과 같이 작성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
syntax on set nocompatible set hls set scs set visualbell set ignorecase set showmatch filetype off set fileencodings=utf-8 set termencoding=utf-8 set encoding=utf-8 set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'gmarik/Vundle.vim' call vundle#end() filetype plugin indent on " required! |
위와같이 작성한 후에 vim 을 실행해 명령어 모드에서 다음과 같이 입력해줍니다.
1 2 |
# vim 을 열어서 commmand mod 에서 :PluginInstall |
Neosnippet 설치.
이 플러그인은 코드 스냅피를 지원해줍니다. vim 설정 파일에서 Vundle 블럭 사이에 다음을 추가해줍니다.
1 2 3 |
Plugin 'Shougo/neocomplete' Plugin 'Shougo/neosnippet' Plugin 'Shougo/neosnippet-snippets' |
시스템 버퍼에 있는 키워드를 완성해 줍니다.
jedi-vim 설치.
awesome Python autocompletion with VIM
Python 을 위한 자동완성 플러그인 입니다. 이는 jedi 라는 파이썬 라이브리를 설치해줘야 합니다. Python 은 가상환경을 사용하기 때문에 가상환경를 이용해서 설치해줍니다.
1 2 3 4 5 6 |
(saltenv) systemv@wlserv1:~$ pip install jedi Collecting jedi Downloading jedi-0.10.2-py2.py3-none-any.whl (190kB) 100% |████████████████████████████████| 194kB 1.4MB/s Installing collected packages: jedi Successfully installed jedi-0.10.2 |
이제 jedi-vim 를 설치해줍니다. 역시 Vundle 를 이용해서 설치 합니다.
1 |
Bundle 'davidhalter/jedi-vim' |
Powerline status bar
vim 를 사용하면서 각종 필요한 정보를 화면 아래에 상태바로 보여 줍니다.
1 |
Bundle 'https://github.com/Lokaltog/vim-powerline.git' |
다음과 같이 vim 설정을 해줍니다.
1 2 3 4 5 |
" powerline language en_US.UTF-8 let g:Powerline_symbols = 'fancy' "set guifont=DejaVu\ Sans\ Mono\ for\ Powerline\ 9 set laststatus=2 |
Python 문법 체크
이제 Python 문법 체크를 위해서는 먼저 파이썬 문법체크 라이브러리를 설치해 줍니다. 역시 가상환경에서 설치 해줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
(saltenv) systemv@wlserv1:~$ pip install pep8 pyflakes Collecting pep8 Downloading pep8-1.7.0-py2.py3-none-any.whl (41kB) 100% |████████████████████████████████| 51kB 784kB/s Collecting pyflakes Downloading pyflakes-1.6.0-py2.py3-none-any.whl (227kB) 100% |████████████████████████████████| 235kB 3.2MB/s Installing collected packages: pep8, pyflakes Successfully installed pep8-1.7.0 pyflakes-1.6.0 (saltenv) systemv@wlserv1:~$ pip install autopep8 Collecting autopep8 Downloading autopep8-1.3.2-py2.py3-none-any.whl (42kB) 100% |████████████████████████████████| 51kB 863kB/s Collecting pycodestyle>=2.3 (from autopep8) Downloading pycodestyle-2.3.1-py2.py3-none-any.whl (45kB) 100% |████████████████████████████████| 51kB 3.0MB/s Installing collected packages: pycodestyle, autopep8 Successfully installed autopep8-1.3.2 pycodestyle-2.3.1 |
pep8, pyflakes를 문법 체크를 위한 라이브러리이며 autopep8 은 vim 플러그인에서 사용하기 위한 의존성 패키지 입니다. 이는 잘못된 문법을 자동으로 고쳐줍니다.
이제 vim 플러그인을 설치해 줍니다.
1 |
Plugin 'Syntastic' |
그리고 vim 설정에 다음과 같이 입력해 줍니다.
1 2 3 4 5 6 7 8 |
let g:syntastic_python_checkers = [ 'pep8' ] "let g:syntastic_python_checkers = [ 'flake8' ] let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 syntax on |
Python 문법 체크를 위해서 Autopep8 을 사용하는데 이를 vim 에서 사용할 수 있도록 도와주는 플러그인을 설치합니다.
1 2 3 4 5 6 7 8 |
saltenv) systemv@wlserv1:~/.vim$ git clone https://github.com/tell-k/vim-autopep8.git Cloning into 'vim-autopep8'... remote: Counting objects: 208, done. remote: Total 208 (delta 0), reused 0 (delta 0), pack-reused 208 Receiving objects: 100% (208/208), 35.91 KiB | 0 bytes/s, done. Resolving deltas: 100% (92/92), done. Checking connectivity... done. (saltenv) systemv@wlserv1:~/.vim$ mv vim-autopep8/* . |
위와같이 하면 ftplugin 디렉토리에 python_autopep8.vim 파일이 생성 됩니다.
python 을 위한 설정으로 다음과 같이 python.vim 파일을 작성해 ftplugin 디렉토리에 넣어둡니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
set autoindent set tabstop=4 set softtabstop=4 set shiftwidth=4 set textwidth=100 set expandtab set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class set nocindent set showmatch set nu set ruler au FileType py set autoindent au FileType py set smartindent au FileType py set textwidth=79 let python_version_2 = 1 " python 2 문법을 따른다고 옵션을 설정합니다. let python_highlight_all = 1 " 모든 강조(색상) 기능을 켭니다. " autopep8 let g:autopep8_max_line_length=79 let g:autopep8_indent_size=4 let g:autopep8_disable_show_diff=1 |
위 파일은 python 파일 타입에 한해서 vim 설정을 적용해 줍니다.
SaltStack 을 위한 vim 설정.
다음과 같이 아주 간단히 설정을 할수 있습니다.
1 2 3 |
git clone https://github.com/saltstack/salt-vim.git cd salt-vim && \ cp -r ftdetect ftplugin syntax ~/.vim/ |
최종 .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 |
syntax on set nocompatible set hls set scs set visualbell set ignorecase set showmatch filetype off set fileencodings=utf-8 set termencoding=utf-8 set encoding=utf-8 set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'gmarik/Vundle.vim' Plugin 'Shougo/neocomplete' Plugin 'Shougo/neosnippet' Plugin 'Shougo/neosnippet-snippets' Plugin 'Syntastic' Plugin 'vim-addon-manager' Bundle 'davidhalter/jedi-vim' Bundle 'https://github.com/Lokaltog/vim-powerline.git' call vundle#end() filetype plugin indent on " required! let g:syntastic_python_checkers = [ 'pep8' ] "let g:syntastic_python_checkers = [ 'flake8' ] let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 let g:autopep8_disable_show_diff=1 syntax on " powerline "language en_US.UTF-8 let g:Powerline_symbols = 'fancy' set guifont=DejaVu\ Sans\ Mono\ for\ Powerline\ 9 set laststatus=2 |