Bootstrap

Golang 开发环境配置


Go 的安装、升级与卸载



Go 安装


命令行方式

  • 进入终端 Terminal ,以 root 用户身份输入如下命令安装 Go 。
apt-get install golang -y
  • 默认安装在 /user/local 目录下,输入如下命令查看。
ls /user/local/

离线方式

  • 下载 Go 安装包,输入如下命令下载安装包或者进入 Golang 官网 进行下载安装。
wget https://golang.google.cn/dl/go1.19.5.linux-amd64.tar.gz
  • 下载完毕后,在 Linux 系统中可以直接右键点击该文件 -> 提取(解压)到当前文件夹或者终端下执行如下命令进行解压安装包。
tar -xzf go1.19.5.linux-amd64.tar.gz
  • 将解压的文件拷贝到系统目录下,选择安装到 /usr/local/ 目录下,移动解压后生成的 go 文件夹到 /usr/local/ 目录下。

/usr/ :系统软件安装目录。
/usr/local/ :用户软件安装目录。
/opt/ :大型软件安装目录。

一、终端下命令(移动)

sudo mv go /usr/local/

二、终端下 命令(拷贝)

sudo cp -r go /usr/local/

Go 环境变量配置


  • 环境变量配置,编辑 $HOME/.profile~/.bashrc 配置文件。
vim $HOME/.profile

或者:

vim ~/.bashrc

注:$HOME/.profile 对系统当前用户有效,~/.bashrc 对所有用户有效。

关于环境变量 GOPATHPATHGOROOTGOBIN 的介绍。

  • GOROOT 是 Golang 源代码目录安装路径。
  • GOPATH 是 Golang 项目代码目录(工作空间)。
  • PATH 是 Golang 安装路径下的 bin 目录。
  • GOBIN 是 go install 后生成的可执行命令存放路径。
  • 配置如下环境变量(随便空白处即可,最开始或结尾)。
export GOROOT=/usr/local/go          
export GOPATH=$HOME/gocode            
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin         
export GOBIN=$GOPATH/bin              

环境变量配置位置如下:

配置图

  • 保存后,使更改的环境变量立即进行生效,输入以下命令:
source $HOME/.profile

或者:

source ~/.bashrc
  • 设置 PROXY 代理,输入如下命令:
go env -w GOPROXY=https://goproxy.cn,direct

如果要取消代理,可输入命令 go env -u GOPROXY

  • 此刻,Go 安装配置完成,可通过以下命令查看 Go 的配置。
go env 

或者

go env -json // 表示以 json 格式输出 Go 的配置
  • 输入 go version 后能看到版本号就表示安装成功了,以上安装的是 go1.19.3 linux/amd64 版本。

输出的环境变量和版本号信息:

版本及环境变量图


关于工作空间的说明


  • $HOME 目录下创建了一个 gocode 文件夹,输入如下命令:
 mkdir $HOME/gocode
  • 下一步类似上面配置环境变量的操作,修改 /etc/profile 配置文件。
vim $HOME/.profile
  • 在配置文件中修改 GOPATH 或者添加工作空间环境变量。
export GOPATH=$HOME/gocode
  • 对配置文件所做的更改可能不适用直到下次登录到计算机,使更改立即生效,输入如下的命令:
source $HOME/.profile 

关于工作目录的说明


GOPATH 模式

  • 进入工作空间,输入如下命令:
cd $GOPATH

Go 的代码在 GOPATH 中,也就是一个工作目录,该目录下包含 binpkgsrc 这三个子目录。

src :存放 Go 源代码的目录,一般创建 Go 的项目放到 GOPATH 的 src 目录下。
bin :在 go install 后生成的可执行文件的目录。
pkg :编译后生成的源码文件。

  • 可以将 Go 的源文件放在 src 文件夹内,可以先看一下有没有这三个文件,若没有则创建没有的文件。
mkdir bin pkg src
  • 构建并运行一个 Go 程序,创建工程目录 test ,进入该目录下创建 test.go 文件,编写程序,保存并运行。
mkdir -p $GOPATH/src/test
cd $GOPATH/src/test/
package main

