{"id":18253999,"url":"https://github.com/broqiang/vim-go-ide","last_synced_at":"2025-07-27T09:40:04.092Z","repository":{"id":41502800,"uuid":"173764529","full_name":"broqiang/vim-go-ide","owner":"broqiang","description":"Vim as the IDE for the go language 将 vim 打造成 go 语言的 ide","archived":false,"fork":false,"pushed_at":"2022-08-27T13:19:53.000Z","size":943,"stargazers_count":207,"open_issues_count":3,"forks_count":83,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-04T18:49:19.777Z","etag":null,"topics":["editor","go","vim"],"latest_commit_sha":null,"homepage":null,"language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/broqiang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-04T14:53:01.000Z","updated_at":"2025-04-22T03:57:03.000Z","dependencies_parsed_at":"2022-09-21T11:00:15.479Z","dependency_job_id":null,"html_url":"https://github.com/broqiang/vim-go-ide","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/broqiang/vim-go-ide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broqiang%2Fvim-go-ide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broqiang%2Fvim-go-ide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broqiang%2Fvim-go-ide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broqiang%2Fvim-go-ide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/broqiang","download_url":"https://codeload.github.com/broqiang/vim-go-ide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broqiang%2Fvim-go-ide/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267340392,"owners_count":24071553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["editor","go","vim"],"created_at":"2024-11-05T10:09:47.010Z","updated_at":"2025-07-27T09:40:04.043Z","avatar_url":"https://github.com/broqiang.png","language":"Vim Script","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vim 开发环境配置\n\n因为特殊原因，一年多没有摸到电脑了，准备写代码了，先配置下环境\n\n基于 Ubuntu 20.04 ， 其他发行版本未做测试，下面是配置完成后的效果\n\n![预览](./example.png)\n\n## 配置插件管理器\n\n[vim-plug](https://github.com/junegunn/vim-plug)\n\n```bash\ncurl -fLo ~/.vim/autoload/plug.vim --create-dirs \\\n    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim\n```\n\n编辑 `vim ~/.vimrc` ， 写入下面内容\n\n```bash\n\" 插件开始的位置\ncall plug#begin('~/.vim/plug')\n\n\" 此处放准备安装的插件\n\n\" 插件结束的位置，插件全部放在此行上面\ncall plug#end()\n```\n\n配置完成后将 `.vimrc` 文件保存，再次打开， 然后输入 `:PlugInstall`，即可安装\n\nPS: 安装时候看一下结果， 因为包都是从 github 上下载的， 因为网络原因不一定成功。\n\n## 用到的插件\n\n安装插件的时候，按照这个格式放在上面的 begin 和 end 之间即可， 如：\n\n```bash\nPlug 'morhetz/gruvbox'\n```\n\n+ [morhetz/gruvbox 主题配色](https://github.com/morhetz/gruvbox)\n\n    更多主题可以参考 [这里](https://zhuanlan.zhihu.com/p/58188561)\n\n+ [vim-airline vim 窗口状态栏](https://github.com/vim-airline/vim-airline)\n\n+ [vim-airline-themes 状态栏的主题](https://github.com/vim-airline/vim-airline-themes)\n\n+ [preservim/nerdtree vim 中文件系统浏览器](https://github.com/preservim/nerdtree)\n\n+ [Xuyuanp/nerdtree-git-plugin 在 NERDTree 中显示 git 状态](https://github.com/Xuyuanp/nerdtree-git-plugin)\n\n+ [ryanoasis/vim-devicons 显示图标，包括导航栏和状态栏](https://github.com/ryanoasis/vim-devicons)\n\n+ [airblade/vim-gitgutter 文档中显示 git 信息](https://github.com/airblade/vim-gitgutter)\n\n+ [iamcco/markdown-preview.nvim markdown 文档预览](https://github.com/iamcco/markdown-preview.nvim)\n\n+ [SirVer/ultisnips](https://github.com/SirVer/ultisnips) 和\n    [honza/vim-snippets](https://honza/vim-snippets) 两个插件配合， 生成代码片段\n\n+ [coc.nvim 代码自动完成](https://github.com/neoclide/coc.nvim)\n\n插件中需要配置的地方见 `vimrc` 文件，里面写了详细的注释\n\n## coc.nvim 配置\n\n详细的文档见 [https://github.com/neoclide/coc.nvim](https://github.com/neoclide/coc.nvim)\n\ncoc.nvim 需要 [nodejs](https://nodejs.org/en/download/) 支持。\n\n### 安装 coc 的json 和 lsp 支持\n\n```bash\n:CocInstall coc-json coc-tsserver\n```\n\n### coc-snippets 代码片段支持\n\n如果使用了这个插件， 上面的 SirVer/ultisnips 不再使用\n\n详细的配置见 vimrc 文件的 coc.nvim 插件配置部分\n\n#### 配置 coc Language servers\n\n+ go 语言支持\n\n    1. 需要提前配置好 go 环境，见 [https://golang.google.cn/](https://golang.google.cn/) 和 [https://goproxy.cn/](https://goproxy.cn/)\n\n    1. 安装 gopls ， 终端中执行：\n\n    ```bash\n    go get golang.org/x/tools/gopls@latest\n    ```\n\n    1. 安装 coc-go ， 在 vim 中运行：\n```bash\n:CocInstall coc-go\n```\n\n+ shell 支持，在 vim 中运行：\n\n```bash\n:CocInstall coc-sh\n```\n\n+ 更多语言的支持见 [官方文档](https://github.com/neoclide/coc.nvim/wiki/Language-servers) ， 可以根据需要安装\n\n## vimrc 详细的配置\n\n```bash\n\" 基于 Ubuntu 20.04 的配置， 其他发行版本未做测试\n\n\"==============================================================================\n\" 处理 Gnome 终端不能使用 alt 快捷键， 不做这个处理无法在 vim 中映射 alt的快捷键\n\"==============================================================================\nlet c='a'\nwhile c \u003c= 'z'\n    exec \"set \u003cA-\".c.\"\u003e=\\e\".c\n    exec \"imap \\e\".c.\" \u003cA-\".c.\"\u003e\"\n    let c = nr2char(1+char2nr(c))\nendw\n\nset timeout ttimeoutlen=50\n\"==============================================================================\n\n\" ======================== 一些初始配置 ===========================\n\" 关闭兼容模式, 如果需要使用原始的 vi 模式， 配置： set compatible\n\" 默认就是关闭的， 如果不关，就无法使用 vim 的高级功能，包括下面的配置\nset nocompatible\n\n\" 打开文件类型检测\nfiletype plugin indent on\n\n\" 定义快捷键的前缀，即\u003cLeader\u003e ， 默认是 \\ ， 按的时候不太方便\nlet mapleader=\";\"\n\n\" 记住上次文件打开位置\nif has(\"autocmd\")\n  au BufReadPost * if line(\"'\\\"\") \u003e 1 \u0026\u0026 line(\"'\\\"\") \u003c= line(\"$\") | exe \"normal! g'\\\"\" | endif\nendif\n\n\" 行列相关配置\nset number \" 显示绝对行号\nset relativenumber \" 显示相对行号， 会覆盖上面选项\n\" 设置切换绝对行号和相对行号的快捷键， 这个需要的时候切换提高效率\n\" 这里默认是相对行号， 需要绝对行号时候可以通过快捷键修改\nnmap \u003cLeader\u003enn :set relativenumber\u003cCR\u003e\nnmap \u003cLeader\u003enu :set norelativenumber\u003cCR\u003e\nset cursorline \" 突出显示当前所在行\n\" set cursorcolumn \" 突出显示当前列\n\n\n\" 设置Tab长度为4空格， 只是显示， 真实的还是一个 tab\nset tabstop=4\n\n\" 设置输入的 tab 转换成 4 个空格，这里只允许指定文件启用这个设置\nau BufRead,BufNewFile *.md call SetTabToSpace()\nfunction SetTabToSpace()\n    set shiftwidth=4  \" 转换 4 个空格\n    set expandtab     \" 实时生效，配合 shiftwidth\n    set softtabstop=4 \" 删除时候的行为， 也会同时删除 4 个空格\nendfunction\n\n\" 继承前一行的缩进方式\nset autoindent\n\n\" 开启实时搜索，随着你输入查询字串，显示不同的搜索结果\nset incsearch\n\" 搜索时大小写不敏感\nset ignorecase\n\n\" 退出插入模式指定类型的文件自动保存\nau InsertLeave *.go,*.md write\n\n\" 全选当前文档\nnmap \u003cleader\u003ea ggvG$\n\n\" 系统剪切板复制粘贴， vim 使用系统剪切板需要 vim 支持\n\" 查询可以通过 vim --version | grep clipboard 查看\n\" 如果显示 +clipboard 就是支持， 如果是 -clipboard 就是不支持\n\" ubuntu 可以直接安装 gui 包提供支持: sudo apt install vim-gtk\n\" normal 模式下复制到系统剪切板， 这里没有 \"+yy 这样只能复制一行\n\" 使用的时候可以 alt + c ， 然后再输入 yy ， 就是一行\n\" 也可以在文件顶部， alt + c ， 然后再输入 yG ， 就是全部内容\n\" 粘贴可以 alt + c ，然后输入 p， 就是为了省略不太好按的 \"+ 组合\nnmap \u003cM-c\u003e \"+\n\" 复制 v 模式的选中区域\nvmap \u003cM-c\u003e \"+y\n\n\" =================================================================\n\n\"==============================================================================\n\" 插件开始的位置\n\"==============================================================================\n\ncall plug#begin('~/.vim/plug')\n\nset encoding=UTF-8\n\n\" 主题配色\nPlug 'morhetz/gruvbox'\n\n\" 状态栏插件，包括显示行号，列号，文件类型，文件名，以及Git状态\nPlug 'vim-airline/vim-airline'\n\" 状态栏目插件的主题，使用后可以使颜色看起来更加突出一点\nPlug 'vim-airline/vim-airline-themes'\n\n\" 用来提供一个导航目录的侧边栏\nPlug 'preservim/nerdtree'\n\" nerdtree 中显示 git 状态\nPlug 'Xuyuanp/nerdtree-git-plugin'\n\n\" 可以在导航中显示图标， 不过需要有字体支持，否则就是乱码\n\" https://github.com/ryanoasis/nerd-fonts\n\" 终端也需要字体配合，如我使用的是 firacode nerd font Regular\n\" 喜欢其他字体也可以，不过要使用带 nerd font 的字体\nPlug 'ryanoasis/vim-devicons'\n\n\" 可以在文档中显示 git 信息\nPlug 'airblade/vim-gitgutter'\n\n\" markdown 预览\nPlug 'iamcco/markdown-preview.nvim', { 'do': { -\u003e mkdp#util#install() }, 'for': ['markdown', 'vim-plug']}\n\" markdown 中 latex 数学公式支持\n\" Plug 'iamcco/mathjax-support-for-mkdp'\n\n\" 下面两个插件要配合使用，可以自动生成代码块\n\" B\n\" Plug 'SirVer/ultisnips'   \" 插件本身， 使用 coc-snippets 替换了\nPlug 'honza/vim-snippets' \" 代码片段仓库\n\n\" 代码自动完成插件\nPlug 'neoclide/coc.nvim', {'branch': 'release'}\n\n\" 插件结束的位置，插件全部放在此行上面\ncall plug#end()\n\"==============================================================================\n\n\n\" ======================== 主题配色设置 ===========================\n\" 开启24bit的颜色，开启这个颜色会更漂亮一些\nset termguicolors\n\" 主题配色\ncolorscheme gruvbox\n\" 主题背景 dark-深色; light-浅色\nset background=light\n\" =================================================================\n\n\n\" ======================== nerdtree 插件配置 ======================\n\" 设置一个打开的快捷键， 如我的就是 \" + b 打开， 再按一次关闭\nnnoremap \u003cleader\u003eb :NERDTreeToggle\u003cCR\u003e\n\" 导航目录展开的符号\nlet g:NERDTreeDirArrowExpandable = '▸'\n\" 导航目录关闭的符号\nlet g:NERDTreeDirArrowCollapsible = '▾'\n\" 默认显示行号\nlet NERDTreeShowLineNumbers=1\n\" 打开文件时是否显示目录， 1- 显示 0- 不显示\nlet NERDTreeAutoCenter=1\n\" 是否显示隐藏文件\nlet NERDTreeShowHidden=1\n\" 设置宽度\n\" let NERDTreeWinSize=31\n\" 忽略一下文件的显示， 可以定义只隐藏指定文件或目录\nlet NERDTreeIgnore=['\\.pyc','\\~$','\\.swp','\\.git']\n\" =================================================================\n\n\n\" ======================== nerdtree-git-plugin 插件 ===============\n\" 是否显示忽略文件 1- 显示 0- 不显示 默认 0\n\" let g:NERDTreeGitStatusShowIgnored = 1\n\" =================================================================\n\n\n\" ======================== vim-airline 插件配置 ===================\n\" 状态栏目使用主题， 还可以使用 dark， simple， solarized light 等\n\" 更多主题 https://github.com/vim-airline/vim-airline/wiki/Screenshots\nlet g:airline_theme='light'\n\" 安装字体后，启用这个选项后在状态栏可以看到图标\n\" 需要先安装 powerline 字体才可以 sudo apt-get install fonts-powerline\n\" 如果没有安装 powerline 字体不要启用这个选项，否则会显示乱码\n\" 如果 vim-devicons 插件配置好了就可以忽略 powerline 字体，这个插件包含\n\" 了字体图标，并且更加漂亮\nlet g:airline_powerline_fonts = 1\n\n\" 启动顶部的 tabline ， 可以显示打开的 buffers， 显示多 tab 标签\nlet g:airline#extensions#tabline#enabled = 1\n\n\" 设置切换 tab 标签（buffer）的快捷键\nlet g:airline#extensions#tabline#buffer_idx_mode = 1\n nmap \u003cleader\u003e1 \u003cPlug\u003eAirlineSelectTab1\n nmap \u003cleader\u003e2 \u003cPlug\u003eAirlineSelectTab2\n nmap \u003cleader\u003e3 \u003cPlug\u003eAirlineSelectTab3\n nmap \u003cleader\u003e4 \u003cPlug\u003eAirlineSelectTab4\n nmap \u003cleader\u003e5 \u003cPlug\u003eAirlineSelectTab5\n nmap \u003cleader\u003e6 \u003cPlug\u003eAirlineSelectTab6\n nmap \u003cleader\u003e7 \u003cPlug\u003eAirlineSelectTab7\n nmap \u003cleader\u003e8 \u003cPlug\u003eAirlineSelectTab8\n nmap \u003cleader\u003e9 \u003cPlug\u003eAirlineSelectTab9\n nmap \u003cleader\u003e0 \u003cPlug\u003eAirlineSelectTab0\n nmap \u003cleader\u003eh \u003cPlug\u003eAirlineSelectPrevTab\n nmap \u003cleader\u003el \u003cPlug\u003eAirlineSelectNextTab\n\" =================================================================\n\n\n\" ======================== markdwon 插件配置 ======================\n\" 更多的配置见 https://github.com/iamcco/markdown-preview.nvim\n\" vim 打开markdown 文档是否自动预览， 0 - 否， 1 - 是， 默认： 0\n\" let g:mkdp_auto_start = 1\n\n\" 关闭 markdown 是否自动关闭预览文件， 0 - 否， 1 - 是， 默认： 1\n\" let g:mkdp_auto_close = 1\n\n\" 在启动 markdown 预览时是否在终端回显 url\n\" 如显示： Preview page: http://127.0.0.1:8472/page/1\nlet g:mkdp_echo_preview_url = 1\n\n\" markdwon 的快捷键\nmap \u003csilent\u003e \u003cF5\u003e \u003cPlug\u003eMarkdownPreview\nmap \u003csilent\u003e \u003cF6\u003e \u003cPlug\u003eStopMarkdownPreview\n\" =================================================================\n\n\n\" ======================== coc.nvim 插件配置 ======================\n\" 详细见 https://github.com/neoclide/coc.nvim#example-vim-configuration\n\" 不清楚作用，推荐配置里面有，详细见 https://github.com/neoclide/coc.nvim/issues/649\nset nobackup\nset nowritebackup\n\n\" 更改更新时间， 默认是 4000 ms\nset updatetime=300\n\n\" 为消息留出更多的空间\nset cmdheight=2\n\n\n\" 追踪到定义的位置\nnmap \u003csilent\u003e gd \u003cPlug\u003e(coc-definition)\nnmap \u003csilent\u003e gy \u003cPlug\u003e(coc-type-definition)\nnmap \u003csilent\u003e gi \u003cPlug\u003e(coc-implementation)\n\" 查看被谁引用\nnmap \u003csilent\u003e gr \u003cPlug\u003e(coc-references)\n\n\" 预览窗口显示文档\nnnoremap \u003csilent\u003e K :call \u003cSID\u003eshow_documentation()\u003cCR\u003e\nfunction! s:show_documentation()\n  if (index(['vim','help'], \u0026filetype) \u003e= 0)\n    execute 'h '.expand('\u003ccword\u003e')\n  elseif (coc#rpc#ready())\n    call CocActionAsync('doHover')\n  else\n    execute '!' . \u0026keywordprg . \" \" . expand('\u003ccword\u003e')\n  endif\nendfunction\n\nautocmd CursorHold * silent call CocActionAsync('highlight')\n\n\" 重命名的快捷操作\nnmap \u003cleader\u003ern \u003cPlug\u003e(coc-rename)\n\n\" 关闭提示后手动唤醒提示\ninoremap \u003csilent\u003e\u003cexpr\u003e \u003cc-l\u003e coc#refresh()\n\" 通过回车展开代码片段\ninoremap \u003csilent\u003e\u003cexpr\u003e \u003ccr\u003e pumvisible() ? coc#_select_confirm()\n                              \\: \"\\\u003cC-g\u003eu\\\u003cCR\u003e\\\u003cc-r\u003e=coc#on_enter()\\\u003cCR\u003e\"\n\n\" 可以通过 tab 键来切换提示列表选择\ninoremap \u003csilent\u003e\u003cexpr\u003e \u003cTAB\u003e\n      \\ pumvisible() ? \"\\\u003cC-n\u003e\" :\n      \\ \u003cSID\u003echeck_back_space() ? \"\\\u003cTAB\u003e\" :\n      \\ coc#refresh()\ninoremap \u003cexpr\u003e\u003cS-TAB\u003e pumvisible() ? \"\\\u003cC-p\u003e\" : \"\\\u003cC-h\u003e\"\n\nfunction! s:check_back_space() abort\n  let col = col('.') - 1\n  return !col || getline('.')[col - 1]  =~# '\\s'\nendfunction\n\n\" 代码提示列表选择， 将原本的 c-p 和 c-n 添加更习惯的方式\ninoremap \u003csilent\u003e\u003cexpr\u003e \u003cM-k\u003e \"\\\u003cC-p\u003e\"\ninoremap \u003csilent\u003e\u003cexpr\u003e \u003cM-j\u003e \"\\\u003cC-n\u003e\"\n\n\" 格式化代码， 需要 lsp 支持\nxmap \u003cleader\u003ef  \u003cPlug\u003e(coc-format-selected)\nnmap \u003cleader\u003ef  \u003cPlug\u003e(coc-format-selected)\n\n\" 修复当前选中的代码\nnmap \u003cleader\u003eqf  \u003cPlug\u003e(coc-fix-current)\n\n\" 显示错误信息\nnmap \u003csilent\u003e \u003cM-k\u003e \u003cPlug\u003e(coc-diagnostic-prev)\nnmap \u003csilent\u003e \u003cM-j\u003e \u003cPlug\u003e(coc-diagnostic-next)\n\n\" coc-go 的配置\n\" 在保存的时候自动导包\nautocmd BufWritePre *.go :silent call CocAction('runCommand', 'editor.action.organizeImport')\n\" =================================================================\n```\n\n这个文档未来不一定会及时更新，可以查看仓库中的 [vimrc 文件](./vimrc)\n\n## 报错处理\n\n### `[coc.nvim] build/index.js not found`\n\n报这个错误\n\n```bash\n[coc.nvim] build/index.js not found, please install dependencies and compile coc.nvim by: yarn install\n```\n\n本机有 node 和 yarn 环境，但是还是出现这个错误，原因没去研究，手动安装下 coc.nvim 依赖可以解决\n\n```bash\n# 如果没有 yarn 环境可以安装，有的话就跳过\nsudo apt install nodejs\nsudo npm install -g yarn\n\n# 下面是手动解决依赖\ncd ~/.vim/plugged/coc.nvim/\nyarn install\nyarn build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbroqiang%2Fvim-go-ide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbroqiang%2Fvim-go-ide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbroqiang%2Fvim-go-ide/lists"}