deepin搭建go开发环境(git、go、neovim、NvChad、Nerd Font)

news2024/10/5 17:18:49

安装deepin虚拟机

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

安装git

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时存储第三方库的文件夹)
    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
    
    完全使用命令就是
    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模式和下载的镜像源
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
    
    测试
    go version
    go env
    
  5. 其他
    我发现每次开个新shell,都要重新source /etc/profile才能正常使用go version
    看博客知道要再配一下
    注意每个用户都要配一下这个
    echo 'source /etc/profile' >> ~/.bashrc
    
    这样子每次开新shell就会触发这个命令

安装neovim

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

一、编译vim9

  1. 先卸载默认的vim8

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

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

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

    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. 下载源码
    git clone -b v0.9.0 https://github.com/neovim/neovim.git ~/Downloads/neovim9
    
  2. 编译与安装
    注意第二行的下载操作,可能会总是拉取不到github的项目,实在不行就进浏览器手动下,然后放在对应的位置,下载网址和放置路径在dos里都有展示
    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
    echo "alias vim='nvim'" >> /etc/profile
    source /etc/profile
    

treesitter报错可以不用管

  • 安装NvChad
    Turning Neovim into an advanced IDE
    参考视频针对Golang的NeoVim完美配置

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

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

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

安装go的lsp

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

plugins.lua中写入如下内容

local plugins = {
	{
		"williamboman/mason.nvim",
		opts = {
			ensure_installed = {
				"gopls",
			},
		},
	},
}
return plugins

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

M.plugins = "custom.plugins

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

再添加如下