import "fmt"

func main(){
		fmt.Println("Hi CQUPT!")
}

具体编写程序的过程及运行结果如下:

创建并运行程序图

GO MOD 模式

  • 开启 Go Module 特性,Go Module 可以使 Go 项目脱离对 GOPATH 的强依赖,输入如下命令开启:
go env -w GO111MODULE=auto
  • 在任意位置创建项目文件夹(如下面的 test 文件夹),进入项目目录初始化,依次输入如下命令:
mkdir test
cd test 
go mod init test

Go Mod 初始化项目过程如下:

Go Mod 初始化项目图

  • 创建一个 xxx.go 文件,编写如下程序内容:
package main 

import (
    	"github.com/gin-gonic/gin"
    	"net/http"
)

func main(){
        // 创建默认的路由引擎
        r := gin.Default()
        // GET:请求方式; /hello:请求路径
        r.GET("/cqupthao",func(c *gin.Context){
                // HTTP 重定向到指定网址
                c.Redirect(http.StatusMovedPermanently, "http://cqupthao.github.io")
        })
        //启动 HTTP 服务,默认地址在 127.0.0.1:8080
        r.Run()
}
  • 下载相关依赖包,输入如下命令:
go mod tidy

依赖包下载过程如下:

依赖下载页面

下载完成后,项目文件的具体内容如下:

下载成功文件内容页面

运行程序访问指定网址后的结果:

运行启动 HTTP 服务页面

重定向到网址 http://cqupthao.github.io 的首页:

重定向页面

GO 语言的部分环境变量介绍。

环境变量表


卸载 Go


  • 卸载 Go ,以 root 用户身份删除任何以前安装过的 Go 版本,通过删除 /usr/local/go 文件夹 (如果存在),输入如下命令:
apt-get remove golang golang-go -y
apt-get autoremove -y
rm -rf /usr/local/go
  • 移除 Go 配置的环境变量,编辑 ~/.bashrc$HOME/.profile 配置文件,使配置文件更改立即生效,输入如下的命令:
source $HOME/.profile

替换 Go 版本


  • 按照上面步骤卸载 Go ,将下载的安装包解压到 /usr/local 目录中,创建一个新的转到 /usr/local/go 中的树,输入如下命令:
tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz

注意:不要将归档文件解压缩到现有的 /usr/local/go 树中,以免产生损坏的 Go安装。

  • 按照上面的步骤配置环境变量后,验证是否打印已安装的 Go 版本和配置的环境变量,输入如下命令:
go version
go env

输出的环境变量和版本号信息:

Go 版本及环境变量图


Go 开发 IDE 工具安装和配置



Vim


vim-go 是当前使用最为广泛的用于搭建 Golang 开发环境的 vim 插件。

Go-Vim 界面

环境准备

  • 在当前用户的 $HOME 目录下创建 .vim 目录和 .vimrc 配置文件。
mkdir $HOME/.vim
touch $HOME/.vimrc
  • 创建完成之后,进入到 .vim 目录中,下载插件 vim 的插件管理器 bundle
cd ~/.vim 
mkdir bundle
  • 进入到 bundle 目录中,安装 Vundle.vim
cd ~/.vim/bundle/
git clone https://github.com/VundleVim/Vundle.vim.git 
  • 下载完成之后,在当前目录下会生成 Vundle.vim 文件,同样进入到 bundle 目录中,安装 vim-go
cd ~/.vim/bundle/
git clone https://github.com/fatih/vim-go.git 

下载完成之后,会在当前目录下生成 vim-go 目录。
~/(用户$HOME) 目录下已经有 .vimrc 文件就不需要再创建了。

配置 Vundle.vim 和 vim-go 插件

  • 编辑 .vimrc 配置文件,添加如下内容:
set nocompatible

filetype off

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

Plugin 'gmarik/Vundle.vim'

call vundle#end()

filetype plugin indent on
  • 编辑 .vimrc 配置文件,在 call vundle#begin()call vundle#end() 之间再添加如下内容:
