V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
denggj28
V2EX  ›  Go 编程语言

关于 YouCompleteMe 的 golang 代码提示

  •  
  •   denggj28 · 2018-04-07 22:20:48 +08:00 · 4214 次点击
    这是一个创建于 2413 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近转到 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:
    
    第 1 条附言  ·  2018-04-08 03:01:03 +08:00

    算是解决了问题,实在不甘心又去翻了ycm的issue,找到了一个方法,其实很简单,在项目下执行go install,这样gocode就会去vendor里寻找第三方库,不过每添加一个新库,都要执行一次才行。 最后吐槽一下vs code,打字速度实在不敢恭唯,C-f C-b翻页速度也是慢得不敢想象,就连光标的移动也只能用定格动画来形容,比sublime text慢了不止一个级别。我还是坚定我的信仰,尽量不去尝试任何IDE,虽然vs code并不算是IDE。调试工具,让它见鬼去吧,print大法很好用。

    39 条回复    2019-05-06 21:13:26 +08:00
    bolide2005
        1
    bolide2005  
       2018-04-07 22:35:35 +08:00
    虽然很多人都觉得用 vim 开发很 old school,很 geek,但我觉得在这个年代,如果不是机器性能太差,一个顺手的 IDE 才是真正的生产力工具 -- 来自一个曾经用一整周的业余时间折腾各版本 vim 和各类 vim 插件,最后爱上 jetbrains 的人:pycharm 和 goland,真的好用
    cholerae
        2
    cholerae  
       2018-04-07 22:39:49 +08:00
    @bolide2005 主要是有时候连开发机上只有 vim 能用
    denggj28
        3
    denggj28  
    OP
       2018-04-07 22:46:51 +08:00
    @bolide2005 我也想找个顺手的 IDE,但是以前用 jetbrains 写 java 各种崩溃让我转向了 vim。写 go 用过国人的 LiteIDE,也有各种各样的问题,还不如用 vim,不过 goland 是没用过,买一套多少钱。。。说到底,还是钱不想花钱
    bolide2005
        4
    bolide2005  
       2018-04-07 22:49:37 +08:00
    @cholerae #2 这种情况我一般就是两种方法:简单修改的话,用不着那些复杂的插件,有一些 syntax 的插件足够用了;复杂修改的话,本地写好,scp 过去

    @denggj28 #3 上万能的淘宝啊
    denggj28
        5
    denggj28  
    OP
       2018-04-07 22:54:18 +08:00
    @bolide2005 看了一下淘宝,2.88 元,靠谱吗?
    bolide2005
        6
    bolide2005  
       2018-04-07 22:57:31 +08:00
    @denggj28 #5 说实话我没买过,找个评论数多的,按照我以前买迅雷会员的经验的话,一般这种店都是冲量的,应该不骗人
    iyaozhen
        7
    iyaozhen  
       2018-04-07 22:57:50 +08:00 via Android
    @denggj28 「以前用 jetbrains 写 java 各种崩溃」不用怀疑,该换电脑了。
    denggj28
        8
    denggj28  
    OP
       2018-04-07 23:42:15 +08:00
    @iyaozhen 原来是用 11 年的 mpb,8G 内存,写 java 真的是风扇狂转啊
    MCVector
        9
    MCVector  
       2018-04-07 23:52:36 +08:00 via Android   ❤️ 1
    试试看配置是不是有问题。我用 Ycm 写 C++ 一直都很顺手。
    glues
        10
    glues  
       2018-04-07 23:58:07 +08:00   ❤️ 4
    @bolide2005 恕我直言,才一周的时间,连 vim 的皮毛都摸不到


    @denggj28 我怀疑是你的 gocode 的问题,YCM 重新 build 一下试试,我用的一直都没啥问题,补全速度很快
    tyfulcrum
        11
    tyfulcrum  
       2018-04-08 00:00:24 +08:00
    @glues 恕我直言,一个工具如果没法带来显著的效率提升,那就不值得那么多时间来研究。
    glues
        12
    glues  
       2018-04-08 00:04:28 +08:00   ❤️ 1
    @tyfulcrum 对啊,JB 这种效率低下的工具根本不值得花钱购买
    fatttt
        13
    fatttt  
       2018-04-08 00:07:17 +08:00 via Android
    试试 vs code,加上 vim 和 golang 插件 体验应该比 vim 爽的。
    denggj28
        14
    denggj28  
    OP
       2018-04-08 00:08:58 +08:00
    @glues 重新更新了 ycm 也 rebuild 了,但是还是这个问题,写 C 和 C++是没问题,就是 go 不行,请问你是用 glide 吗?第三方库是在 vendor 下吗? google 了很多天,也有很多人有这方面的问题,不过在 ycm 的 github 上没看到,只是在 gocode 里看到有这方面的讨论,主要是关于 gocode 对 vendor 的支持
    denggj28
        15
    denggj28  
    OP
       2018-04-08 00:20:20 +08:00
    @fatttt 早就想试试 vscode 了,找个机会体验体验,有什么要注意的吗?
    WendellSun
        16
    WendellSun  
       2018-04-08 00:43:58 +08:00
    WendellSun
        17
    WendellSun  
       2018-04-08 00:44:33 +08:00
    可以试试这个。
    denggj28
        18
    denggj28  
    OP
       2018-04-08 01:20:17 +08:00
    @fatttt 刚刚试了一下 vsc,只装了 go 和 vim 插件,只用了 5 分钟,不知道是不是没索引完项目,总体来说速度很慢,打字都要慢半秒以上,就像看丢帧的电影一样。我的配置是 I7 7700 32G 内存,macOS 系统,按理说配置和平台不是瓶颈,只能说这个 editor 还是有些问题,vsc 定位是在编辑器,但是流畅度却是在 IDE 水平上。明天有空试试新建一个项目,看看是不是这个问题。
    pittcat
        19
    pittcat  
       2018-04-08 07:27:21 +08:00
    deoplete ,vim lsp 了解一下
    rashawn
        20
    rashawn  
       2018-04-08 07:29:34 +08:00 via iPhone
    为啥实在不甘心才去找 issue 这类问题不是先看 issue 吗
    wlwood
        21
    wlwood  
       2018-04-08 07:32:11 +08:00 via Android
    Emacs 也是,需要先 go install。然后第三方代码才能提示。
    bolide2005
        22
    bolide2005  
       2018-04-08 07:34:08 +08:00 via Android
    @glues 恕我直言,一周时间都搞不定环境的工具有什么效率可言?
    introom
        23
    introom  
       2018-04-08 07:36:54 +08:00 via Android
    ide 也许对大多数人好,但在一些开发环境,vim 或者 Emacs 才是最方便。 哪些所谓的折腾,到最後都会 pay off. 除非你实在闲的没事做,折腾太过。
    bolide2005
        24
    bolide2005  
       2018-04-08 08:18:24 +08:00 via Android
    FYI,pycharm 和 goland 的 vim mode 各位了解一下,配合 IDE 本身的快捷键,全键盘操作体验更好
    kiwi95
        25
    kiwi95  
       2018-04-08 08:58:13 +08:00 via iPhone
    等你折腾一年的 vim 的时候就会说 vim 才是真正的生产力工具了,什么 IDE 的 vim 模式也一般就是个玩具。虽然刚开始 vim 有很多不方便,但一个顺手的工具是值得花时间去打磨和练习的,这些学习成本能带来极大的效率提升和成就感。

    当然喜欢 IDE 的也没问题,但请不要随便定义什么生产力工具。
    fatttt
        26
    fatttt  
       2018-04-08 10:02:12 +08:00
    @denggj28 把 go 插件的设置一下: "go.gocodeAutoBuild": false 试试。有时候 vsc 确实会抽风 cpu 用完,我用 htop 发现都是 gocode 的锅。
    tomychen
        27
    tomychen  
       2018-04-08 14:01:21 +08:00
    没写过 go 但 c 来讲 neocomplcache 个人感觉比 YCM 更顺手和安逸
    ylcc
        28
    ylcc  
       2018-04-08 14:03:29 +08:00
    GoLand
    markx
        29
    markx  
       2018-04-08 14:31:29 +08:00
    会用 vim 的话,vim 对 go 的支持还是挺好的。 不用 vim 的话,我感觉 vscode 也很不错。

    我个人觉得没有必要过于鼓吹自己的偏好。效率高不高,自己干活才知道。
    Immortal
        30
    Immortal  
       2018-04-08 14:41:03 +08:00
    还是无脑推荐 goland+vim 插件
    danielzhang0212
        31
    danielzhang0212  
       2018-04-08 15:32:59 +08:00
    配置环境也算是爱好了。
    WangYanjie
        32
    WangYanjie  
       2018-04-08 15:39:19 +08:00
    @bolide2005 第一 用 IDE 还是 vim,其实本质上是看你想要 IDE/vim 提供什么。第二 从我的经验来说 vim 并不落后。
    ABCDXYZs
        33
    ABCDXYZs  
       2018-04-08 17:15:56 +08:00
    两行命令,无比简洁
    sudo apt-get install vim-youcompleteme
    vim-addons install youcompleteme
    leopku
        34
    leopku  
       2018-04-08 17:18:00 +08:00
    竟然没人提 oni
    BBCCBB
        35
    BBCCBB  
       2018-04-08 21:15:47 +08:00
    推荐用 deoplete|nvim-completion-manager,配置简单
    ivechan
        36
    ivechan  
       2018-04-08 21:27:11 +08:00
    只是写 go 的话,可以用官方的 go 插件,体验还行。
    https://github.com/fatih/vim-go
    denggj28
        37
    denggj28  
    OP
       2018-04-08 21:38:16 +08:00
    @ivechan 多谢推荐,不过我要写 c cpp py go,偶尔还要写些前端,自己配的 vim 习惯了
    jzdxeb
        38
    jzdxeb  
       2018-04-09 09:39:15 +08:00 via iPhone
    试试 安装一个 vim-go 试试?
    golang83
        39
    golang83  
       2019-05-06 21:13:26 +08:00   ❤️ 1
    @denggj28
    哥们,使用 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 的位置,然后获取行号,然后单独清除
    但是手动也挺快。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4421 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:07 · PVG 18:07 · LAX 02:07 · JFK 05:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.