Golang Go语言中关于YouCompleteMe的代码提示

最近转到 go 开发,编辑器还是用的 vim 配合 ycm,之前写 py 一直没问题,但是现在写 go,ycm 就不正常了,体现在标准库可以正常提示,第三方的就不行,自定义包有时可以有时不可以。 我是用的 glide,第三方包都是在项目的 vendor 下,我看了 gocode,已经支持 vendor 目录了,是不是 ycm 的 gocode 还是旧版的缘故?看 gocode 是提示找不到库,所以不能提示

附上 ycm 的日志:

Printing YouCompleteMe debug information...
-- Client logfile: /var/folders/n9/3xkfkvg14hg1y5s6gb0rt2hm0000gn/T/ycm_V4rMdM.log
-- Server Python interpreter: /usr/bin/python
-- Server Python version: 2.7.10
-- Server has Clang support compiled in: True
-- Clang version: clang version 6.0.0 (tags/RELEASE_600/final)
-- Extra configuration file found and loaded
-- Extra configuration path: /Users/noisyguy/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
-- Go completer debug information:
--   Gocode running at: http://127.0.0.1:56711
--   Gocode process ID: 8520
--   Gocode executable: /Users/noisyguy/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/gocode/gocode
--   Gocode logfiles:
--     /var/folders/n9/3xkfkvg14hg1y5s6gb0rt2hm0000gn/T/gocode_56711_stdout_iv8Bgf.log
--     /var/folders/n9/3xkfkvg14hg1y5s6gb0rt2hm0000gn/T/gocode_56711_stderr_ieYfnG.log
--   Godef executable: /Users/noisyguy/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/godef/godef
-- Server running at: http://127.0.0.1:56707
-- Server process ID: 8389
-- Server logfiles:
--   /var/folders/n9/3xkfkvg14hg1y5s6gb0rt2hm0000gn/T/ycmd_56707_stdout_cGL9ys.log
--   /var/folders/n9/3xkfkvg14hg1y5s6gb0rt2hm0000gn/T/ycmd_56707_stderr_Bqz6zK.log

gocode 日志:

696975 2018/04/07 21:43:02 Import path "github.com/json-iterator/go" was not resolved
696976 2018/04/07 21:43:02 Gocode's build context is:
696977 2018/04/07 21:43:02  GOROOT: /usr/local/go
696978 2018/04/07 21:43:02  GOPATH: /Users/noisyguy/go
696979 2018/04/07 21:43:02  GOOS: darwin
696980 2018/04/07 21:43:02  GOARCH: amd64
696981 2018/04/07 21:43:02  BzlProjectRoot: ""
696982 2018/04/07 21:43:02  GBProjectRoot: ""
696983 2018/04/07 21:43:02  lib-path: ""
696984 2018/04/07 21:43:02 Import path "github.com/PuerkitoBio/goquery" was not resolved
696985 2018/04/07 21:43:02 Gocode's build context is:
696986 2018/04/07 21:43:02  GOROOT: /usr/local/go
696987 2018/04/07 21:43:02  GOPATH: /Users/noisyguy/go
696988 2018/04/07 21:43:02  GOOS: darwin
696989 2018/04/07 21:43:02  GOARCH: amd64
696990 2018/04/07 21:43:02  BzlProjectRoot: ""
696991 2018/04/07 21:43:02  GBProjectRoot: ""
696992 2018/04/07 21:43:02  lib-path: ""
696993 2018/04/07 21:43:02 Error parsing input file (inner block):
696994 2018/04/07 21:43:02  160:72: expected selector or type assertion, found ';'
696995 2018/04/07 21:43:02  160:73: missing ',' in argument list
696996 2018/04/07 21:43:02  160:78: expected operand, found ')'
696997 2018/04/07 21:43:02  164:9: expected ')', found 'return'
696998 2018/04/07 21:43:02  164:16: missing ',' in argument list
696999 2018/04/07 21:43:02  164:19: expected operand, found ','
697000 2018/04/07 21:43:02  166:5: missing ',' in argument list
697001 2018/04/07 21:43:02  166:14: missing ',' in argument list
697002 2018/04/07 21:43:02  166:17: expected operand, found 'range'
697003 2018/04/07 21:43:02  170:5: missing ',' in argument list
697004 2018/04/07 21:43:02  170:20: missing ',' before newline in argument list
697005 2018/04/07 21:43:02  171:1: expected operand, found '}'
697006 2018/04/07 21:43:02  171:2: expected ')', found 'EOF'
697007 2018/04/07 21:43:02  171:2: expected ';', found 'EOF'
697008 2018/04/07 21:43:02  171:2: expected ';', found 'EOF'
697009 2018/04/07 21:43:02  171:2: expected ';', found 'EOF'
697010 2018/04/07 21:43:02  171:2: expected '{', found 'EOF'
697011 2018/04/07 21:43:02  171:2: expected '}', found 'EOF'
697012 2018/04/07 21:43:02  171:2: expected '}', found 'EOF'
697013 2018/04/07 21:43:02  171:2: expected '}', found 'EOF'
697014 2018/04/07 21:43:02  171:2: missing ',' in argument list
697015 2018/04/07 21:43:02 extracted expression tokens: titleTag.First()
697016 2018/04/07 21:43:02 Offset: 0
697017 2018/04/07 21:43:02 Number of candidates found: 0
697018 2018/04/07 21:43:02 Candidates are:

