deepin搭建go开发环境(git、go、neovim、nvchad、nerd)

urlyy

安装deepin虚拟机

官网下载地址
vmware中记得版本选择是debian 10.x 64位
然后就是一些确认操作,然后就可以了

安装git

1
2
3
4
5
6
7
8
9
10
11
apt install gedit
apt install git
git config --global user.name "hello"
git config --global user.email hello@126.com
git config --list

ssh-keygen -t rsa
cd /root/.ssh
gedit id_rsa.pub
# 下面这个可以解决Failed to connect to github.com port 443: 拒绝连接
git config --global url."https://ghproxy.com/https://github.com".insteadOf "https://github.com"

再上传这个id_rsa.pub里的文本(即公钥)
在这里插入图片描述
输入这行命令以验证是否成功
ssh -T git@github.com

安装golang

  1. 下载
    下载地址
    也可wget https://studygolang.com/dl/golang/go1.20.4.linux-amd64.tar.gz
  2. 解压
  3. 配环境变量
    配置GOROOT(go核心内容的文件夹,即从官网下的那个)和GOPATH(go mod时存储第三方库的文件夹)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    vim /etc/profile
    # 即刚刚解压的压缩包的文件夹
    export GOROOT=/usr/local/env/go
    # 你自己指定一个存第三方库的文件夹
    export GOPATH=/usr/local/env/gopath
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    #保存退出
    :wq
    #配置生效
    source /etc/profile
    完全使用命令就是
    1
    2
    3
    4
    echo 'export GOROOT=/usr/local/env/go' >> /etc/profile
    echo 'export GOPATH=/usr/local/env/gopath' >> /etc/profile
    echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> /etc/profile
    source /etc/profile
  4. 改下go的配置,即开启module模式和下载的镜像源
    1
    2
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
    测试
    1
    2
    go version
    go env
  5. 其他
    我发现每次开个新shell,都要重新source /etc/profile才能正常使用go version
    看博客知道要再配一下
    注意每个用户都要配一下这个
    1
    echo 'source /etc/profile' >> ~/.bashrc
    这样子每次开新shell就会触发这个命令

安装neovim

参考[经验分享] Deepin
v20下编译安装vim9和neovim9,默认的vim和neovim版本太低

一、编译vim9

  1. 先卸载默认的vim8

    1
    2
    sudo apt purge vim vim-*
    sudo apt autoremove
  2. 安装编译依赖

    1
    sudo apt install lua5.3 liblua5.3-dev ruby2.5-dev python3-pip cmake gettext
  3. 下载源码

    1
    git clone -b v9.0.1504 https://github.com/vim/vim.git ~/Downloads/vim9
  4. 编译与安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    cd ~/Downloads/vim9

    ./configure --prefix=/opt/vim \
    --with-features=huge \
    --enable-multibyte \
    --enable-rubyinterp=yes \
    --enable-python3interp=yes \
    --enable-luainterp=yes \
    --enable-gui=gtk2 \
    --enable-cscope \
    --enable-fail-if-missing

    make -j6

    sudo make install

    sudo ln -s /opt/vim/bin/vim /usr/local/bin/vim

二、编译neovim

  1. 下载源码
    1
    git clone -b v0.9.0 https://github.com/neovim/neovim.git ~/Downloads/neovim9
  2. 编译与安装
    注意第二行的下载操作,可能会总是拉取不到github的项目,实在不行就进浏览器手动下,然后放在对应的位置,下载网址和放置路径在dos里都有展示
    1
    2
    3
    4
    cd ~/Downloads/neovim9
    make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/opt/neovim"
    sudo make install
    sudo ln -s /opt/neovim/bin/nvim /usr/local/bin/nvim
  3. 测试
    输入nvim test.txt
  4. 起别名,使vim命令会打开nvim
    1
    2
    echo "alias vim='nvim'" >> /etc/profile
    source /etc/profile
    treesitter报错可以不用管
  • 安装NvChad
    Turning Neovim into an advanced IDE
    参考视频针对Golang的NeoVim完美配置

    1
    git clone https://github.com/NvChad/NvChad.git ~/.config/nvim

    然后输入nvim
    在这里插入图片描述
    然后输入N
    然后等他把相关的插件下完(好像挂着梯子下快一点?)
    到这个界面就是下好了
    在这里插入图片描述
    然后输入空格 th来选主题
    在这里插入图片描述

  • 两个的卸载方法:
    删除~/.local/state/nvim~/.local/share/nvim~/.config/nvim

安装go的lsp

1
2
cd /root/.config/nvim/lua/custom
touch plugins.lua

plugins.lua中写入如下内容

1
2
3
4
5
6
7
8
9
10
11
local plugins = {
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"gopls",
},
},
},
}
return plugins

再在/root/.config/nvim/lua/custom/chadrc.lua中做如下添加

1
M.plugins = "custom.plugins

在这里插入图片描述
然后退出vim,再输入vim,输入命令:MasonInstallAll
此时等一小会会出现
在这里插入图片描述

再添加如下

1
2
3
4
5
6
7
{
"neovim/nvim-lspconfig",
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
},

在这里插入图片描述