Plugin 'fatih/vim-go'
  • 上面步骤操作成功后保存,重新打开 vim 编辑器,在命令行模式输入如下命令:
:PluginInstall

安装插件页面

执行之后会在左侧出现需要安装的插件列表,右侧是 .vimrc 文件,刚执行时,左下角会出现 Processing 的过程,需要稍微等一会儿,下载代码安装完成之后,左下角将出现 Done! 的单词表示已经安装完成。

安装 go.tools Binaries

  • vim-go 安装中需要使用到 Go 的相关的二进制工具,首先打开 .vimrc 文件,切换到命令行模式,执行 GoInstallBinaries 命令自行安装。
:GoInstallBinaries

安装完成页面

  • 等待 vim-go 依赖的工具自动安装,如果安装成功后,在 $GOPATH/bin 目录下会生成 vim-go 依赖的命令文件。

生成的 vim-go 依赖文件图

由于有些命令文件是无法自动安装完成,就需要手动进行安装。首先对比目录,看缺少哪些命令没有安装完成,然后去 GitHub上搜索,找到对应的命令源码之后,使用 git clone 下载到本地,然后使用 go install 命令进行安装即可。

相关工具的 GitHub 路径:

golint : https://github.com/golang/lint.git

gocode : https://github.com/nsf/gocode.git

errcheck : https://github.com/kisielk/errcheck.git

gotags : https://github.com/jstemmer/gotags.git

配置 scrooloose / nerdtree 插件

​NERDTree 的作用就是列出当前路径的目录树,可以方便的浏览项目的总体的目录结构和创建删除重命名文件或文件名,在 .vimrc 配置文件中添加如下内容:

Plugin 'scrooloose/nerdtree'
  • 设置 NerdTree 。
map :NERDTreeMirror

map :NERDTreeToggle

进入到 vim 后可以按 F7 显示和隐藏 NERDTree 区域。

GitHub 的代码路径如下所示:

scrooloose/nerdtree : https://github.com/scrooloose/nerdtree.git

配置 majutsushi / tagbar 插件

​tagbar 可以将正在编辑的文件生成一个大纲视图,包含接口 / 方法/变量等,可以选中快速跳转到目标位置,tagbar 是基于 ctags ,需要先安装 ctags ,输入如下命令安装:

apt-get install ctags -y
  • 编辑 .vimrc 配置文件添加如下内容:
" F9 触发,设置宽度为 30

let g:tagbar_width = 30

nmap :TagbarToggle

" 开启自动预览(随着光标在标签上的移动,顶部会出现一个实时的预览窗口)

let g:tagbar_autopreview = 1

" 关闭排序,即按标签本身在文件中的位置排序。

let g:tagbar_sort = 0

进入到 vim 后可以按 F9 开启和关闭 tagbar 功能 。

GitHub 的代码路径如下所示:

majutsushi/tagbar : https://github.com/majutsushi/tagbar.git

配置 Raimondi / delimitMate 插件

delimitMate 是自动补全引号(单引号/双引号/反引号), 括号 (()[]{}) 的插件,在 .vimrc 配置文件中添加如下内容:

Plugin 'Raimondi/delimitMate'

GitHub 的代码路径如下所示:

Raimondi/delimitMate: https://github.com/Raimondi/delimitMate.git

关于 vim-go 的使用说明

– 执行:GoImports,Vim会自动导入 time 包。
– 执行:GoDef 或命令模式下敲入 gd ,vim 会打开 $GOROOT/src/time/sleep.go 中 的 Sleep 函数的定义。
– 执行:GoLint ,运行 golint 在当前 Go 源文件上。
– 执行:GoDoc ,打开当前光标对应符号的 Go 文档。
– 执行:GoVet ,在当前目录下运行 go vet 在当前 Go 源文件上。
– 执行:GoRun ,编译运行当前 main package 。
– 执行:GoBuild ,编译当前包,这取决于源文件,GoBuild 不产生结果文件。
– 执行:GoInstall ,安装当前包。
– 执行:GoTest ,测试你当前路径下地_test.go文件。
– 执行:GoCoverage ,创建一个测试覆盖结果文件,并打开浏览器展示当前包的情况。
– 执行:GoErrCheck ,检查当前包种可能的未捕获的 errors 。
– 执行:GoFiles ,显示当前包对应的源文件列表。
– 执行:GoDeps ,显示当前包的依赖包列表。
– 执行:GoImplements ,显示当前类型实现的 interface 列表。
– 执行:GoRename [to] ,将当前光标下的符号替换为 [to] 。

配置 Vim 的主题

vim 的主题颜色保存在 /usr/share/vim/vim81/colors/ 目录下,下载到该目录的颜色主题将可以被所有用户使用。如果只需要在当前用户下使用,可以将下载的主题放在 ~/.vim/colors 目录下,若没有这个目录创建一个即可。

默认的主题图

下面以 molokai 主题风格为例进行简单配置说明。

  • GitHub 上搜索 molokai 主题,找到主题的 git 仓库 tomasr/molokai

  • 进入到 /usr/share/vim/vim81/colors/ 目录下,使用 git clone 下载主题。下载完成之后,拷贝 molokai/colors/molokai.vim 文件到 ~/.vim/colors/ 目录下

cd $HOME/.vim/
git clone https://github.com/tomasr/molokai.git

拷贝主题配置文件

  • .vimrc 配置文件中添加如下内容:
set t_Co=256

colorscheme molokai

let g:molokai_original = 1

let g:rehash256 = 1

需要配置其他的主题,只需要设置相应的主题名称。


  • 附:Vim 完整参数配置。
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=utf-8
set gfn=Consolas:h12 " 字体,大小
"=============================================================================
" vim 内置配置
"==============================================================================
" 设置 vimrc 修改保存后立刻生效,不用在重新打开
" 配置完成后将这个关闭
autocmd BufWritePost $MYVIMRC source $MYVIMRC
filetype off 			" 关闭兼容模式
set nocompatible  		" 不使用 vi 的键盘模式,而是 vim  
set showcmd 			" 显示命令行
set backspace=indent,eol,start
set clipboard+=unnamed 
set nu 					" 设置行号
syntax on				" 开启语法高亮 
set cursorline 			" 突出显示当前行
set cursorcolumn 		" 突出显示当前列
set showmatch 			" 显示括号匹配
set backspace=2		 	" Tab 缩进
set tabstop=4 			" 设置 Tab 长度为 4 空格
set shiftwidth=4 		" 设置自动缩进长度为 4 空格
set noswapfile 			" 不生成 swap 文件
set autoindent			" 继承前一行的缩进方式,适用于多行注释
set ruler 				" 打开状态栏标尺
set laststatus=2        " 总是显示状态行
set showtabline=2       " 标签栏的显示,0 永远不显示 1 两个以上显示 2 永远显示
set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")}   "我的状态行显示的内容(包括文件类型和解码)  
set hlsearch            " 搜索时高亮显示被找到的文本
set foldmethod=syntax   " 代码折叠
set fdm=indent          " 代码折叠
set foldlevel=100       " 启动 vim 时不要自动折叠代码
nnoremap <space> zo     " 代码折叠快捷键
let autosave=15         " 15s 自动保存文件
let mapleader="," 		" 定义快捷键的前缀,即 <Leader>
nnoremap <silent> <Leader>w  :WMToggle <CR>
" ==== 系统剪切板复制粘贴 ====
" v 模式下复制内容到系统剪切板
vmap <Leader>c "+yy
" n 模式下复制一行到系统剪切板
nmap <Leader>c "+yy
" n 模式下粘贴系统剪切板的内容
nmap <Leader>v "+p
 
imap <F9> <C-x><C-o> " 开启实时搜索
set incsearch " 搜索时大小写不敏感
set ignorecase   
syntax enable
 
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
   if getline('.')[col('.') - 1] == a:char
        return "\<Right>"
    else
        return a:char
    endif
endfunction
" 退出插入模式指定类型的文件自动保存
au InsertLeave *.go,*.sh,*.php write
 
