소프트웨어 공학/개발 |
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 ) 사용법에 대해 상세히 나와 있었음 -_-;;
윈도우즈는 Win32 Disk Imager를 이용하면 쉽고, 맥OS에서는 자체 커맨드 명령어를 이용하면 됩니다.
<Updated, 2017, 2,2>
Etcher를 이용하면 윈도우즈, 맥, 리눅스 할것 없이 동일한 GUI로 손쉽게 라즈베리안 OS 이미지를 SD 카드에 구울 수 있습니다. 다운로드는 https://etcher.io/ 에서 무료로 받으 실 수 있고, 아직 베타 버전이긴 하지만, 제가 사용해본 결과 한번도 문제를 일으킨 적이 없습니다. 그리고, SD카드를 자동으로 선택해주고 Portable 장치가 아니면 선택할 수 없게 나오기 때문에 메인 디스크를 날려 먹을 우려도 없습니다.
SD카드 리더기를 USB 포트에 연결하고 다운로드한 이미지 파일을 선택해서 "Flash" 버튼을 누르면 작업은 끝납니다.
* 엔터프라이즈 : 실제적으로 데이터를 공유할 필요가 있는 영역을 지칭하는 개념, 컴퓨터 분야에서는 동일한 의미로 사용.
- ERP ( Enterprise Resource Planning ) : 실제적으로 데이터를 공유할 필요가 있는 영역의 다양한 Rsource ( 예 : 사람, 기계, 절차 ) 에 대한 계획을 수행( Planning ) 하는 프로그램
- EAI ( Enterprise Application Integration ) : 실제적으로 데이터를 공유할 필요가 있는 영역에 있는 애플리케이션의 통합과 관련된 프로그램
- ESB ( Enterprise Service Bus ) : 실제적으로 데이터를 공유할 필요가 있는 영역에 있는 다양한 서비스( 사용자가 원하는 기능을 제공하기 위한 기본 단위 )를 연결하는 프로그램
* 솔루션 : 엔터프라이즈의 구성단위이며, 개발자의 관점에서 단독적으로 수행가능한 기능 단위이다. ( 보안 솔루션, 사용자 인증 솔루션 등 )
* 애플리케이션 : 개발자의 관점에서 개발된 단위 작업 수행 프로그램을 말한다. 그러므로 한개의 솔루션은 여러가지 애플리케이션으로 구성될 수 있으며, 한 개의 애플리케이션은 여러가지 솔루션에 포함될 수 있다.
예.
회사의 업무는 인사 업무, 재무 관리, 영업 관리로 이루어지고, 인사, 재무, 영업은 서로 자료를 주고 받으며 운영된다. 이때 전체를 총괄하는 것은 엔터프라이즈인데, 엔터프라이즈는 인사, 재무, 영업 솔루션으로 구성된다. 그 중에서 인사 업무 솔루션에 속하는 신입사원 등록, 경조사 관리 시스템 등과 같은 것은 애플리케이션이 된다.
처음에는 '이게 왜필요하지'라는 생각으로 접근했다. 이 책을 읽어보니.. 왜 필요한 것인지 알았다.
Git, 분산 버젼 관리 시스템은 기존의 버젼 관리 시스템을 보완한거였다.
기존 버젼관리에서 중요부분을 수정하고나서 반영하려면, rock을 걸거나 공지한 후 모두가 커밋을 정지한상태에서 진행해야한다. 항상 모두가 동기화되어 진행하고 브랜치나 태그 따는데도 모두가 공유해야 한다. 안정적이든 불안정적이든간에.
물론, 지속적통합을 위해서 동기화되어 있는것이 맞다. 그러나 개발을 진행하다 보면, 약간의 비동기가 필요할때가 있다. 안정적 버젼을 제공해주기 위해 여러 브랜치테스팅이 필요한 경우도 있다. 이런 브랜치의 기능을 강화 시킨 솔루션이 '분산 버젼관리 시스템'이다.
여기 분산버젼관리시스템의 핵심은 바로 '브랜치'다. 브랜치를 자유롭게 사용한다는 것이다. 때에 따라서 브랜치 정보를 수정할수도있고. 다른 부분에서 사용된 브랜치의 커밋정보도 끌어다 쓸 수가 있는 것이다. 이 부분은 기존 서버집중 버젼관리시스템에서는 약간 이해하기 어려운 부분이기도 했다. 독자도 이 부분의 개념을 이해하기 위해 3~4번 정도 번복해서 정독했었다.
Git의 기본은 로컬에서 Commit하여 로컬저장소에 보관하여, 안정적인 버젼을 서버로 Push하는 것이다.
여기에서 시작하여 각각의 버젼관리가 이루어진다. 태그는 수정불가는한 릴리즈 버젼을 지니고 있다.
태그를 수정하기 위해서는 새로운 브랜치를 생성하여 진행할 수 있다. 브랜치는 어느 버젼관리와 마찬가지로 여러갈래로 나뉘어지고, 다시 하나로 합쳐질 수 있다. 이 부분( 브랜치 및 합치기 ) 을 진행할 때, 로컬에서 자체적으로 수행하고, 공유가 필요한 부분만 서버에 전송( Push ) 한다.
이 책 부록에, 유용한 명령어 모음집이 맨 마지막에 붙어 있다. 어쩌면 설명없는 명령여 요약본으로 볼 수 있다.