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

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

Dec 31, 2019 pm 05:17 PM
go

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Golang 함수 수명주기 및 변수 범위에 대한 심층적인 이해 Golang 함수 수명주기 및 변수 범위에 대한 심층적인 이해 Apr 19, 2024 am 11:42 AM

Go에서 함수 수명주기에는 정의, 로드, 연결, 초기화, 호출 및 반환이 포함됩니다. 변수 범위는 함수 수준과 블록 수준으로 구분됩니다. 함수 내의 변수는 내부적으로 표시되지만 블록 내의 변수는 블록 내에서만 표시됩니다. .

Go WebSocket 메시지를 보내는 방법은 무엇입니까? Go WebSocket 메시지를 보내는 방법은 무엇입니까? Jun 03, 2024 pm 04:53 PM

Go에서는 gorilla/websocket 패키지를 사용하여 WebSocket 메시지를 보낼 수 있습니다. 특정 단계: WebSocket 연결을 설정합니다. 문자 메시지 보내기: WriteMessage(websocket.TextMessage,[]byte("Message"))를 호출합니다. 바이너리 메시지 보내기: WriteMessage(websocket.BinaryMessage,[]byte{1,2,3})를 호출합니다.

Go에서 정규식을 사용하여 타임스탬프를 일치시키는 방법은 무엇입니까? Go에서 정규식을 사용하여 타임스탬프를 일치시키는 방법은 무엇입니까? Jun 02, 2024 am 09:00 AM

Go에서는 정규식을 사용하여 타임스탬프를 일치시킬 수 있습니다. ISO8601 타임스탬프를 일치시키는 데 사용되는 것과 같은 정규식 문자열을 컴파일합니다. ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . regexp.MatchString 함수를 사용하여 문자열이 정규식과 일치하는지 확인합니다.

Golang과 Go 언어의 차이점 Golang과 Go 언어의 차이점 May 31, 2024 pm 08:10 PM

Go와 Go 언어는 서로 다른 특성을 지닌 서로 다른 개체입니다. Go(Golang이라고도 함)는 동시성, 빠른 컴파일 속도, 메모리 관리 및 크로스 플랫폼 이점으로 유명합니다. Go 언어의 단점은 다른 언어에 비해 생태계가 덜 풍부하고 구문이 더 엄격하며 동적 타이핑이 부족하다는 점입니다.

Golang 기술 성능 최적화에서 메모리 누수를 방지하는 방법은 무엇입니까? Golang 기술 성능 최적화에서 메모리 누수를 방지하는 방법은 무엇입니까? Jun 04, 2024 pm 12:27 PM

메모리 누수로 인해 파일, 네트워크 연결, 데이터베이스 연결 등 더 이상 사용하지 않는 리소스를 닫는 방식으로 Go 프로그램 메모리가 지속적으로 증가할 수 있습니다. 더 이상 강력하게 참조되지 않는 경우 약한 참조를 사용하여 메모리 누수 및 가비지 수집 대상 개체를 방지합니다. go 코루틴을 사용하면 메모리 누수를 방지하기 위해 종료 시 코루틴 스택 메모리가 자동으로 해제됩니다.

IDE에서 Golang 함수 문서를 보는 방법은 무엇입니까? IDE에서 Golang 함수 문서를 보는 방법은 무엇입니까? Apr 18, 2024 pm 03:06 PM

IDE를 사용하여 Go 함수 문서 보기: 함수 이름 위에 커서를 놓습니다. 단축키(GoLand: Ctrl+Q, VSCode: GoExtensionPack 설치 후 F1을 누르고 "Go:ShowDocumentation" 선택)를 누릅니다.

단위 테스트 Go 동시 기능 가이드 단위 테스트 Go 동시 기능 가이드 May 03, 2024 am 10:54 AM

단위 테스트 동시 기능은 동시 환경에서 올바른 동작을 보장하는 데 도움이 되므로 매우 중요합니다. 동시 기능을 테스트할 때는 상호 배제, 동기화, 격리와 같은 기본 원칙을 고려해야 합니다. 동시 기능은 경쟁 조건을 시뮬레이션하고, 테스트하고, 결과를 확인하여 단위 테스트할 수 있습니다.

Golang의 오류 래퍼를 사용하는 방법은 무엇입니까? Golang의 오류 래퍼를 사용하는 방법은 무엇입니까? Jun 03, 2024 pm 04:08 PM

Golang에서 오류 래퍼를 사용하면 원래 오류에 상황별 정보를 추가하여 새로운 오류를 생성할 수 있습니다. 이는 다양한 라이브러리나 구성 요소에서 발생하는 오류 유형을 통합하여 디버깅 및 오류 처리를 단순화하는 데 사용할 수 있습니다. 단계는 다음과 같습니다. error.Wrap 함수를 사용하여 원래 오류를 새 오류로 래핑합니다. 새 오류에는 원래 오류의 상황별 정보가 포함됩니다. fmt.Printf를 사용하면 래핑된 오류를 출력하여 더 많은 컨텍스트와 실행 가능성을 제공할 수 있습니다. 다양한 유형의 오류를 처리할 때 오류 유형을 통합하려면 오류.Wrap 함수를 사용하세요.

See all articles