"==============================================================================
" Plugin
"==============================================================================
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
" Install Vim-go  
Plugin 'fatih/vim-go'
Plugin 'tpope/vim-fugitive'
Plugin 'scrooloose/nerdtree'
Plugin 'majutsushi/tagbar'
Plugin 'Valloric/YouCompleteMe'
" 代码自动完成,安装完插件还需要额外配置才可以使用
"Plugin 'ycm-core/YouCompleteMe'
call vundle#end()            " required
"==============================================================================
" 主题配色
"==============================================================================
" 开启24bit的颜色,开启这个颜色会更漂亮一些
" set termguicolors
" 配色方案, 可以从上面插件安装中的选择一个使用
"colorscheme one " 主题
"set background=dark " 主题背景 dark-深色; light-浅色
 
filetype plugin indent on
 
syntax on				" 开启文件类型侦测
"==============================================================================
" vim-go 插件
"==============================================================================
let g:go_fmt_command = "goimports" " 格式化将默认的 gofmt 替换
let g:go_debug=['shell-commands']
let g:go_metalinter_command = "golangci-lint" "语法校验
let g:go_autodetect_gopath = 1
let g:go_list_type = "quickfix"
 
let g:go_version_warning = 1
let g:go_highlight_types = 1
let g:go_highlight_fields = 1
let g:go_highlight_functions = 1
let g:go_highlight_function_calls = 1
let g:go_highlight_operators = 1
let g:go_highlight_extra_types = 1
let g:go_highlight_methods = 1
let g:go_highlight_generate_tags = 1
 
let g:godef_split=2
" 设置 vim-go 快捷键
" vim-go custom mappings
au FileType go nmap <Leader>s <Plug>(go-implements)
au FileType go nmap <Leader>i <Plug>(go-info)
au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>t <Plug>(go-test)
au FileType go nmap <leader>c <Plug>(go-coverage)
au FileType go nmap <Leader>ds <Plug>(go-def-split)
au FileType go nmap <Leader>dv <Plug>(go-def-vertical)
au FileType go nmap <Leader>dt <Plug>(go-def-tab)
au FileType go nmap <Leader>e <Plug>(go-rename)
"==============================================================================
" auto-pairs 插件
"==============================================================================
"let g:AutoPairsFlyMode = 0
"let g:AutoPairsShortcutBackInsert = '<M-b>'
 
"==============================================================================
" NERDTree 插件
"==============================================================================
" 打开和关闭 NERDTree 快捷键
map <F3> :NERDTreeToggle<CR>
nnoremap <silent> <Leader>n  :NERDTreeToggle <CR>
" 显示行号
let NERDTreeShowLineNumbers=1
" 打开文件时是否显示目录
let NERDTreeAutoCenter=0
" 是否显示隐藏文件
let NERDTreeShowHidden=0
" 设置宽度
let NERDTreeWinSize=25
" 忽略一下文件的显示
let NERDTreeIgnore=['\.pyc','\~$','\.swp']
" 打开 vim 文件及显示书签列表
let NERDTreeShowBookmarks=2
" 在终端启动vim时,共享 NERDTree
let g:nerdtree_tabs_open_on_console_startup=1
 
"==============================================================================
"  majutsushi/tagbar 插件
"==============================================================================
" majutsushi/tagbar 插件打开关闭快捷键
nmap <F12> :TagbarToggle<CR>
"nnoremap <silent> <Leader>t  :TagbarToggle <CR>
"nmap <F12>tb :TagbarToggle<CR>
let g:tagbar_ctags_bin='/usr/bin/ctags'
let g:tagbar_width=30
"autocmd BufReadPost *.go,*.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
let g:tagbar_type_go = {
    \ 'ctagstype' : 'go',
    \ 'kinds'     : [
        \ 'p:package',
        \ 'i:imports:1',
        \ 'c:constants',
        \ 'v:variables',
        \ 't:types',
        \ 'n:interfaces',
        \ 'w:fields',
        \ 'e:embedded',
        \ 'm:methods',
        \ 'r:constructor',
        \ 'f:functions'
    \ ],
    \ 'sro' : '.',
    \ 'kind2scope' : {
        \ 't' : 'ctype',
        \ 'n' : 'ntype'
    \ },
    \ 'scope2kind' : {
        \ 'ctype' : 't',
        \ 'ntype' : 'n'
    \ },
    \ 'ctagsbin'  : 'gotags',
    \ 'ctagsargs' : '-sort -silent'
\ }
"==============================================================================
"  nerdtree-git-Plugin 插件
"==============================================================================
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }
 