Golang Go语言中关于YouCompleteMe的代码提示

更多关于Golang Go语言中关于YouCompleteMe的代码提示的实战教程也可以访问 https://www.itying.com/category-94-b0.html

40 回复

虽然很多人都觉得用 vim 开发很 old school,很 geek,但我觉得在这个年代,如果不是机器性能太差,一个顺手的 IDE 才是真正的生产力工具 – 来自一个曾经用一整周的业余时间折腾各版本 vim 和各类 vim 插件,最后爱上 jetbrains 的人:pycharm 和 goland,真的好用

更多关于Golang Go语言中关于YouCompleteMe的代码提示的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


主要是有时候连开发机上只有 vim 能用

我也想找个顺手的 IDE,但是以前用 jetbrains 写 java 各种崩溃让我转向了 vim。写 go 用过国人的 LiteIDE,也有各种各样的问题,还不如用 vim,不过 goland 是没用过,买一套多少钱。。。说到底,还是钱不想花钱

#2 这种情况我一般就是两种方法:简单修改的话,用不着那些复杂的插件,有一些 syntax 的插件足够用了;复杂修改的话,本地写好,scp 过去

#3 上万能的淘宝啊

看了一下淘宝,2.88 元,靠谱吗?

#5 说实话我没买过,找个评论数多的,按照我以前买迅雷会员的经验的话,一般这种店都是冲量的,应该不骗人

「以前用 jetbrains 写 java 各种崩溃」不用怀疑,该换电脑了。

原来是用 11 年的 mpb,8G 内存,写 java 真的是风扇狂转啊

试试看配置是不是有问题。我用 Ycm 写 C++ 一直都很顺手。

恕我直言,才一周的时间,连 vim 的皮毛都摸不到


我怀疑是你的 gocode 的问题,YCM 重新 build 一下试试,我用的一直都没啥问题,补全速度很快

恕我直言,一个工具如果没法带来显著的效率提升,那就不值得那么多时间来研究。

对啊,JB 这种效率低下的工具根本不值得花钱购买

试试 vs code,加上 vim 和 golang 插件 体验应该比 vim 爽的。

重新更新了 ycm 也 rebuild 了,但是还是这个问题,写 C 和 C++是没问题,就是 go 不行,请问你是用 glide 吗?第三方库是在 vendor 下吗? google 了很多天,也有很多人有这方面的问题,不过在 ycm 的 github 上没看到,只是在 gocode 里看到有这方面的讨论,主要是关于 gocode 对 vendor 的支持

早就想试试 vscode 了,找个机会体验体验,有什么要注意的吗?

可以试试这个。

刚刚试了一下 vsc,只装了 go 和 vim 插件,只用了 5 分钟,不知道是不是没索引完项目,总体来说速度很慢,打字都要慢半秒以上,就像看丢帧的电影一样。我的配置是 I7 7700 32G 内存,macOS 系统,按理说配置和平台不是瓶颈,只能说这个 editor 还是有些问题,vsc 定位是在编辑器,但是流畅度却是在 IDE 水平上。明天有空试试新建一个项目,看看是不是这个问题。

deoplete ,vim lsp 了解一下

为啥实在不甘心才去找 issue 这类问题不是先看 issue 吗

Emacs 也是,需要先 go install。然后第三方代码才能提示。

恕我直言,一周时间都搞不定环境的工具有什么效率可言?

ide 也许对大多数人好,但在一些开发环境,vim 或者 Emacs 才是最方便。 哪些所谓的折腾,到最後都会 pay off. 除非你实在闲的没事做,折腾太过。

FYI,pycharm 和 goland 的 vim mode 各位了解一下,配合 IDE 本身的快捷键,全键盘操作体验更好

等你折腾一年的 vim 的时候就会说 vim 才是真正的生产力工具了,什么 IDE 的 vim 模式也一般就是个玩具。虽然刚开始 vim 有很多不方便,但一个顺手的工具是值得花时间去打磨和练习的,这些学习成本能带来极大的效率提升和成就感。

当然喜欢 IDE 的也没问题,但请不要随便定义什么生产力工具。

把 go 插件的设置一下: “go.gocodeAutoBuild”: false 试试。有时候 vsc 确实会抽风 cpu 用完,我用 htop 发现都是 gocode 的锅。

没写过 go 但 c 来讲 neocomplcache 个人感觉比 YCM 更顺手和安逸

会用 vim 的话,vim 对 go 的支持还是挺好的。 不用 vim 的话,我感觉 vscode 也很不错。

我个人觉得没有必要过于鼓吹自己的偏好。效率高不高,自己干活才知道。

还是无脑推荐 goland+vim 插件

配置环境也算是爱好了。

