Go 개발을 위한 Vim 설정 방법

7906 단어 vimgoide
내가 Go에서 프로그래밍하는 것을 좋아하는 주요 원인 중 하나는 내가 원하는 IDE나 편집기에서 프로그래밍을 할 수 있기 때문이다. 내가 가장 좋아하는 것을 포함해서 Vim editor.
예를 들어 IntelliJ 또는 Eclipse와 고도로 결합된 Java와 달리 Go는 더 가볍고 사용자가 사용하는 도구는 편집기와 통합할 수 있습니다.
이 설명서에서 Vim을 설치할 플러그인을 포함하여 검증된 Go IDE로 설정하고 매일 사용하는 중요한 옵션과 매핑을 설정하는 데 도움을 드리겠습니다.

선결 조건


$GOPATH와 관련된 하위 디렉터리-/bin/pkg/src Go installed 와 Go 환경 설정이 필요합니다.
vim 대신 nvim을 사용하거나 8+버전으로 업데이트해야 합니다.

Go의 기본 Vim 플러그인


Go에는 플러그 인vim-go만 필요합니다.Go 개발을 시작하는 데 필요한 모든 도구를 모았습니다.
pathogen를 통해 설치:
git clone https://github.com/tpope/vim-pathogen ~/.vim/bundle
Other installation options .
설치 후 다음과 같은 옵션을 사용하여 사용자 정의를 수행할 수 있습니다. 이 옵션은 매우 자기 의견을 고집하지만 저에게 가장 적합합니다.
" disable all linters as that is taken care of by coc.nvim
let g:go_diagnostics_enabled = 0
let g:go_metalinter_enabled = []

" don't jump to errors after metalinter is invoked
let g:go_jump_to_error = 0

" run go imports on file save
let g:go_fmt_command = "goimports"

" automatically highlight variable your cursor is on
let g:go_auto_sameids = 0
구문을 강조 표시하려면 다음 옵션을 사용합니다.
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_operators = 1
let g:go_highlight_extra_types = 1
let g:go_highlight_build_constraints = 1
let g:go_highlight_generate_tags = 1
마지막으로vim을 열고 실행하며 필요한 go 도구를 설치합니다:
:GoInstallBinaries

초코야.nvim-자동 완성 및 제모


과거에 저는 YouCompleteMe에 의존하여 자동 완성을 하거나 vim-govim의 본기 통합에 의존하여 자동 완성을 하거나 의존ALE하여linting/정적 코드 분석을 했습니다.
현재, 나는 이 모든 작업을 완성하기 위해 coc.nvim와 플러그인을 사용하는 것을 더욱 좋아한다. 왜냐하면 나는 그것이 모든 도구보다 더 믿을 만하다는 것을 발견했기 때문이다.
설치 지침은 Quick Start 가이드를 따르십시오.
설치 후 다음 명령을 실행하여 Go에 필요한 coc 확장을 설치합니다.
vim -c 'CocInstall -sync coc-go coc-html coc-css coc-json|q'
html/css/json 확장은 선택할 수 있지만, 지금은 누가 이런 것들을 처리하지 않겠습니까?언젠가 필요할 수도 있어.
그리고vim을 열고:coconfig를 입력하여coc의 프로필을 엽니다.다음은 바둑과 무관한 설정에서 벗어난 나의 독선적인 설정이다.
{
  "suggest.noselect": false,
  "diagnostic.errorSign": "✘",
  "diagnostic.warningSign": "!",
  "diagnostic.infoSign": "?",
  "diagnostic.checkCurrentLine": true,
  "coc.preferences.formatOnSaveFiletypes": [
    "javascript",
    "html",
    "json",
    "css",
    "scss",
    "go"
  ],
  "coc.preferences.hoverTarget": "float",
  "languageserver": {
    "golang": {
      "command": "gopls",
      "rootPatterns": ["go.mod"],
      "filetypes": ["go"]
    }
  },
  "go.goplsOptions": {
    "staticcheck": true
  }
}
모든 보조coc 설정에 these settings를 추가합니다.vimrc.

명령에 가장 유용한 매핑


좋은 공구를 가지고 있는 것은 부족하다.너는 그것들을 어떻게 사용하는지 알아야 한다.따라서 고 코드를 처리할 때 더욱 효과적일 수 있도록vim go와coc가 제공하는 맵을 사용자 정의하는 것이 좋습니다.
다음은 내가 가장 자주 사용하는 맵과 내가 그것을 설정하는 방법입니다.