let g:NERDTreeGitStatusShowIgnored = 1
 
"==============================================================================
"  Valloric/YouCompleteMe 插件
"==============================================================================
let g:ycm_server_python_interpreter='/usr/bin/python3.6'
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
"是否开启语义补全"
let g:ycm_seed_identifiers_with_syntax=1
"是否在注释中也开启补全"
let g:ycm_complete_in_comments=1
let g:ycm_collect_identifiers_from_comments_and_strings = 0
"开始补全的字符数"
let g:ycm_min_num_of_chars_for_completion=2
"补全后自动关机预览窗口"
let g:ycm_autoclose_preview_window_after_completion=1
" 禁止缓存匹配项,每次都重新生成匹配项"
let g:ycm_cache_omnifunc=0
"字符串中也开启补全"
let g:ycm_complete_in_strings = 1
let g:ycm_show_diagnostics_ui = 0                  " 关闭语法提示
let g:ycm_complete_in_comments=1                   " 补全功能在注释中同样有效
let g:ycm_confirm_extra_conf=0                     " 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_collect_identifiers_from_tags_files=1    " 开启 YCM 标签补全引擎
let g:ycm_min_num_of_chars_for_completion=1        " 从第一个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0                         " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_seed_identifiers_with_syntax=1           " 语法关键字补全
let g:ycm_goto_buffer_command = 'horizontal-split' " 跳转打开上下分屏
"离开插入模式后自动关闭预览窗口"\
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"回车即选中当前项"
"inoremap <expr> <CR>       pumvisible() ? '<C-y>' : '\<CR>'
 
" better key bindings for UltiSnipsExpandTrigger
"let g:UltiSnipsExpandTrigger = "<tab>"
"let g:UltiSnipsJumpForwardTrigger = "<tab>"
"let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"
 
"==============================================================================
"  easymotion/vim-easymotion
"==============================================================================
"let g:EasyMotion_do_mapping = 0 " Disable default mappings"
" --暂时停用下面一行 @kevin 2019-7-18
"let g:EasyMotion_leader_key = '<Space>'
" Bi-directional find motion
" Jump to anywhere you want with minimal keystrokes, with just one key binding.
" `s{char}{label}`
" --暂时停用下面一行 @kevin 2019-7-18
"map s <Plug>(easymotion-s)
" or
" `s{char}{char}{label}`
" Need one more keystroke, but on average, it may be more comfortable.
""nmap s <Plug>(easymotion-s2)
""map t <Plug>(easymotion-t2)
 
" Turn on case insensitive feature
"let g:EasyMotion_smartcase = 0
 
" JK motions: Line motions
"map <Leader>j <Plug>(easymotion-j)
"map <Leader>k <Plug>(easymotion-k)
" search
"map // <Plug>(easymotion-sn)
"omap // <Plug>(easymotion-tn)
 
"==============================================================================
"  ctrlp 插件
"==============================================================================
map <F2> :CtrlPMixed <CR>
let g:ctrlp_by_filename = 0
let g:ctrlp_regexp=1
let g:ctrlp_working_path_mode = 'rw'
let g:ctrlp_working_path_mode="ra"
let g:ctrlp_lazy_update=1
let g:ctrlp_use_caching=1
let g:ctrlp_cache_dir=$HOME.'/.vim/.cache/ctrlp'
let g:ctrlp_clear_cache_on_exit=1
let g:ctrlp_max_depth=20
let g:ctrlp_max_height=15
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*
let g:ctrlp_custom_ignore={
    \ 'dir':  '\v[\/]\.(git|hg|svn)$',
    \ 'file': '\v\.(exe|so|dll|a|o|tar|tar.gz|pyc|zip)$',
    \ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
    \ }
