vscode 写 go 连最基础的补全功能都做得这么差的吗

157 天前
 BeautifulSoap

一直用的都是 goland/idea 写 go ,体验了下用 vsocde 开发 go ,结果发现怎么连最基础的补全功能都这么差

有点无法理解说 vscode 写 go 的体验和 goland 差不多的是认真的吗。。。。。

下面是一个简单到不能再简单的的例子,如果是我用 vscode 姿势不对,希望有人能指出问题所在

go mod 初始化好项目用 vsocde 打开(确保 gopls 的 lsp 已经正确运行),写一个 utils 包 utils/utils.go,内容如下:

package utils

func ThisIsMyHelperFunction() string {
	return "hello"

}

关掉这个文件的标签页,打开 main.go ,输入 ThisIsMy,我自然期待补全会给出对应的函数候补,结果 vscode 根本跳不出任何候补。不是,vscode 这么离谱的吗

然后我发现,把utils.go 文件作为非活动标签页打开在边上,然后再输 ThisIsMy ,这次候补里出现了,但是它只是作为一个纯字符串出现,vscode 甚至都无法识别出它是个函数,tab 上去之后 ctrl + . 甚至都没法正常导包,提示不存在定义

然后翻了半天 vscode 官网,才发现说明有这一句

As you type in a Go file, you can see IntelliSense providing you with suggested completions. This even works for members in current, imported, and not yet imported packages. Just type any package name followed by ., and you will get suggestions for the corresponding package members.

不是,你的意思是我要用一个类型 or 函数之类的,必须从所属的包开始输入吗?一个项目复杂起来,那么多目录那么多包谁能清楚记得要用的东西在哪个包啊。。。。。。

而与之相对的,在 goland/idea 中写 go 项目,我只要输入 ThisIs 就能跳出对应内容,tab 后就直接完成了补全+添加包前缀+自动 import 。我曾经以为这种功能甚至是基础到不能再基础的功能,结果没想到。。。。

9302 次点击
所在节点    Visual Studio Code
97 条回复
Yadomin
157 天前
不同的 LSP 实现不一样,比如我用 clangd 写 cpp ,就经常帮我 xjb include
kdwnil
157 天前
@BeautifulSoap #13 这个就各有取舍了,我个人选择 vsc 开发主要是要用 vsc-remote ,jetbrains 的远程开发什么情况大家都懂。另外跟站里很多人不同,我其实不太喜欢 jb 的 git 功能,太复杂了,不如 vsc 一路点加号。另外 jb 今年也不给开源项目续开源授权我也没得用。

不过说实话这些跟 go 开发关系都扯远了
UnluckyNinja
157 天前
@coolcoffee #16 光标移动后 tab 就应该是输入制表符,你说的其实是 ctrl+space 重新唤起 intellisense ,在这个状态下 tab 才是补全功能(输入字母时自动切换到这个状态)。否则的话你想插入制表符时变成补全,岂不是更反直觉?
crossoverJie
157 天前
我选择使用 idea 配合其他语言的插件,少安装几个 App 也能实现 90% 的功能了( Python 、Go 都是这么玩的)。
woniu7
157 天前
v2 还有人说他是秦始皇呢
做的不算差吧,反正我就用 gopl 开发,没用过 golang 。可能是因为你降级体验。
你 golang 这方面效率确实高,工具那不是看人嘛,cursor 某些方面效率不是爆你 golang 。
你记不住包名却记得住精确的函数名么,项目大了你的模糊函数名太多了呢,还有解析项目耗时和内存消耗,都是要权衡的,这是 gopl 的决定,作为 go 开发者觉得免费的 gopl 并不是不能用。
mkfoy
157 天前
哥, 创建一个 mod 文件吧。 就有了。
archxm
157 天前
我最近几年一直 vscode ,感觉还好吧。
以前 goland 也用了一年。没发现有啥特别大差别。
Vegetable
157 天前
@BeautifulSoap 找 symbol 不需要文本搜索,可以使用 ctrl+t 开启工作区符号搜索。
xuhuanzy
157 天前
我正在做 lualsp ,vscode 不背这个锅,这是 lsp 实现问题,jb 家付费的功能更完善合情合理。
deplives
157 天前
不是,vscode 就是个编辑器,就跟 vim 似的,不是 ide ,功能都靠插件扩展,这也能怪 vscode ??
xuhuanzy
157 天前
这个功能实现非常简单,遍历所有 function 符号就行了,不做纯属开发者的取舍问题,你可以花点时间分叉一个更符合 goland 使用习惯的 lsp 。
archxm
157 天前
@deplives vscode 整 python golang 都还不错,整 cpp 比较麻烦,体验一般。
你说 vscode 就是编辑器,我表示不同意。
coolcoffee
157 天前
@UnluckyNinja 我觉得需要思考重新唤起 intellisense 就是在偷懒,对于我是想要光标在某个位置产生的预期行为是一致的。

就像现在 vscode 还是没办法做到编辑 xml 、html 标签流畅的成对修改,这个十年前的 JB IDE 就已经能支持了。哦不对,现在 vscode 编辑 xml 是会提示再多按一次回车,但是如果删标签名字就不会提示,需要手动改两次。
Rickkkkkkk
157 天前
只能说 goland 好用。
yulon
157 天前
你直接写 utils. 就会自动导入包,或者写个 u 就会列出一堆候选,直接写没导入的包的函数名谁懂啊。。。
lysShub
157 天前
第一次先要 import 包,敲 ut->回车->敲.Th->回车


后面就可以直接敲函数名了
BeautifulSoap
157 天前
@kdwnil jb 家的远程开发扶不起的刘阿斗我也气啊。其实 jb 的 git 功能我从来不用的,一直都感觉非常不直观提交日志也感觉非常乱,只有处理冲突的时候我才觉得好用。平时我都是用的 lazygit 好处就是无论再哪个服务器上都能直接用不依赖 gui ,然后要做更复杂的 rebase 之类操作的时候切到 fork 的 gui
ns09005264
157 天前
gopls 有这个直接写函数,然后提示都有哪些包有这个函数,选择后自动导入包的功能的。我用 helix+gopls 就可以这样。
不知道你的 vscode 哪里出问题了,我记得 vscode 能正常提示来着。
ninjashixuan
157 天前
人收费那么多年肯定牛逼的地方,只是现在 jb 家 ai 功能跟不上,相对而言这点小瑕疵 ai 功能能节省更多时间。
Meld
157 天前
@woodfizky #14

commit 的时候会自动 optimize

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1123995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX