Morse's Site
1425 字
7 分钟
Goland 转 VSCode
2021-04-22

如何用VSCode 代替 Goland#

我是从Java转Golang的. 所以IDE第一时间使用的Goland. 对我来说使用Goland更顺滑. 但Goland也有些不足. 比如内存的占用/索引构建的耗时等. 每次听见笔记本嗡嗡的声音, 就不由烦躁. 所以近期就决定换VSCode.

VSCode是我经常用的文本编辑器, 得益于它的插件化. 功能异常强大, 尤其在Go插件从微软转到Go官方后, 性能更加强大. 所以Goland上经常用的功能, VSCode基本都有. 所以为替换Goland奠定了基础.

预备知识#

VSCode官网有几篇教程值的看下, 并实操一下, 会加深对VSCode操作的理解.

插件#

美化相关#

  • Dracula Official: 主题插件
  • Material Icon Theme: 图标
  • vscode-icons: 图标

开发语言相关#

  • C/C++
  • Python

编程辅助#

通用#

  • GitLens — Git supercharged
  • Code Spell Checker: 单词拼写检测
  • Comment Translate: 注释翻译
  • Hex Editor
  • Markdown All in One
  • Polacode
  • Project Manager
  • Remote - SSH
  • TODO Highlight
  • Todo Tree
  • TOML Language Support
  • Vim
  • Visual Studio IntelliCode
  • YAML
  • Paste JSON as Code:
  • Bookmarks:

Golang#

  • Go / Go Nightly: 二选一
  • Go Test Explorer
  • Docker:
  • Kubernetes:

前端#

  • Auto Close Tag: html/xml适用

  • Auto Rename Tag: html/xml适用

  • Bracket Pair Colorizer: 用不同颜色配对不同层级的括号

  • indent-rainbow: 彩虹色缩进

  • filesize: 文件大小

  • Path Intellisense: 路径自动补全

  • npm Intellisense: npm包自动补全

  • Sort lines: 多行排序

  • Prettier: Code formatter:

  • Open in Browser:

  • JavaScript and TypeScript Nightly

  • ESLint

  • NPM

  • Debugger for Chrome

  • Vue

  • React

    • ES7 React/Redux/GraphQL/React-Native snippets
    • Umi Pro

设置#

{

    // vscode 基础设置
    // 已新窗口打开
    "window.openFoldersInNewWindow": "on",
    // 每次已最大化打开
    "window.newWindowDimensions": "maximized",
    "workbench.startupEditor": "none",


    // UI美化
    // 图标
    "workbench.iconTheme": "material-icon-theme",
    // "workbench.iconTheme": "vscode-icons",
    // 主题
    "workbench.colorTheme": "Dracula",
    "editor.fontSize": 14,
    "editor.fontFamily": "Cascadia Code, Source Code Pro, Menlo, Monaco, 'Courier New', monospace",
    "editor.lineHeight": 20,


    // 编辑器设置相关
    // 终端字体设置
    "terminal.integrated.fontFamily": "Cascadia Code, Hack Nerd Font",
    // 控制在显示建议列表时如何预选建议。
    "editor.suggestSelection": "first",
    // 显示空白字符space/tab
    "editor.renderWhitespace": "all",
    // 显示不可见字符
    "editor.renderControlCharacters": true,
    // 关闭VSCode的默认单击预览文件模式, 而是双击打开文件
    "workbench.list.openMode": "doubleClick",
    // 是否已紧凑格式展示: 默认为true, 空文件夹合并到上一级目录中
    "explorer.compactFolders": false,
    // 文件自动保存
    "files.autoSave": "onFocusChange",
    // 按下Tab键是否自动填入最佳推荐值
    "editor.tabCompletion": "on",
    "editor.codeActionsOnSave": {
        // 这个属性能够在保存时,自动调整 import 语句相关顺序,能够让你的 import 语句按照字母顺序进行排列
        "source.organizeImports": true
    },
    // 显示行号
    "editor.lineNumbers": "on",
    // 自动折行
    "editor.wordWrap": "on",
    // 编辑器可以按屏幕宽度自动换行
    "editor.accessibilitySupport": "off",
    // 关闭mini地图
    "editor.minimap.enabled": false,


    // golang配置
    "go.toolsManagement.autoUpdate": true,
    "go.inferGopath": false,
    // "go.buildOnSave": "workspace",
    "go.lintOnSave": "package",
    "go.vetOnSave": "package",
    "go.buildTags": "",
    "go.buildFlags": [],
    "go.lintFlags": [],
    "go.vetFlags": [],
    "go.coverOnSave": false,
    "go.useCodeSnippetsOnFunctionSuggest": false,
    "go.formatTool": "goreturns",
    "go.gocodeAutoBuild": false,
    "go.useLanguageServer": true, // gopls 启用
    "go.alternateTools": {
        "go-langserver": "gopls",
    },
    "go.languageServerExperimentalFeatures": {
        "format": true,
        "autoComplete": true
    },
    "go.testFlags": [
        "-v"
    ],
    "go.docsTool": "gogetdoc",
    "go.lintTool": "golangci-lint",
    "[go]": {
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        },
        "editor.formatOnSave": true,
        // Optional: Disable snippets, as they conflict with completion ranking.
        "editor.snippetSuggestions": "none",
    },
    "[go.mod]": {
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.organizeImports": true,
        },
    },
    // 这用于在 Output 中输出客户端和 gopls Server 的通讯,方便调试,根据需要开启。
    "go.trace.server": "verbose",
    "gopls": {
        // Add parameter placeholders when completing a function.
        "usePlaceholders": false,
        // If true, enable additional analyses with staticcheck.
        // Warning: This will significantly increase memory usage.
        "staticcheck": false,
        // "completeUnimported": true
    },
    "go.languageServerFlags": [
        "-remote=auto",
        "-logfile=auto",
        "-debug=:0",
        "-rpc.trace",
    ],

}