"==============================================================================
"  多标签支持(minibuf)
"==============================================================================
let g:miniBufExplMapWindowNavVim=1
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1
let g:miniBufExplorerMoreThanOne=0
hi MBEVisibleActive guifg=#A6DB29 guibg=fg
hi MBEVisibleChangedActive guifg=#F1266F guibg=fg
hi MBEVisibleChanged guifg=#F1266F guibg=fg
hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg
hi MBEChanged guifg=#CD5907 guibg=fg
hi MBENormal guifg=#808080 guibg=fg
 
"==============================================================================
"  其他插件配置
"==============================================================================
" markdwon 的快捷键
map <silent> <F5> <Plug>MarkdownPreview
map <silent> <F6> <Plug>StopMarkdownPreview
 
" tab 标签页切换快捷键
:nn <Leader>1 1gt
:nn <Leader>2 2gt
:nn <Leader>3 3gt
:nn <Leader>4 4gt
:nn <Leader>5 5gt
:nn <Leader>6 6gt
:nn <Leader>7 7gt
:nn <Leader>8 8gt
:nn <Leader>9 8gt
:nn <Leader>0 :tablast<CR>
set t_Co=256
colorscheme molokai
"colorscheme one
set background=dark " 主题背景 dark-深色; light-浅色

VS Code


VS Code 的下载安装

  • 下载安装 VS Code 官方下载地址,点击运行。

  • 点击左侧菜单栏最后一项 管理扩展 ,在 搜索框 中输入 chinese ,选中结果列表第一项,点击 install 安装。

安装简体中文插件

  • 安装完成后右下角会提示 重启 VS Code ,重启之后,VS Code 就可以中文显示!

VS Code 中文主页面

  • 为 VS Code 编辑器安装 Go 语言扩展插件,让它支持 Go 语言开发。

安装 Go 扩展

  • 添加 Go 语言开发如代码提示、代码自动补全等功能。在此之前先设置 GOPROXY ,打开终端执行以下命令:
go env -w GOPROXY=https://goproxy.cn,direct

Windows 平台按下 Ctrl+Shift+P ,Mac平台按 Command+Shift+P

  • 此时 VS Code 界面会弹出一个输入框,在输入框中输入 >go:install ,下面会自动搜索相关命令,选择 Go:Install/Update Tools 这个命令,按照下图选中并回车执行该命令(或者使用鼠标点击该命令)。

输入框页面

  • 在弹出的窗口选中所有并点击 确定 按钮,进行安装。

勾选页面

  • 然后会弹出如下所示的窗口,等待工具安装完成。

安装页面

配置 VS Code 自动保存功能

  • 按下图依次点击 文件 -> 首选项 -> 设置

设置页面

  • 打开设置页面就可以看见自动保存相关配置,可选择自动保存的方式:

选择保存页面

配置 VS Code 代码片段快捷键。

  • Ctrl/Command+Shift+P ,按下图输入 >snippets ,选择命令并执行,在弹出的窗口点击选择 go 选项。

设置页面

  • 弹出如下页面,填写配置。

快捷键配置页面

上图的注释介绍了主要的用法:

“此处放名字”:{
    "prefix": "这是快捷键",
    "body": "这里是按快捷键插入的代码片段",
    "description": "这里放提示信息的描述"
}

其中 $0 表示最终光标提留的位置。 例如在这里创建两个快捷方式,一个是输入 pln 就会在编辑器中插入 fmt.Println() 代码;另一个是输入 plf ,就会插入 fmt.Printf("") 代码。具体配置如下:

{
	"println":{
		"prefix": "pln",
		"body":"fmt.Println($0)",
		"description": "println"
	},
	"printf":{
		"prefix": "plf",
		"body": "fmt.Printf(\"$0\")",
		"description": "printf"
	}
}

  • 将上面的代码,按下图方式粘贴到配置文件中,保存并关闭配置文件。

具体配置页面

配置 VS Code 编辑器的主题

  • 点击 设置 -> 颜色主题

设置颜色主题

  • 弹出如下窗口,选择对应的主题即可。

选择主题页面


;