소프트웨어 공학/개발 |
2019. 1. 29. 13:18 |
Posted by youGom
ref : https://golangkorea.github.io/post/vim-go/
아래 박스 내용은 제대로 안되길래 박싱-클로징 시켜둠.
Vim
Vim은 Emacs와 함께 (적어도 리눅스에서는) 가장 널리 사용하는 에디터일 것이다. 가볍고 빠르며, 어디에서나 실행되기 때문에 그 단순함에도 불구하고 여전히 사랑받고 있다. GUI 환경에서 사용하는 IDE에 익숙한 개발자라면 “요즘 같은 시대에 왠 구닥다리 터미널 기반 에디터냐”라고 생각할 지도 모르겠다. 아래 그래프를 보자.
Go언어를 대상으로 조사한 결과인데, Vim이 거의 40% 정도를 차지하고 있다. Emacs까지 하면 터미널 기반 에디터를 사용하는 개발자가 절반이 넘는다. 물론 Go 언어가 시스템과 네트워크 분야의 백앤드 프로그램의 개발에 특화된 측면을 고려해야 겠지만 말이다.
Vim-go
Vim은 다양한 플러그인을 제공한다. Vim-go는 Go 개발환경을 지원하는 플러그인이다. 지원하는 기능은 아래와 같다.
함수, 오퍼레이터, 메서드들에 대한 Syntax highlighting
gocode를 이용한 자동완성
:GoDef를 이용해서 메서드, 변수들의 선언 위치를 네비게이션 할 수 있다.
:GoImport를 이용한 패키지 임포트
:GoTest와 :GoTestFunc를 이용한 유닛 테스트
테스트 커버리지를 위한 :GoCoverage
:GoBuild, :GoInstall을 이용한 패키지 컴파일과 설치
:GoRun을 이용한 빠른 실행
소스 분석을 위한 :GoImplements, :GoCallee, :GoReferrer
Lint툴 :GoLint
:GoPlay로 코드를 play.golang.org 로 공유 등 개발 환경을 만들기 위한 거의 모든 기능들을 제공한다. 여기에 파일 네비게이션 플러그인, 자동완성 플러그인들을 추가로 설치하면, IDE 부럽지 않은 개발 환경을 만들 수 있다.
Vim-go 설치
Vim의 플러그인들을 편리하게 관리하기 위해서 몇 가지 패키지 매니저들이 있다. 보통 Vundle 이나 pathogen을 사용한다. 나는 pathogen을 사용하고 있다. 아래와 같이 설치하자.
vim-go 프로젝트는 구글의 mercurial에서 관리하고 있다. mercurial도 설치해야 vim-go를 빌드 할 수 있다.
# apt-get install mercurial
vim을 실행 한후 명령모드에서 :GoInstallBinaries를 수행하면, 자동으로 vim-go를 빌드해서 설치해준다.
# vim
~
~
:GoInstallBinaries
vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/yundream/.vim-go/
vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/yundream/.vim-go/
vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/yundream/.vim-go/
vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/yundream/.vim-go/
vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/yundream/.vim-go/
vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/yundream/.vim-go/
vim-go: gotags not found. Installing github.com/jstemmer/gotags to folder /home/yundream/.vim-go/
계속하려면 엔터 혹은 명령을 입력하십시오
Vim-go 기능 빠르게 살펴보기
Go 코드의 실행
:GoRun
빌드
:make:GoBuild
에러체크
:GoErrCheck
패키지 임포트
:GoImport fmt
심볼에 대한 정의로 이동. 해동 심볼에서 :GoDef
:GoDef
대략 이런 식이다. 나머지 명령들은 직접 실행해 보자.
자동완성
자동완성은 IDE의 가장 쓸만한 기능 중 하나일 것이다. vim의 YCM(YouCompleteMe)를 이용해서 자동완성 기능을 추가 할 수 있다. 컴파일을 하기 때문에 python-dev와 cmake 패키지를 미리 설치해야 한다.
# 다음 디렉토리가 없다면 생성
$ mkdir -p ~/.vim/autoload
$ mkdir -p ~/.vim/bundle
# vim-pathogen 을 ~/.vim/autoload 에 다운 받는다
$ cd ~/.vim/autoload
$ git clone https://github.com/tpope/vim-pathogen.git
# autoload 에 복사
$ cp -v ./vim-pathogen/autoload/pathogen.vim ./
2.2 pathogen 환경 설정
# .vimrc 편집
$ vi ~/.vimrc
execute pathogen#infect()
filetype plugin indent on
2.3 vundle 설치 (vim 패키지(플러그인) 관지자)
# ruby 설치
$ sudo apt-get install ruby
# vundle 을 ~/.vim/bundle 에 다운 받는다
$ cd ~/.vim/bundle
$ git clone https://github.com/gmarik/Vundle.vim.git
2.4 vundle 환경 설정
# .vimrc 설정
$ vi ~/.vimrc
" Vundle 사용하기 위한 설정
" https://github.com/gmarik/Vundle.vim 에서 발췌
set nocompatible " be iMproved, required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
call vundle#end() " required
filetype plugin indent on " required
3. vim-go 설치
3.1 vim-go
# vim-go 을 ~/.vim/bundle 에 다운 받는다
$ cd ~/.vimrc/bundle
$ git clone https://github.com/fatih/vim-go.git
# .vimrc 설정
$ vi ~/.vimrc
Plugin 'fatih/vim-go'
# 플러그인 설치
$ vim
:PluginInstall
3.2 mercurial 설치
$ sudo apt-get install mercurial
# vim 실행 후 :GoInstallBinaries 를 실행하면 $GOPATH/bin 에 필요한 파일들이 설치된다.
$ vim
:GoInstallBinaries
4. vim 자동완성 기능
# YCM 설치전 python-dev, cmake 설치
$ sudo apt-get install python-dev
$ sudo apt-get install cmake
# YCM 을 ~/.vim/bundle 에 다운 받는다
$ cd ~/.vim/bundle
$ git clone https://github.com/Valloric/YouCompleteMe.git
# 설치
$ cd YouCompleteMe
# 다음 명령이 필요하다면 수행
$ git submodule update --init --recursive
$ ./install.sh
5. Tagbar (태그 창) 설치
# Tagbar 설치전 ctags 설치
$ sudo apt-get install ctags
# Tagbar 을 ~/.vim/bundle 에 다운 받는다
$ cd ~/.vim/bundle
$ git clone https://github.com/majutsushi/tagbar.git
# vim 에서 :TagbarToggle 을 사용하면 오른쪽에 태그 창이 보인다.
# Ctrl+F12 단축키 설정
$ vi ~/.vimrc
nmap <C-F12> :TagbarToggle<CR>
6. NertdTree (파일 브라우저) 설치
$ cd ~/.vim/bundle
$ git clone https://github.com/scrooloose/nerdtree.git
# vim 에서 :NERDTreeToggle 을 사용하면 오른쪽에 태그 창이 보인다.
# F11 단축키 설정
$ vi ~/.vimrc
nmap <C-F11> :NERDTreeToggle<CR>
7. vim-go 명령들
7.1 vim-go
$ vim
:GoRun (go 실행)
:GoBuild (go 빌드)
:GoDoc (go 문서)
:GoDef (go 변수 정의)
:GoFmt(go 형식 맞춤)
:GoImports (go 패키지 자동 임포트)
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v github.com/mdempsky/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/godoc
go get -u -v github.com/zmb3/gogetdoc
go get -u -v golang.org/x/lint/golint
go get -u -v github.com/fatih/gomodifytags
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v github.com/cweill/gotests/...
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/josharian/impl
go get -u -v github.com/haya14busa/goplay/cmd/goplay
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
go get -u -v github.com/alecthomas/gometalinter
gometalinter --install
마지막으로..
위에거 삽질하고나서 다시 검색해보니, 아래 링크에 vim-go ( vatih-vim ) 사용법에 대해 상세히 나와 있었음 -_-;;
http://www.viemu.com/ 에서 제공하는 vi/vim 단축키 모음(Graphical vi-vim Cheat Sheet and Tutorial)을 한글로 번역하였습니다.
제가 정리하긴 했지만, 실제 번역은 우분투 한국어 커뮤니티 분들이 해주셨습니다.
제 스스로가 vi/vim 을 잘 알지 못해 잘못된 부분이 꽤 있으리라 생각됩니다. 알려주시면 감사하겠습니다. 물론 직접 수정하셔도 됩니다. SVG 파일을 첨부합니다. Inkscape 를 이용해 작업하였고, 글꼴은 은그래픽을 사용하였습니다.