작성일: 2024년 5월 8일
설치 작업을 시작하기 전에...
주의 - macOS에 기본 제공되는 VIM을 사용하는 경우 -> Homebrew로 재설치
모든 경우에 해당되는지 모르겠지만, 내 경우 macOS에 기본 제공되는 vim editor를 사용했더니
아래처럼 vim editor 화면에 E319 에러가 떴다.
아래와 같은 해결 방식이 정석인지는 모르겠지만, 내 경우에는 문제없이 vim과 vim-go 등 vim plugin들이 잘 동작했다.
따라서 macOS를 사용하는 사용자라면, Homebrew를 통해서 vim을 재설치하는 것을 추천한다.
$ brew remove vim
$ brew cleanup
$ brew install vim
그리고 macOS에 설치된 기본 vim editor보다 homebrew를 통해 설치된 vim editor의 실행 순서를 앞 당기기위 해서 아래와 같이 .zshrc 파일에 2줄을 추가한다.
$ cat ~/.zshrc
... 중간 생략 ...
alias vi=/opt/homebrew/Cellar/vim/9.1.0350/bin/vim
alias vim=/opt/homebrew/Cellar/vim/9.1.0350/bin/vim
... 중간 생략 ...
주의 - vim 버전 확인
$ brew info vim
만약, vim 8.0 이상이 아닌 경우라면 vim을 최신 버전으로 재설치
$ brew unlink vim
$ brew uninstall vim
$ brew install vim
공식 문서를 한번쯤 읽어주는 예절... (Official Documents)
vim-plug 설치
vim-plug는 vim에서 사용할 수 있는 plugin manager로써 plugin을 설치하고 사용할 수 있게 해준다.
$ curl -fLo ~/.vim/autoload/plug.vim \
--create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
vim-go 및 기타 plugin 설치
${HOME}/.vimrc 파일에 설치할 plugin을 정의한다.
$ vi ~/.vimrc
... 중간 생략 ...
" ------------------------------------------
" vim-go 설정
" -----------------------------------------
filetype plugin indent on
" vim-Plug Plugin List
call plug#begin('~/.vim/plugged')
" 자동완성을 해주는 Plugin.
" :CoCInstall coc-<lang> 으로 지원되는 Language 설치가 가능
" NOTE: 내 경우는 아래 neoclide/coc.nvim을 설치하지 않았다.
" 왜냐하면, 나는 node.js를 사용하지 않기 때문.
" Plug 'neoclide/coc.nvim', {'branch': 'release'}
" 많이 사용되는 plugin list
Plug 'majutsushi/tagbar'
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-fugitive'
" vim-go 사용을 위한 Plugin
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
" 자동 완성 Plugin 이다.
Plug 'SirVer/ultisnips'
Plug 'maralla/completor.vim'
" Misc utilities
Plug 'milkypostman/vim-togglelist'
Plug 'AndrewRadev/splitjoin.vim'
Plug 'mhinz/vim-startify'
" preview plugin
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } " fzf 사용시 꼭 설치; ~/.fzf 에서 ./install --all 실행해야 함.
Plug 'junegunn/fzf.vim'
" Initialize plugin system
call plug#end()
... 중간 생략 ...
${HOME}/.vimrc 파일을 저장하고, 아래와 vim 편집기를 실행 후 vim 내부 명령을 수행한다.
$ vim
... 중간 생략 ...
:PlugInstall
수십 초 정도 시간이 흐르면서 plugin을 설치할 것이다. (시간이 많이 걸리니까 다른 일을 하면서 신경을 끄는게 좋다)
vim-go 관련 설정 (개인 취향에 따라 설정 값 정하기)
아래 vim-go 관련 설정은 개인 취향에 따라 값을 정하면 된다.
$ vim ~/.vimrc
... 중간 생략 ...
" -------------------------------------------------------
" NOTE: *.go 파일을 저장할 때 Auto formatting하고,
" 관련 go package를 자동으로 .go 소스 코드 파일에 추가해준다.
let g:go_fmt_command = "goimports"
let g:go_list_type = "quickfix"
let g:go_addtags_transform = "camelcase"
let g:go_autodetect_gopath = 1
let g:go_highlight_types = 1
let g:go_highlight_fields = 1
let g:go_highlight_functions = 1
let g:go_highlight_function_calls = 1
let g:go_highlight_extra_types = 1
let g:go_highlight_generate_tags = 1
let g:go_highlight_operators = 1
let g:go_auto_type_info = 1
let g:go_auto_sameids = 1
" NOTE: 문서를 Popup window 형태로 보여주기 (:GoDoc 명령)
let g:go_doc_popup_window = 1
" NOTE: go source code 작성할 때, 실시간으로 자동 완성할 추천 문장을 보여줌.
let g:completor_filetype_map = {}
let g:completor_filetype_map.go = {'ft': 'lsp', 'cmd': 'gopls - remote=auto'}
" NOTE: quickfix 이동 및 open/close
nnoremap <C-n> :cnext<CR>
nnoremap <C-p> :cprevious<CR>
nnoremap <LocalLeader>q :call ToggleQuickfixList()<CR>
" NOTE: Coverage toggle
nnoremap <LocalLeader>c :GoCoverageToggle<CR>
" NOTE: Go 프로그램을 build, run, test하는 명령에 대한 설정
autocmd FileType go nnoremap <Tab>b :GoBuild<CR>
autocmd FileType go nnoremap <Tab>r :GoRun<CR>
autocmd FileType go nnoremap <Tab><Tab>r :GoRun %<CR>
autocmd FileType go nnoremap <Tab>t :GoTest<CR>
autocmd FileType go nnoremap <Tab><Tab>t :GoTestFunc<CR>
autocmd FileType go nnoremap <Tab>c :GoCoverageToggle<CR>
" -------------------------------------------------------
... 중간 생략 ...
vim-go 및 관련 plugin 설치 완료
간단하게 vim-go 동작 유무 확인하기
아래와 같이 새 파일 my-main.go 를 편집해보다.
$ vim my-main.go
아래와 같이 기본 소스 코드 틀이 만들어진 .go 파일이 자동으로 생긴다.
vim-go 사용법
많은 분이 잘 정리했으니까, 아래 문서를 보는 것을 추천!
'Golang' 카테고리의 다른 글
Go 언어 PKG(패키지) 검색하는 요령 (0) | 2024.05.08 |
---|---|
Go Programming Language (Go 언어 프로그래밍) - 학습 문서, 도서 (0) | 2024.04.25 |
Golang 예제 - Source IP address를 지정한 TCP Client 구현 (Source IP Address Binding) (0) | 2023.09.20 |
go build 할 때 app version, build date, dev note를 추가하는 방법 (0) | 2022.07.05 |
Go Package 및 Module 사용 예제 (0) | 2022.03.06 |