为VIM添加GoLang语法突出显示

我正在尝试在Ubuntu上添加Go语言语法突出显示到VIM上,并在这里提供了资源和方向http://go-lang.cat-v.org/text-editors/vim/ 。

Go附带一个包含VIM语法设置的go.vim文件,上面的页面提供了以下说明

在〜/ .vim / syntax /中放置$ GOROOT / misc / vim / syntax / go.vim,并放入〜/ .vim / ftdetect / go.vim中:

 au BufRead,BufNewFile *.go set filetype=go 

这与我在别处看到的vim语法的定制程序差不多( Ubuntu 12.10上的Vim 7.3在任何地方都没有'ftplugin'目录,并且https://github.com/jnwhiteh/vim-golang/blob /master/readme.txt )

所以我认为我在创build目录时做的是正确的事情:
〜/ vim的
〜/的.vim /句法
〜/的.vim / ftdetect

并按照上面的说明添加

go.vim到〜/ .vim / syntax /并在〜/ .vim / ftdetect /中创build一个go.vim文件

 au BufRead,BufNewFile *.go set filetype=go 

然而,语法突出似乎并没有发生。 有什么我需要做的强制VIM看这些新的设置文件?

你可以将这些行添加到~/.vimrc

 set rtp+=$GOROOT/misc/vim filetype plugin indent on syntax on 

编辑这假定filetype plugin indent off这些行(即.vimrc文件的开始)之前,并可能会导致问题,如果不是。 请参阅下面的@ peterSO的回答以获得更安全的版本。

更新:

去1.4发行说明

杂记

标准存储库的顶级misc目录用于包含对编辑器和IDE的支持:插件,初始化脚本等等。 维护这些工作变得非常耗时,需要外部帮助,因为列出的许多编辑不被核心团队的成员使用。 它还要求我们决定哪个插件最适合给定的编辑器,即使是我们不使用的编辑器也是如此。 整个Go社区更适合pipe理这些信息。 因此,在Go 1.4中,这个支持已经从存储库中删除了。 相反,在维基页面上有一个策划的信息列表。


标准的Go发行版包含了go/misc/vim/ Vim的Go文件。 该目录包含一个包含安装说明的readme.txt文件。

readme.txt

Go的Vim插件( http://golang.org

要使用所有Vim插件,请将这些行添加到$HOME/.vimrc

 " Some Linux distributions set filetype in /etc/vimrc. " Clear filetype flags before changing runtimepath to force Vim to reload them. filetype off filetype plugin indent off set runtimepath+=$GOROOT/misc/vim filetype plugin indent on syntax on 

如果您想select较less的插件,请使用该文件其余部分的说明。

<< .. SNIP .. >>

在Debian上,我想在Ubuntu上是一样的,你只是:

 sudo apt-get install vim-gocomplete gocode vim-syntax-go vim-addon-manager install go-syntax vim-addon-manager install gocode 

要获得最好的语法突出显示,请尝试https://github.com/fatih/vim-go

这是一个整合了许多vim插件的新项目,并增加了许多function。 自述文件:

  • 改进的语法突出显示,例如函数,操作符,方法
  • 通过gocode自动完成支持
  • 保存更好的gofmt,保持光标位置,不会破坏你的撤消历史
  • 用godef去符号/声明
  • 通过goimports自动导入包
  • 编译并去build立你的软件包,安装它去安装
  • 快速运行你的当前文件/文件
  • 运行testing,看到quickfix窗口中的任何错误
  • 把你的代码与golint绑定
  • 运行你的代码槽去审查静态错误。
  • 先进的oracle分析工具
  • 列出所有源文件和依赖项
  • 用errcheck检查未检查的错误。
  • 综合和改进的片段。 支持ultisnips或neosnippet
  • 将您当前的代码分享到play.golang.org

除了我自己决定之外的任何理由,我们通过Debian软件包将Golang安装在我们的开发虚拟机上。 vim的这种特殊的分发方式并没有带来任何vim的好处,只要我能够通过searchfind它就可以知道。 无论如何,我决定走vundle路线,以快速部署的好东西,所有这些开发虚拟机。 如果你愿意的话,你也许可以把这个方法变成傀儡或者其他东西,但是我们并没有这样做。 无论如何,这是我所做的:

第1步:安装vundle: https : //github.com/gmarik/vundle

第二步:把这行放在你的.vimrc文件里(当然是: https : //github.com/jnwhiteh/vim-golang ),然后从vim +BundleInstall +qall或者从命令行运行vim vim与:BundleInstall

 Bundle 'jnwhiteh/vim-golang' 

第3步:保存这个小小的bash脚本,我把它当做govim.sh或者其他的, chmod +x govim.sh ,像./govim.sh

脚本如下:

 #!/bin/bash mkdir $HOME/.vim/ftdetect mkdir $HOME/.vim/syntax mkdir $HOME/.vim/autoload mkdir $HOME/.vim/autoload/go mkdir $HOME/.vim/ftplugin mkdir $HOME/.vim/ftplugin/go mkdir $HOME/.vim/indent mkdir $HOME/.vim/compiler mkdir $HOME/.vim/plugin mkdir $HOME/.vim/plugin/godoc ln -s $HOME/.vim/bundle/vim-golang/ftdetect/gofiletype.vim $HOME/.vim/ftdetect ln -s $HOME/.vim/bundle/vim-golang/syntax/go.vim $HOME/.vim/syntax/ ln -s $HOME/.vim/bundle/vim-golang/autoload/go/complete.vim $HOME/.vim/autoload/go/ ln -s $HOME/.vim/bundle/vim-golang/ftplugin/go.vim $HOME/.vim/ftplugin/ ln -s $HOME/.vim/bundle/vim-golang/ftplugin/go/*.vim $HOME/.vim/ftplugin/go/ ln -s $HOME/.vim/bundle/vim-golang/indent/go.vim $HOME/.vim/indent/ ln -s $HOME/.vim/bundle/vim-golang/compiler/go.vim $HOME/.vim/compiler/ ln -s $HOME/.vim/bundle/vim-golang/plugin/godoc/godoc.vim $HOME/.vim/plugin/godoc/ ln -s $HOME/.vim/bundle/vim-golang/syntax/godoc.vim $HOME/.vim/syntax/ 

Kaching! 你现在已经装好了所有的东西,有人纠正我,如果我错了,但可能比官方的Golang发行版还要多。 我不知道这要么还没有尝试过,但我认为,runtimepath / rtp得到破坏,如果你使用Vundle与其他答案在这里反正。

这个页面说:

 Place $GOROOT/misc/vim/syntax/go.vim in ~/.vim/syntax/ and put the following in ~/.vim/ftdetect/go.vim: au BufRead,BufNewFile *.go set filetype=go 

它为我工作,只有我一开始没有find/misc/vim/go.vim目录。 所以我复制的文件从另一台计算机上安装去/ usr / local / go / …

原来上面的方向稍微含糊不清。

~/.vim/syntax/go.vim应该和~/.vim/ftdetect/go.vim具有相同的内容

只有~/.vim/ftdetect/go.vim必须附加au BufRead,BufNewFile *.go set filetype=go

如果从字面上看,方向告诉你创build一个文件~/.vim/ftdetect/go.vim只包含

  au BufRead,BufNewFile *.go set filetype=go 

我想这就是情境知识的起源。只有我以前从来没有这样做过,也没有这样的背景。 谢谢大家!