第一 用 IDE 还是 vim,其实本质上是看你想要 IDE/vim 提供什么。第二 从我的经验来说 vim 并不落后。

两行命令,无比简洁
sudo apt-get install vim-youcompleteme
vim-addons install youcompleteme

竟然没人提 oni

推荐用 deoplete|nvim-completion-manager,配置简单

只是写 go 的话,可以用官方的 go 插件,体验还行。
https://github.com/fatih/vim-go

多谢推荐,不过我要写 c cpp py go,偶尔还要写些前端,自己配的 vim 习惯了

试试 安装一个 vim-go 试试?


哥们,使用 vim-go,<c-x> <x-o>就可以了。或则你在做个 map 映射一下一个快捷键提示,ycm 默认的代码提示等太烦人了。自己就跑出来了。老子打个 Println 还需要你妹的提示呀。
如果你非要在 ycm 里面更好的支持第三方包,改改 vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/go/src/github.com/mdempsky/gocode/internal/
里的 gocode 源代码…

顺便吐槽一下,ycm 太几把重了… 编译又是 install.py 又是 gcc 又是 g++,尼玛自动补全又用 python 写个 completer.py 去调 gocode…

一个插件老子在某些 vps 上编译要 30 分钟。。曹。。。。。。一个 C++游戏服务器的重新 build 一下也不过 30 分钟

为了吐槽和帮你,我专门注册的这个网站,网站的问题也是搞笑,问我一个 ip 段属于那个公司…
我以为程序员开发的东西不是应该保持 simple & easy to use 的嘛…

还有 vscode 哪里不好? vim 嘛是情怀,vscode 嘛也是情怀,微软就是情怀… ibm pcdos -> msdos -> win2 -> win3.1 -> win95 -> win98 -> winme -> win2000 -> compaq digital unix -> linux -> winxp -> winvista … win10
对于我这种 91 年用电脑的人来说,dos borland c++ / vi/vim 就是情怀。我们用了那么多年的微软产品,visual studio 到现在 vscode,微软出品必属精品。其他的就用过 eclipse 和 andriod studio,写 html/css/js 感觉 editplus zen coding 这类轻量级文本编辑器完爆 n 多所谓的 IDE
goland 还要收钱??我的天…

还有 linux 下 go 的调试也可以在界面里面使用 vim-go,麻烦第一点的是清除断点,需要使用 sign,或则在 cli 下直接 dlv 都挺好,go 也可以用 gdb 调试 ,不过 golang.org 也推荐 dlv。
augroup godebug
290 au! * <buffer>
291 " 设置 dlv for vim-go-debug 的按键
292 au FileType go nnoremap <buffer><F5> :GoDebugContinue<CR>
293 au FileType go nnoremap <buffer><F6> :GoDebugPrint<CR>
294 au FileType go nnoremap <buffer><F7> :GoDebugStart<CR>
295 au FileType go nnoremap <buffer><F8> :GoDebugStop<CR>
296 au FileType go nnoremap <buffer><F9> :GoDebugBreakpoint<CR>
297 au FileType go nnoremap <buffer><F10> :GoDebugNext<CR>
298 au FileType go nnoremap <buffer><F11> :GoDebugStep<CR>
299 " 清除断点,清除前最好 sing place 一下,下面的是全部清除
300 au FileType go nnoremap <buffer><F12> :sign unplace *<CR>
301 augroup END
302 doautocmd godebug Filetype go

sign place 列出断点 id,单独清除可以在 vimrc 写个函数,先获取 corsor 的位置,然后获取行号,然后单独清除
但是手动也挺快。

在Golang(Go语言)开发环境中,YouCompleteMe(YCM)是一个非常强大的代码补全引擎,尤其对于Vim或Neovim用户来说,它能显著提升编码效率。以下是如何在Go语言项目中设置和使用YouCompleteMe的代码提示功能的简要指南:

  1. 安装YouCompleteMe: 确保你的Vim或Neovim已经安装,并通过Vundle、Plug等插件管理器安装YouCompleteMe。安装过程可能涉及编译YCM的C++组件,确保系统安装了必要的编译工具和依赖。

  2. 配置Go语言支持: YCM本身不直接提供Go语言的补全,但可以通过配置与gocodegopls等Go语言专用补全工具集成。推荐使用gopls(Go Language Server Protocol),它是官方维护的Go语言服务器,提供精准的补全、跳转定义等功能。

  3. 配置.vimrcinit.vim: 在配置文件中添加对gopls的支持,例如设置let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py',并确保.ycm_extra_conf.py中正确配置了gopls的路径和参数。

  4. 启动与测试: 重新加载Vim或Neovim配置,打开一个Go文件,开始编码。你应该会看到YCM开始提供Go语言的代码补全建议。

  5. 调试与优化: 如果遇到补全不准确或延迟的问题,可以尝试调整gopls的配置,或者查看YCM的日志输出进行调试。

通过上述步骤,你应该能够在Go语言项目中顺利集成并使用YouCompleteMe的代码提示功能。

回到顶部