62

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

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

将 $GOROOT/misc/vim/syntax/go.vim 放入 ~/.vim/syntax/ 并将以下内容放入 ~/.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 )

所以我认为我在创建目录时做对了:
~/.vim
~/.vim/syntax
~/.vim/ftdetect

并按照上述说明添加

go.vim 到 ~/.vim/syntax/ 并在 ~/.vim/ftdetect/ 中创建一个文件 go.vim,其中包含

au BufRead,BufNewFile *.go set filetype=go

然而语法高亮似乎没有发生。我需要做些什么来强制 VIM 查看这些新的设置文件吗?

4

11 回答 11

62

更新:

Go 1.4 发行说明

杂记

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


标准的 Go 发行版包括用于 Vim 的 Go 文件go/misc/vim/。该目录包含一个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

如果您想选择更少的插件,请使用此文件其余部分中的说明。

<<..剪辑..>>

于 2013-03-22T22:20:05.263 回答
40

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

sudo apt-get install vim-gocomplete gocode vim-syntax-go
vim-addon-manager install go-syntax
vim-addon-manager install gocode
于 2014-06-25T20:17:26.987 回答
23

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

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

编辑这假设filetype plugin indent off在这些行之前(即.vimrc文件的开头),如果不是,可能会导致问题。有关更安全的版本,请参阅下面的@peterSO 答案。

于 2013-03-22T22:08:26.983 回答
21

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

这是一个新项目,整合了许多 vim 插件并添加了许多功能。从自述文件:

  • 改进的语法突出显示,例如函数、运算符、方法..
  • 通过 gocode 支持自动完成
  • 保存时更好的 gofmt,保持光标位置并且不会破坏您的撤消历史记录
  • 使用 godef 转到符号/声明
  • 通过 goimports 自动导入包
  • 编译并构建你的包,用 go install 安装它
  • 快速运行您当前的文件/文件
  • 运行 go test 并在 quickfix 窗口中查看任何错误
  • 用 golint 整理你的代码
  • 通过 go vet 运行您的代码以捕获静态错误。
  • 带有 oracle 的高级源分析工具
  • 列出所有源文件和依赖项
  • 使用 errcheck 检查未检查的错误。
  • 集成和改进的片段。支持 ultisnips 或 neosnippet
  • 将您当前的代码分享到 play.golang.org
于 2014-04-06T17:18:58.653 回答
9

2015 年 1 月 25 日

请参阅https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins,因为现在 Go repo 中的所有编辑器和 shell 支持都已删除(https://codereview.appspot.com/105470043

于 2015-01-25T16:30:06.633 回答
5

我没有找到有关为 CentOS 7 打开 vim 语法突出显示的说明。已经测试了随后的说明以在 CentOS 7.3.1611 上工作。首先,在您的主目录中创建以下目录:

$ mkdir ~/.vim/ftdetect/

然后,go.vim在上述目录中创建一个名为的文件,其内容为:

au BufRead,BufNewFile *.go set filetype=go

下载 Go 的语法定义文件:vim.go。将其传输到正确的系统范围目录,以便多个用户可以共享:

$ sudo mv -i go.vim /usr/share/vim/vim74/syntax/
于 2018-10-04T07:05:12.187 回答
4

出于我自己决定之外的任何原因,我们通过 Debian 软件包在我们的开发虚拟机上安装了 Golang。据我通过搜索得知,这种特殊的 vim 发行版并没有附带任何 vim 的好东西。无论如何,我决定走 vundle 路线,以便将好东西快速部署到所有这些开发虚拟机。如果您愿意,您可能可以将此方法用于 puppet 或其他东西,但我们没有这样做。无论如何,这就是我所做的:

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

第2步:将这一行放在你的.vimrc中(当然是从这里开始:https ://github.com/jnwhiteh/vim-golang ),然后从命令行运行vim,vim +BundleInstall +qall或者从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/

卡庆!你现在已经安装了所有的好东西,如果我错了,有人纠正我,但可能比官方 Golang 发行版附带的更多。我还没有尝试过,对此我不知道,但我认为如果你在这里使用 Vundle 和其他答案,runtimepath/rtp 会被破坏。

于 2014-01-02T22:23:17.407 回答
4

它应该很容易 1, 2, 3 :

  1. 下载文件vim.go并将其放在~/.vim/syntax名称下(如果您还没有该目录,请go.vim创建该目录)。syntax

  2. 如果您还没有该文件~/.vim/ftdetect/go.vim,请创建它(必要时创建文件夹)。

  3. .vim/ftdetect/go.vim中,添加以下行:au BufRead,BufNewFile *.go set filetype=go

于 2018-12-24T15:30:29.993 回答
3

这个页面说:

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

它对我有用,只是我一开始没有找到 /misc/vim/go.vim 目录。所以我从另一台安装了 go on /usr/local/go/... 的计算机上复制了文件。

于 2014-01-16T14:36:52.443 回答
0

这就是在 MAC 中对我有用的

let g: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'
\ }

let g:go_highlight_structs = 1
let g:go_highlight_methods = 1
let g:go_highlight_functions = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
syntax on
  • 安装 gotags - 例如 brew install gotags
  • 生成 ctags - 例如 gorags -R 。> ./标签
  • 从新的 shell 打开 vim
于 2020-08-22T06:11:32.197 回答
-1

原来上面的方向有点模棱两可。

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

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

如果从字面上理解,说明会告诉您创建一个~/.vim/ftdetect/go.vim仅包含

         au BufRead,BufNewFile *.go set filetype=go

我想这就是上下文知识应该发挥作用的地方。只是我以前从未这样做过,也没有这样的上下文。谢谢大家!

于 2013-03-22T21:23:05.797 回答