快捷键(MacOS)#

  • 快捷键显示列表: CMD + K, S

代码导航#

基础快捷键#

  • 命令面板(The Command palette): CMD+Shift+p
  • 打开关闭侧边栏(Opening and closing the sidebar): CMD+b
  • 文件浏览器(File Explorer): CMD + Shift + e, 也可以此命令在Explorer与Editer Window之间跳转
  • 插件市场(Marketplace): CMD + Shift + x,
  • 切换工作区间(Switching workspaces): Ctrl + r, 注意: 此操作必须在文件Explorer窗口.
  • 打开终端窗口: Ctrl + `
  • 跳转文件: CMD+P
  • 跳转行: CMD+P界面, 输入:, 在输入行号
  • 符号跳转(Go to Symbol): Shift+CMD+O(字母O), 可以在当前页面方法/变量/struct等快速跳转
  • 选择一个单词: CMD+d, 按多次可选中多个相同的单词
  • 关闭当前Window: CMD+W
  • 关闭所有已打kdWindow: CMD+K, W

窗口相关#

  • 窗口切分: CMD+Shift+P 输入: split
  • 切分窗口切换: CMD+数字
  • 切分方向置换: CMD+Option+0(数字0)

代码相关#

  • 代码折叠/展开: CMD+Option+[或]
  • Format文件: Shift+Option+F
  • 编辑器打开的文件列表: Ctrl + Tab
  • 上一个/下一个文件之间跳转: Ctrl + -, Ctrl + Shift + -
  • 显示调用层级(Show Call Hierarchy): Option + Shift + H
  • 当前项目找到所有引用(Find All References): Option + Shift + F12
  • 跳转定义(Go to Definition): F12
  • 跳转实现(Go to Implementations): CMD+F12
  • 跳转引用(Go to References): Shift+F12
  • 跳转类型定义(Go to Type Definition): 无快捷键, 需要自己绑定, 或通过CMD+P后输入指令
  • 在当前窗口已小视窗查看定义(Peek Definition): Option+F12, 无需页面之间跳转.
  • 遍历当前文件错误/警告信息: F8/Shift+F8(下一个/上一个)
  • 生成当前函数对应的测试函数: 无快捷键, 可通过CMD+P, 输入指令 Go: Generate Unit Test For Function
  • 添加/取消书签: CMD+Option+K

重构(Refactor)#

  • 重命名: F2, 可重命名变量/方法等
  • 提取方法: CMD+.
  • 当前行上下移动: Option + 上方向/下方向

调试#

  • 添加断点/取消当前光标行断点: F9

  • 已Debug Run运行: F5, 注意: Test()或main()都可以.

    • 下一步: F10
    • 跳进函数: F11
    • 跳出函数: Shift + F11
  • 停止Debug(Stop Debug Run): Shift+F5

  • 重启Debug(Restart Debug Run main()): Shift+CMD+F5

  • 自定义快捷键(CMD+k, s):

    • 运行当前光标所在的测试函数(go.test.cursor): Option + t
    • 跳转当前函数的测试函数(go.toggle.test.file): Option + Shift + t
    • 生成对应测试文件(go.test.generate.file): 无
    • 生成测试函数(go.test.generate.function): 无

参考资料#

#01 Blogs/blog# #110 IT/vscode#

Goland 转 VSCode
https://fuwari.vercel.app/posts/blogs/goland-to-vscode/
作者
Morse Hsiao
发布于
2021-04-22
许可协议
CC BY-NC-SA 4.0