현재 파일의 단위 테스트 관리


현재 파일에서 실행 중인 모든 테스트를 -t에 비추어 Mac와 Linux에서\+t로 변환했습니다.
autocmd BufEnter *.go nmap <leader>t  <Plug>(go-test)
또한\+tt는 모든 테스트 함수가 아닌 현재 테스트 함수만 실행하도록 매핑합니다.
autocmd BufEnter *.go nmap <leader>tt <Plug>(go-test-func)
마지막으로 현재 파일의 덮어쓰기 프로파일을\+c로 전환합니다.
autocmd BufEnter *.go nmap <leader>c  <Plug>(go-coverage-toggle)

Go 코드 라이브러리 확인


주어진 루틴에 대한 함수 서명을\+i 로 표시하려면:
autocmd BufEnter *.go nmap <leader>i  <Plug>(go-info)
유형과\+ii 인터페이스를 표시하려면:
autocmd BufEnter *.go nmap <leader>ii  <Plug>(go-implements)
주어진 유형의 정의를\+ci로 설명합니다.
autocmd BufEnter *.go nmap <leader>ci  <Plug>(go-describe)
\+cc를 사용하여 지정된 함수의 호출자를 보려면 다음과 같이 하십시오.
autocmd BufEnter *.go nmap <leader>cc  <Plug>(go-callers)
\+cr를 사용하여 코드 라이브러리에서 특정 유형/함수에 대한 모든 참조를 찾습니다.
nmap <leader>cr <Plug>(coc-references)
이동 정의/Ctrl+d 및 Ctrl+a를 사용하여 돌아가기
nmap <C-a> <C-o>
nmap <C-d> <Plug>(coc-definition)

Go 코드 재구성


이 옵션은 많지 않지만 커서가 들어 있는 기호의 이름을\+r로 바꿀 수 있습니다.
nmap <leader>r <Plug>(coc-rename)

도구의 간혹 유지 보수


모든 Go 도구를 업데이트하려면vim에서 다음 명령을 실행합니다.
:GoUpdateBinaries
모든 coc 플러그인 업데이트:
:CocUpdate
vim go 또는 coc를 업그레이드합니다.폴더를 ~/에서 삭제합니다.vim/bundle와git가 다시 복제repos입니다.

쿨gruvbox 테마 설정하기 (선택 가능)


다음 도구를 사용하여 설치gruvbox:
git clone https://github.com/morhetz/gruvbox ~/.vim/bundle
응용 프로그램에서 활성화합니다.vimrc에는 독선적인 추가 옵션이 있습니다.
colorscheme gruvbox
autocmd ColorScheme * highlight CocErrorFloat guifg=#ffffff
autocmd ColorScheme * highlight CocInfoFloat guifg=#ffffff
autocmd ColorScheme * highlight CocWarningFloat guifg=#ffffff
autocmd ColorScheme * highlight SignColumn guibg=#adadad
얘 모양 보고 싶어요?

터미널 다중 복용을 위한 tmux 설정 (선택 가능)


같은 창에서 여러 터미널 탭을 관리하려면 tmux(내 how to guide 참조):

이것은 내가 설정한 가장 유용한 도구 중 하나입니다.vim에서 코드를 편집하고 같은 창의 단독 옵션 카드에서 터미널과 관련된 모든 작업을 관리할 수 있기 때문입니다.

결론


이것이 바로 내가 일상적으로 바둑 프로그래밍에 사용하는 모든 것이다.
이 설정은 저에게 아주 좋습니다. 저도 처리하고 있습니다Uber's huge Go Monorepo. 여기서 저는vim환경을 틈새 없이 통합할 수 있습니다(당신이 필요로 하지 않을 수도 있는 추가 설정들).
내vim 개발 환경 전체를 보려면 내 모든dotfilesdefault-setupsREPO를 보십시오. 외부 프로그램, 터미널,vim,tmux, 배색 방안 등을 포함합니다.
고분 즐거움!
나의 다른 바둑 시리즈를 봐라: Integrating your Go Service with ELKgRPC With Go Crash Course

좋은 웹페이지 즐겨찾기