Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vimのGoサポートが手厚くて打ち震えている

$
0
0

はじめに

タイトルの通りvimで作るGoの開発環境が便利なのでまとめたものです。
特にコードリーディングに便利な設定を紹介します。

参考

本稿を書くに当たって参考になった記事です。
日付が新しい順に並べていますので下の方は古い記述を含んでいます。

Go 1.2.1 の環境構築 Homebrew + Vim 編 (2014.03)
http://qiita.com/methane/items/4905f40e4772afec3e60

Big Sky :: Vimを使ったGo言語開発手法
http://mattn.kaoriya.net/software/vim/20130531000559.htm

goのvimコマンド「Fmt」が、実はquickfixに登録してくれてて最高だった
http://qiita.com/umisama/items/2e38139e0d3f4410446e

Go用のvim設定
http://qiita.com/hnakamur/items/f39fde28bcfe4beaaaba

Vim for Golang
http://www.metal3d.org/ticket/2013/07/07/vim-for-golang

Goの開発環境(Vim + Vundle編)
http://qiita.com/todogzm/items/3c281da10287f7383487

Go言語の初心者が見ると幸せになれる場所
http://qiita.com/tenntenn/items/0e33a4959250d1a55045

VimでGoのコードを書くときにやっておきたいこと
http://qiita.com/methane/items/d82b9f28b97b5c3bd08a

VimFiler で NERDTree のような Explorer を快適に実現する方法
http://hrsh7th.hatenablog.com/entry/20120229/1330525683

できるようになること

VimFiler + Tagbar でIDEのような一覧性

VimFilerで後述する:VimFilerTreeコマンドとTagBarプラグインで:Tagbarコマンドを実行したものです。
ツリー表示の定番はNERDTreeですが個人的な好みでVimFilerを使っています。
それぞれファイル名や関数名にカーソルを合わせてEnterを押すとジャンプします。

VimFilerTree + Tagbar
画像だけを表示

時にはUnite-outlineも使いたい

:Unite outlineでアウトライン表示もできます。

Unite-outline
画像だけを表示

gdで定義にジャンプ

下のウインドウの15行目のNewAnsiColorWriterにカーソルを合わせてgdを入力したものです。
画面分割されて上のウインドウにその定義があるファイルを開いています。

Goto Declaration
画像だけを表示

:Godocでドキュメント表示

下のウインドウの17行目のfmt.Printlnにカーソルを合わせて:Godocコマンドを実行したものです。
画面分割されて上のウインドウにGodocを開いています。

Godoc
画像だけを表示

環境構築

環境変数

macでhomebrewの場合

export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

windowsの場合

GOROOT=C:\go
GOPATH=%USERPROFILE%\go
PATH=%GOPATH%\bin;%GOROOT%\bin;%PATH%

ツール

$GOPATH/binにコマンドがインストールされます。

go get code.google.com/p/go.tools/cmd/goimports
go get code.google.com/p/go.tools/cmd/godoc
go get code.google.com/p/go.tools/cmd/vet
go get code.google.com/p/go.tools/cmd/cover
go get github.com/nsf/gocode
go get github.com/golang/lint
go get code.google.com/p/rog-go/exp/cmd/godef
go get github.com/jstemmer/gotags

vimrc

各種vimプラグイン、Goの設定、VimFilerでツリー表示するための設定です。

~/.vimrc
" for Neobundle {{{if has('win32')lets:vim_home=expand('~/vimfiles')elselets:vim_home=expand('~/.vim')endifif has('vim_starting')let&runtimepath.=printf(',%s/bundle/neobundle.vim',s:vim_home)endifsetnocompatiblecall neobundle#rc(expand(s:vim_home.'/bundle'))

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'majutsushi/tagbar'
NeoBundle 'Shougo/vimfiler'
NeoBundle 'Shougo/vimproc'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'h1mesuke/unite-outline'
NeoBundle 'soh335/unite-outline-go'
NeoBundle 'dgryski/vim-godef'setrtp^=$GOROOT/misc/vimsetrtp^=$GOPATH/src/github.com/nsf/gocode/vimfiletype plugin indent onsyntaxon
NeoBundleCheck
" }}}" for golang {{{setpath+=$GOPATH/src
letg:gofmt_command ='goimports'auBufWritePre *.go Fmt
auBufNewFile,BufRead *.gosetsw=4noexpandtabts=4completeopt=menu,preview
auFileTypegocompilergo" }}}" VimFilerTree {{{
command! VimFilerTree call VimFilerTree()function VimFilerTree()
    exec ':VimFiler -buffer-name=explorer -split -simple -winwidth=45 -toggle -no-quit'wincmdtsetlwinfixwidthendfunction
autocmd!FileType vimfiler callg:my_vimfiler_settings()function!g:my_vimfiler_settings()
    nmap     <buffer><expr><CR> vimfiler#smart_cursor_map("\<Plug>(vimfiler_expand_tree)","\<Plug>(vimfiler_edit_file)")nnoremap<buffer>s          :call vimfiler#mappings#do_action('my_split')<CR>nnoremap<buffer>v          :call vimfiler#mappings#do_action('my_vsplit')<CR>endfunctionlet my_action = {'is_selectable' : 1}
function! my_action.func(candidates)wincmdp
    exec 'split '. a:candidates[0].action__path
endfunctioncall unite#custom_action('file','my_split', my_action)let my_action = {'is_selectable' : 1}
function! my_action.func(candidates)wincmdp
    exec 'vsplit '. a:candidates[0].action__path
endfunctioncall unite#custom_action('file','my_vsplit', my_action)" }}}
~/.vim/ftplugin/go.vim
" gotags {{{letg:tagbar_type_go = {
    \ 'ctagstype' : 'go',
    \ 'kinds'     : [
        \ 'p:package',
        \ 'i:imports:1',
        \ 'c:constants',
        \ 'v:variables',
        \ 't:types',
        \ 'n:interfaces',
        \ 'w:fields',
        \ 'e:embedded',
        \ 'm:methods',
        \ 'r:constructor',
        \ 'f:functions'
    \ ],
    \ 'sro' : '.',
    \ 'kind2scope' : {
        \ 't' : 'ctype',
        \ 'n' : 'ntype'
    \ },
    \ 'scope2kind' : {
        \ 'ctype' : 't',
        \ 'ntype' : 'n'
    \ },
    \ 'ctagsbin'  : 'gotags',
    \ 'ctagsargs' : '-sort -silent'
\ }
" }}}

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>