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

关于 YouCompleteMe 的 golang 代码提示

  •  
  •   denggj28 2018 年 4 月 7 日 4976 次点击
    这是一个创建于 2940 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近转到 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 年 4 月 8 日

    算是解决了问题,实在不甘心又去翻了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 年 4 月 7 日
    虽然很多人都觉得用 vim 开发很 old school,很 geek,但我觉得在这个年代,如果不是机器性能太差,一个顺手的 IDE 才是真正的生产力工具 -- 来自一个曾经用一整周的业余时间折腾各版本 vim 和各类 vim 插件,最后爱上 jetbrains 的人:pycharm 和 goland,真的好用
    6ufq0VLZn0DDkL80
        2
    6ufq0VLZn0DDkL80  
       2018 年 4 月 7 日
    @bolide2005 主要是有时候连开发机上只有 vim 能用
    denggj28
        3
    denggj28  
    OP
       2018 年 4 月 7 日
    @bolide2005 我也想找个顺手的 IDE,但是以前用 jetbrains 写 java 各种崩溃让我转向了 vim。写 go 用过国人的 LiteIDE,也有各种各样的问题,还不如用 vim,不过 goland 是没用过,买一套多少钱。。。说到底,还是钱不想花钱
    bolide2005
        4
    bolide2005  
       2018 年 4 月 7 日
    @cholerae #2 这种情况我一般就是两种方法:简单修改的话,用不着那些复杂的插件,有一些 syntax 的插件足够用了;复杂修改的话,本地写好,scp 过去

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


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

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

    我个人觉得没有必要过于鼓吹自己的偏好。效率高不高,自己干活才知道。
    Immortal
        30
    Immortal  
       2018 年 4 月 8 日
    还是无脑推荐 goland+vim 插件
    danielzhang0212
        31
    danielzhang0212  
       2018 年 4 月 8 日
    配置环境也算是爱好了。
    WangYanjie
        32
    WangYanjie  
       2018 年 4 月 8 日
    @bolide2005 第一 用 IDE 还是 vim,其实本质上是看你想要 IDE/vim 提供什么。第二 从我的经验来说 vim 并不落后。
    ABCDXYZs
        33
    ABCDXYZs  
       2018 年 4 月 8 日
    两行命令,无比简洁
    sudo apt-get install vim-youcompleteme
    vim-addons install youcompleteme
    leopku
        34
    leopku  
       2018 年 4 月 8 日
    竟然没人提 oni
    BBCCBB
        35
    BBCCBB  
       2018 年 4 月 8 日
    推荐用 deoplete|nvim-completion-manager,配置简单
    ivechan
        36
    ivechan  
       2018 年 4 月 8 日
    只是写 go 的话,可以用官方的 go 插件,体验还行。
    https://github.com/fatih/vim-go
    denggj28
        37
    denggj28  
    OP
       2018 年 4 月 8 日
    @ivechan 多谢推荐,不过我要写 c cpp py go,偶尔还要写些前端,自己配的 vim 习惯了
    jzdxeb
        38
    jzdxeb  
       2018 年 4 月 9 日 via iPhone
    试试 安装一个 vim-go 试试?
    golang83
        39
    golang83  
       2019 年 5 月 6 日   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     Solana     2923 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 83ms UTC 13:11 PVG 21:11 LAX 06:11 JFK 09:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86