{
    "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

然后

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

在lspconfig.lua中写入

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的包、未使用警告等

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

---@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

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

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

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

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中可以复制到系统剪贴板

apt install xclip

创建init.vim

vim ~/.config/nvim/init.lua

然后加入一行

vim.o.clipboard = "unnamedplus"

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx之location与rewrite

Nginx之location与rewrite 一.location location 对访问的路径做访问控制或者代理转发1.匹配分类 精准匹配&#xff1a; location / {...} 前缀匹配&#xff1a; location ^~ / {...} 正则匹配&#xff1a; location ~ / {...} location ~* / {...} 部分…

直播带货APP小程序系统开发功能有哪些?

直播带货APP小程序系统开发功能有哪些&#xff1f; 1、直播带货&#xff1a;主播一边带货一边直播间活跃气氛&#xff0c;直观地了解产品&#xff0c;下单的概率会更高。还集有观看、打赏、购物、分享于一体。 2、短视频带货&#xff1a;短视频种草&#xff0c;利…

图数据库(一):Neo4j入门

什么是Neo4j 我们可以看一下百度百科对其的定义&#xff1a;Neo4j是一个高性能的,NOSQL图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎&#xff0c;但是它将结构化数据存储在网络(从数学角度…

北京云服务器安装anaconda、cuda、cudnn、torch流程

安装顺序&#xff1a;Anaconda->cuda->cudnn ->torch(根据cuda安装torch) 1读取anaconda module load anaconda/2020.11 2读取cuda cudnn module load cuda/11.1 cudnn/8.2.1_cuda11.x (查看cuda版本: nvcc -V) 3运行脚本 sbatch train.sh 脚本写法 #!/bin/bash #SB…

Nextcloud私有云 - 零基础搭建私有云盘

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章&#xff1a;使用Nextcl…

hash传递攻击

简介 Pass the hash也就是Hash传递攻击&#xff0c;简称为PTH。模拟用户登录不需要用户明文密码只需要hash值就可以直接来登录目标系统。 利用前提条件是&#xff1a; 开启445端口开启ipc$共享 Metasploit pesexec模块 windows/smb/psexec 这里主要设置smbuser、smbPass …

Docker镜像与Docker容器详解

文章目录 Docker帮助信息Docker镜像拉取镜像镜像仓库官方与非官方镜像仓库 拉取指定标签的镜像为镜像打多个标签搜索镜像镜像和分层共享镜像层根据摘要拉取镜像删除镜像总结 Docker容器启动一个简单的容器容器进程容器生命周期优雅的退出容器利用重启策略进行容器的自我修复Web…

7. JVM调优实战及常量池详解

JVM性能调优 1. 阿里巴巴Arthas详解1.1 Arthas使用 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 1、阿里巴巴Arthas调优工具详解 2、GC日志详解与调优分析 3、Class常量池与运行…

氟化物选择吸附树脂Tulsimer ®CH-87 ,锂电行业废水行业矿井水除氟专用树脂

氟化物选择吸附树脂 Tulsimer CH-87 是一款去除水溶液中氟离子的专用的凝胶型选择性离子交换树脂。它是具有氟化物选择性官能团的交联聚苯乙烯共聚物架构的树脂。 去除氟离子的能力可以达到 1ppm 以下的水平。中性至碱性的PH范围内有较好的工作效率&#xff0c;并且很容易再生…

Ingress详解

Ingress Service对集群外暴露端口两种方式&#xff0c;这两种方式都有一定的缺点&#xff1a; NodePort &#xff1a;会占用集群集群端口&#xff0c;当集群服务变多时&#xff0c;缺点明显LoadBalancer&#xff1a;每个Service都需要一个LB&#xff0c;并且需要k8s之外设备支…

[洛谷]P2960 [USACO09OCT]Invasion of the Milkweed G(BFS,坑点多多)

、1&#xff1a;坐标是反的&#xff0c;&#xff08;1&#xff0c;1&#xff09;是在左下角&#xff0c;正常在右上角&#xff0c;所用建图的时候要小心 2&#xff1a; 加node(),搭配 中的构造 3&#xff1a; 不用判断位置是否越界&#xff0c;数组从1&#xff0c;1开始&…

网络安全通信HTTPS原理

背景 HTTPS并不是一个全新的协议&#xff0c;而是为了保证网络通信的数据安全&#xff0c;在HTTP的基础上加上了安全套件SSL的一个数据通信协议。 HTTP协议全称为HyperText Transfer Protocol即超文本传输协议&#xff0c;是客户端浏览器与Web服务器之间的应用层通信协议。HT…

秘钥失效问题

一、发现问题 问题如下图代码&#xff1a; $ ssh root108.61.163.242 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is …

前端入门学习

封装axios axios的基础使用 axios基础使用方法&#xff1a; axios.create({config}) //创建axios实例 axios.get(url,{config}) //get请求 axios.post(url, data,{config}) //post请求 axios.interceptors.request.use() // 请求拦截器 axios.interce…

华为OD机试真题 Java 实现【高矮个子排队】【2023Q2 100分】,附详细解题思路

一、题目描述 现在有一队小朋友&#xff0c;他们高矮不同&#xff0c;我们以正整数数组表示这一队小朋友的身高&#xff0c;如数组{5,3,1,2,3}。 我们现在希望小朋友排队&#xff0c;以“高”“矮”“高”“矮”顺序排列&#xff0c;每一个“高”位置的小朋友要比相邻的位置高…

工业相机分类、相关参数含义

一、工业相机参数 1、分辨率 分辨率是相机最基本的参数&#xff0c;由相机所采用的芯片分辨率决定&#xff0c;在采集图像时&#xff0c;相机的分辨率对检测精度有很大的影响&#xff0c;在对同样大的视场&#xff08;景物范围&#xff09;成像时&#xff0c;分辨率越高&…

高阶数据结构 ——— 图

文章目录 图图的基本概念图的存储结构邻接矩阵邻接表 图的遍历广度优先遍历深度优先遍历 最小生成树Kruskal算法Prim算法 最短路径单源最短路径-Dijkstra算法单源最短路径-Bellman-Ford算法多源最短路径-Floyd-Warshall算法 图 图的基本概念 图的基本概念 图是由顶点集合和边的…

【软件测试】cookie、session和token的区别

今天就来说说session、cookie、token这三者之间的关系&#xff01;最近这仨玩意搞得头有点大 为什么会有它们三个 我们都知道 HTTP 协议是无状态的&#xff0c;所谓的无状态就是客户端每次想要与服务端通信&#xff0c;都必须重新与服务端链接&#xff0c;意味着请求一次客户…

win10 链接github

https://github.com.ipaddress.com/ 在链接里面找到ip 打开系统host文件 Windows 系统&#xff1a;C:\Windows\System32\drivers\etc\hosts Linux 系统&#xff1a;/etc/hosts Mac&#xff08;苹果电脑&#xff09;系统&#xff1a;/etc/hosts Android&#xff08;安卓&#x…

实战-基于Jenkins+K8s构建DevOps平台(九)

实验步骤如下&#xff1a; 第一部分&#xff1a;安装持久化存储nfs 1、在k8s-master和k8s-node1上安装nfs服务 [rootk8s-master ~]# yum install nfs-utils -y [rootk8s-master ~]# systemctl start nfs [rootk8s-master ~]# systemctl enable nfs [rootk8s-node1 ~]# yum …