> 백엔드 개발 > Golang > Go 언어 환경의 vim 구성에 대한 자세한 설명

Go 언어 환경의 vim 구성에 대한 자세한 설명

풀어 주다: 2019-12-31 17:17:56
앞으로
4243명이 탐색했습니다.

Go 언어 환경의 vim 구성에 대한 자세한 설명

1. 환경 준비:

시스템 환경 설명:

[root@docker golang]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@docker golang]# uname -a
Linux docker 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@docker golang]#
로그인 후 복사

플러그인 구성 과정에서 변경 사항을 관찰할 go 파일 준비:

//hellogolang.go
package main
import "fmt"
func main() {
        fmt.Println("Hello Golang!")
}
로그인 후 복사

2. 플러그인 구성 경로:

1 , Vundle.vim:

#mkdir ~/.vim/bundle
#git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
로그인 후 복사

vimrc 구성: ~/.vimrc 파일을 생성하고(이 파일이 없는 경우) 파일 상단에 Vundle.vim에 대한 구성을 추가합니다:

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
로그인 후 복사

현재 Vim은 Vundle.vim A 플러그인만 설치합니다. hellogolang.go를 편집하는 것은 일반 텍스트 파일을 편집하는 것과 다르지 않습니다. 모든 것이 여전히 Vim

2의 기본 속성입니다. vim-go

Vim-go는 현재 Golang 개발 환경 구축에 가장 널리 사용되는 vim 플러그인입니다. 여기에서는 vim-go를 핵심과 기반으로 사용하여 환경을 구축합니다. vim-go는 오픈 소스 Vim 플러그인 관리자를 사용하여 설치됩니다. gmarik/Vundle.vim은 현재 Pathan을 능가하는 가장 권장되는 Vim 플러그인 관리자입니다.

여기에서는 Vundle을 Vim의 플러그인 관리 도구로 사용합니다.

~/.vimrc를 편집하고 vundle#begin과 vundle#end 사이에 한 줄을 추가합니다.

Plugin 'fatih/vim-go'
로그인 후 복사

Execute in Vim: PluginInstall,

Vundle.vim은 왼쪽 아래에 Vundle 설치 프로그램 미리 보기 하위 창을 엽니다. window 설치가 완료되면 프롬프트 메시지가 "완료!"로 변경됩니다.

이때 .vim/bundle 아래에 추가 vim-go 폴더가 있는 것을 확인할 수 있습니다:

$ ls .vim/bundle/
vim-go/  Vundle.vim/
로그인 후 복사

이때 hellogolang.go를 구문 강조로 다시 편집하고 저장할 때 자동으로 포맷합니다(사용). $ GOBIN/gofmt)도 사용할 수 있지만 누락된 패키지 자동 가져오기 및 자동 완성과 같은 기타 고급 기능은 여전히 ​​일부 항목을 계속 설치해야 합니다.

3. go.tools 바이너리 설치

vim-go 설치 지침에는 gocode, godef, goimports 등과 같은 필요한 모든 바이너리를 먼저 설치해야 한다고 나와 있습니다.

GoInstallBinaries를 통해 이러한 vim-go 종속 바이너리 도구는 $GOBIN 또는 $GOPATH/bin에 자동으로 다운로드되어 설치됩니다. (이 도구는 git 또는 hg에 따라 다르며 OS에 미리 설치되어 있어야 합니다.)

: GoInstallBinaries 실행은 대화형이므로 확인하려면 Enter를 눌러야 합니다.

vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/tonybai/go/bin
vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/tonybai/go/bin/
vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/tonybai/go/bin/
vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/tonybai/go/bin/
vim-go: gorename not found. Installing code.google.com/p/go.tools/cmd/gorename to folder /home/tonybai/go/bin/
vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/tonybai/go/bin/
vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/tonybai/go/bin/
로그인 후 복사

하지만 이러한 코드의 대부분은 코드에 있습니다. google.com 호스팅이므로 잘 알려진 이유로 vim-go 자동 설치가 실패할 가능성이 높으므로 위 로그에 언급된 각 도구의 소스 코드 주소에 따라 로컬로 다운로드하여 설치해야 합니다. 사다리를 만들 수 없는 경우 http://gopm.io를 통해 관련 패키지를 다운로드할 수 있습니다.