如果使用可视化的编辑器,可能会出现
E37: No write since last change
E162: No write since last change for buffer “xxxxx”
Press ENTER or type command to continue
这时用
:set fileencoding=utf-8

然后

1
2
mkdir /root/.config/nvim/lua/custom/configs
touch configs/lspconfig.lua

在lspconfig.lua中写入

1
2
3
4
5
6
7
8
9
10
11
12
13
local on_attach = require("plugins.configs.lspconfig").on_attach
local capabilities = require("plugins.configs.lspconfig").capabilities

local lspconfig = require("lspconfig")
local util = require "lspconfig/util"

lspconfig.gopls.setup {
on_attach = on_attach,
capabilities = capabilities,
cmd = {"gopls"},
filetypes = {"go","gomod","gowork","gotmpl"},
root_dir = util.root_pattern("go.work","go.mod",".git"),
}

再加一点设置,使得nvim里面可以自动导go的包、未使用警告等

1
2
3
4
5
6
7
8
9
settings = {
gopls = {
completeUnimported = true,
usePlaceholders = true,
analyses = {
unusedparams = true,
},
},
},

在这里插入图片描述

……………………..不想写了,跟着视频配吧

安装Nerd字体

ubuntu系统添加新的字体——JetBrains Mono 字体添加实例
字体下载网站

用jetbrains mono即可

在这里插入图片描述

在这里插入图片描述

nvim-tree

自带,在normal模式下用ctrl n唤出
ctrl hctrl l切换左右

其他

输入:Lazy进入包管理界面

总结

/root/.config/nvim/lua/custom/chadrc.lua

1
2
3
4
5
6
---@type ChadrcConfig 
local M = {}
M.ui = {theme = 'catppuccin'}
M.plugins = "custom.plugins"
M.mappings = require "custom.mappings"
return M

/root/.config/nvim/lua/custom/mappings.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
local M ={}

M.dap = {
plugin = true,
n = {
["<leader>db"] = {
"<cmd> DapToggleBreakpoint <CR>",
"Add breakpoint at line"
},
["<leader>dus"] = {
function ()
local widgets = require("dap.ui.widgets");
local siderbar = widgets.sidebar(widgets.scopes);
end,
"Open debugging sidebar"
}
}
}

M.dap_go = {
plugin = true,
n = {
["<leader>dgt"] = {
function()
require("dap-go").debug_test()
end,
"Debug go test"
},
["<leader>dgl"] = {
function()
require("dap-go").debug_test()
end,
"Debug last go test"
}
}
}
return M

/root/.config/nvim/lua/custom/plugins.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
local plugins = {
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"gopls",
},
},
},
{
"mfussenegger/nvim-dap",
init = function()
require("core.utils").load_mappings("dap")
end
},
{
"leoluz/nvim-dap-go",
ft = "go",
dependencies = "mfussenegger/nvim-dap",
config = function(_,opts)
require("dap-go").setup(opts)
require("core.utils").load_mappings("dap_go")
end
},
{
"neovim/nvim-lspconfig",
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
},
{
"jose-elias-alvarez/null-ls.nvim",
ft = "go",
opts = function()
return require "custom.configs.null-ls"
end,
},
{
"olexsmir/gopher.nvim",
ft="go",
config = function(_,opts)
require("gopher").setup(opts)
end,
build = function()
vim.cmd [[silent! GoInstallDeps]]
end,
},
}
return plugins

/root/.config/nvim/lua/custom/configs/lspconfig.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
local on_attach = require("plugins.configs.lspconfig").on_attach
local capabilities = require("plugins.configs.lspconfig").capabilities

local lspconfig = require("lspconfig")
local util = require "lspconfig/util"

lspconfig.gopls.setup {
on_attach = on_attach,
capabilities = capabilities,
cmd = {"gopls"},
filetypes = {"go","gomod","gowork","gotmpl"},
root_dir = util.root_pattern("go.work","go.mod",".git"),
settings = {
gopls = {
completeUnimported = true,
usePlaceholders = true,
analyses = {
unusedparams = true,
},
},
},
}

/root/.config/nvim/lua/custom/configs/null-ls.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
local null_ls = require("null-ls")
local augroup = vim.api.nvim_create_augroup("LspFormatting",{})


local opts = {
sources = {
null_ls.builtins.formatting.gofmt,
null_ls.builtins.formatting.goimports_reviser,
null_ls.builtins.formatting.golines,
},
on_attach = function(client,bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({
group = augroup,
buffer = bufnr,
})
vim.api.nvim_create_autocmd("BufWritePre",{
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({bufnr = bufnr})
end,
})
end
end,
}

设置在vim中可以复制到系统剪贴板

1
apt install xclip

创建init.vim

1
vim ~/.config/nvim/init.lua

然后加入一行

1
vim.o.clipboard = "unnamedplus"

然后发现之后用y复制时,在浏览器里面也可以粘贴这个内容了
同时在别的地方ctrl+c复制,在vim里也可以用p粘贴

  • 标题: deepin搭建go开发环境(git、go、neovim、nvchad、nerd)
  • 作者: urlyy
  • 创建于 : 2023-05-08 22:17:03
  • 更新于 : 2023-06-20 23:35:26
  • 链接: https://urlyy.github.io/2023/05/08/deepin搭建nvim的go开发环境/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。