설치 후 $GOBIN 아래의 새로운 바이너리는 다음과 같습니다.

-rwxr-xr-x  1 tonybai tonybai  5735552 11??  7 11:03 errcheck*
-rwxr-xr-x  1 tonybai tonybai  9951008 11??  7 10:33 gocode*
-rwxr-xr-x  1 tonybai tonybai  5742800 11??  7 11:07 godef*
-rwxr-xr-x  1 tonybai tonybai  4994120 11??  7 11:00 goimports*
-rwxr-xr-x  1 tonybai tonybai  5750152 11??  7 11:03 golint*
-rwxr-xr-x  1 tonybai tonybai  6381832 11??  7 11:01 gorename*
-rwxr-xr-x  1 tonybai tonybai  2954392 11??  7 10:38 gotags*
-rwxr-xr-x  1 tonybai tonybai  9222856 11??  7 11:01 oracle*
로그인 후 복사

이 바이너리를 설치한 후 어떤 기능이 지원되는지 살펴보겠습니다.

hellogolang.go를 다시 편집하세요:

- 새 줄을 시작하고 fmt.를 입력한 다음 ctrl+x, ctrl+o를 누르면 Vim이 완료 프롬프트 드롭다운 상자를 표시하지만, 이는 완료 유형이 아닙니다. 실시간으로 따라오며, 이 완성은 gocode에 의해 제공됩니다.

– 코드 줄 입력: time.Sleep(time.Second), 실행: GoImports, Vim은 자동으로 시간 패키지를 가져옵니다.

– 커서를 Sleep 함수로 이동하고 다음을 실행하세요. GoDef 또는 명령 모드에서 gd를 입력하면 Vim은 $GOROOT/src/time/sleep.go에서 Sleep 함수의 정의를 엽니다. 실행: b 1은 hellogolang.go로 돌아갑니다.

– 실행: GoLint, 현재 Go 소스 파일에서 golint를 실행합니다.

– 실행: GoDoc을 실행하여 현재 커서 아래의 기호에 해당하는 Go 문서를 엽니다.

– 실행: GoVet, 현재 디렉터리의 현재 Go 소스 파일에 대해 go vet을 실행합니다.

– 실행: GoRun, 현재 기본 패키지를 컴파일하고 실행합니다.

– 실행: GoBuild, 소스 파일에 따라 현재 패키지를 컴파일하지만 GoBuild는 결과 파일을 생성하지 않습니다.

– GoInstall을 실행하여 현재 패키지를 설치합니다.

– GoTest를 실행하여 현재 경로에서 _test.go 파일을 테스트합니다.

– 실행: GoCoverage, 테스트 커버리지 결과 파일을 생성하고 브라우저를 열어 현재 패키지 상황을 표시합니다.

– GoErrCheck를 실행하여 현재 패키지에서 발견되지 않은 오류를 확인합니다.

– 실행: GoFiles를 실행하면 현재 패키지에 해당하는 소스 파일 목록이 표시됩니다.

– 실행: GoDeps, 현재 패키지의 종속 패키지 목록을 표시합니다.

– 실행: GoImplements, 현재 유형으로 구현된 인터페이스 목록을 표시합니다.

– 실행: GoRename [to], 현재 커서 아래의 기호를 [to]로 바꿉니다.

3. 기타 플러그인

아직 구현되지 않은 여러 기능이 있습니다. 핵심 사항은 다음과 같습니다.

– 실시간 코드 완성
– 코드 조각 지원

1. YCM 설치 (Your Complete Me )

~/.vimrc에 줄 추가:

Plugin 'Valloric/YouCompleteMe'

저장하고 종료한 후 ~/.vimrc를 열고 실행: PluginInstall

설치 후 다음 프롬프트 표시줄 프롬프트:

ycm_client_support.[so|pyd|dll] 및 ycm_core.[so|pyd|dll]이 감지되지 않습니다. 사용하기 전에 YCM을 컴파일해야 합니다!

YCM은 작성된 모듈입니다. C++에서는 성능이 최적화되었으므로 YCM의 지원 라이브러리를 수동으로 컴파일해야 합니다. 단계는 다음과 같습니다.

sudo yum install build-essential cmake python-dev
cd ~/.vim/bundle/YouCompleteMe
./install.sh
로그인 후 복사

Build (C++ 컴파일이 매우 느리기 때문에 잠시 기다려야 합니다.) 확인 후 hellogolang.go를 열면 실시간 완료 기능을 사용할 수 있습니다! 시원한!

2. UltiSnips를 설치하세요

Vim-go默认是用ultisnips引擎插件,但这个插件需要单独安装。同样,我们利用vundle来安装它,在~/.vimrc中添加一行:

Plugin 'SirVer/ultisnips'
로그인 후 복사

保存,退出vim

打开vim,执行:PluginInstall

编辑hellogolang.go,按照go.snip中的说明,我们输入func后敲击tab键,我们发现期待的:

func name(params) type {
 }
로그인 후 복사

并没有出现。反倒是YCM的下拉提示显示在那里让你选择。似乎是ultisnips和YCM的键组合冲突了。ultisnips官方说明也的确如 此。ultisnips默认是用Tab展开snippet的,而YCM中的Tab用来选择补齐项,我们可以通过设置来避免这些。

我们在.vimrc中添加如下setting:

" YCM settings
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['']
let g:ycm_key_invoke_completion = &#39;<C-Space>&#39;

" UltiSnips setting
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
로그인 후 복사

这样让YCM通过回车和向下的箭头来做list item正向选择,通过向上箭头做反向选择。通过ctrl+space来原地触发补齐提示。

而ultisnips则是用tab做snippet展开,ctrl+b正向切换占位符,ctrl+z反向切换占位符。

四、.vimrc

前面讲到了vim-go有许多命令,在:xx模式下执行多显不便,于是你可以定义一些Mappings,比如:

 " set mapleader
  let mapleader = ","

  " vim-go custom mappings
  au FileType go nmap <Leader>s <Plug>(go-implements)
  au FileType go nmap <Leader>i <Plug>(go-info)
  au FileType go nmap <Leader>gd <Plug>(go-doc)
  au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)
  au FileType go nmap <leader>r <Plug>(go-run)
  au FileType go nmap <leader>b <Plug>(go-build)
  au FileType go nmap <leader>t <Plug>(go-test)
  au FileType go nmap <leader>c <Plug>(go-coverage)
  au FileType go nmap <Leader>ds <Plug>(go-def-split)
  au FileType go nmap <Leader>dv <Plug>(go-def-vertical)
  au FileType go nmap <Leader>dt <Plug>(go-def-tab)
  au FileType go nmap <Leader>e <Plug>(go-rename)  
로그인 후 복사

这样我们在命令模式下,输入<,>+就是运行 当前main包,以此类推。

另外下面这个配置使得我们在save file时既可以格式化代码,又可以自动插入包导入语句(或删除不用的包导入语句)。

 " vim-go settings
let g:go_fmt_command = "goimports"
로그인 후 복사

到这里,我们的Vim Golang开发环境就基本搭建好了。snippet+实时补齐让你Coding如飞!

五、.vimrc文件

下面是截至目前为止全量.vimrc文件的内容:

set nocompatible              " be iMproved, required
filetype off                  " required
colorscheme molokai

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
Plugin &#39;fatih/vim-go&#39;
Plugin 'Valloric/YouCompleteMe'

Plugin &#39;SirVer/ultisnips&#39;

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

" set mapleader
let mapleader = ","

" vim-go custom mappings
au FileType go nmap s (go-implements)
au FileType go nmap i (go-info)
au FileType go nmap gd (go-doc)
au FileType go nmap gv (go-doc-vertical)
au FileType go nmap r (go-run)
au FileType go nmap b (go-build)
au FileType go nmap t (go-test)
au FileType go nmap c (go-coverage)
au FileType go nmap ds (go-def-split)
au FileType go nmap dv (go-def-vertical)
au FileType go nmap dt (go-def-tab)
au FileType go nmap e (go-rename)

" vim-go settings
let g:go_fmt_command = "goimports"

" YCM settings
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['', '']
let g:ycm_key_invoke_completion = ''

" UltiSnips settings
let g:UltiSnipsExpandTrigger=""
let g:UltiSnipsJumpForwardTrigger=""
let g:UltiSnipsJumpBackwardTrigger=""
로그인 후 복사

更多golang知识请关注golang教程栏目。

위 내용은 Go 언어 환경의 vim 구성에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
go
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