Go语言环境配置
2021-11-08 13:32:09
  • 系统环境: debian11(腾讯云)
  • gcc g++ 8.3.0
  • cmake 3.22.0(更新了最新版本)

Go语言安装

  1. 在go官网下载对应版本的Go二进制包,这里选择Linux版本的。

  2. 下载好后进行安装

    1
    2
    3
    4
    5
    6
    mv go1.17.3.linux-amd64.tar_3.gz /opt
    tar zxvf go1.17.3.linux-amd64.tar_3.gz
    mv go1.17.3.linux-amd64 go
    echo "GO_HOME=/opt/go" >> /etc/bash.bashrc
    echo "export PATH=$PATH:$GO_HOME/bin" >> /etc/bash.bashrc
    source /etc/bash.bashrc
  3. 测试是否安装成功

    1
    2
    go version
    go env
  4. 配置Go的工作空间

    1
    2
    3
    mkdir -p /home/$USER/go/{bin,pkg,src}
    echo "export GOPATH=$HOME/go" >> /etc/bash.bashrc
    echo "export PATH=$PATH:$GOPATH/bin"

Vim源码安装

  1. 卸载原来的旧版本vim

    1
    2
    apt remove vim
    apt autoremove
  2. 克隆最新的vim仓库

    1
    git clone https://github.com/vim/vim.git
  3. 修改系统的Python版本为Python3(最新的vim只支持Python3.6+)

    1
    ln -sf /usr/bin/python37 /usr/bin/python
  4. 使用Python3支持来编译vim

    1
    2
    3
    ./configure --enable-pythoninterp=yes --enable-cscope --enable-fontset --with-python3-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu/ --enable-python3interp=yes --with-python3-command=python3.7
    make
    make install
  5. 默认安装到了/usr/local/vim目录下, 指定vimrc配置文件地址

    1
    2
    echo "export VIMINIT='source /home/$USER/.vimrc'" >> /etc/bash.bashrc
    source /etc/bash.bashrc

Vim相关Go插件配置

  1. 在.vimrc文件中配置相关vim的Go插件, 其中也包括vim的配置

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    "==============================================================================
    " vim 内置配置
    "==============================================================================

    " 设置 vimrc 修改保存后立刻生效,不用在重新打开
    " 建议配置完成后将这个关闭,否则配置多了之后会很卡
    " autocmd BufWritePost $MYVIMRC source $MYVIMRC

    " 关闭兼容模式
    set nocompatible

    set nu " 设置行号
    set cursorline "突出显示当前行
    " set cursorcolumn " 突出显示当前列
    set showmatch " 显示括号匹配

    " tab 缩进
    set tabstop=4 " 设置Tab长度为4空格
    set shiftwidth=4 " 设置自动缩进长度为4空格
    set autoindent " 继承前一行的缩进方式,适用于多行注释

    " 定义快捷键的前缀,即<Leader>
    let mapleader=";"

    " ==== 系统剪切板复制粘贴 ====
    " v 模式下复制内容到系统剪切板
    vmap <Leader>c "+yy
    " n 模式下复制一行到系统剪切板
    nmap <Leader>c "+yy
    " n 模式下粘贴系统剪切板的内容
    nmap <Leader>v "+p

    " 开启实时搜索
    set incsearch
    " 搜索时大小写不敏感
    set ignorecase
    syntax enable
    syntax on " 开启文件类型侦测
    filetype plugin indent on " 启用自动补全

    " 退出插入模式指定类型的文件自动保存
    au InsertLeave *.go,*.sh,*.php write

    "==============================================================================
    " 插件配置
    "==============================================================================

    " 插件开始的位置
    call plug#begin('~/.vim/plugged')

    " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
    " 可以快速对齐的插件
    Plug 'junegunn/vim-easy-align'

    " 用来提供一个导航目录的侧边栏
    Plug 'scrooloose/nerdtree'

    " 可以使 nerdtree Tab 标签的名称更友好些
    Plug 'jistr/vim-nerdtree-tabs'

    " 可以在导航目录中看到 git 版本信息
    Plug 'Xuyuanp/nerdtree-git-plugin'

    " 查看当前代码文件中的变量和函数列表的插件,
    " 可以切换和跳转到代码中对应的变量和函数的位置
    " 大纲式导航, Go 需要 https://github.com/jstemmer/gotags 支持
    Plug 'majutsushi/tagbar'

    " 自动补全括号的插件,包括小括号,中括号,以及花括号
    Plug 'jiangmiao/auto-pairs'

    " Vim状态栏插件,包括显示行号,列号,文件类型,文件名,以及Git状态
    Plug 'vim-airline/vim-airline'

    " 有道词典在线翻译
    Plug 'ianva/vim-youdao-translater'

    " 代码自动完成,安装完插件还需要额外配置才可以使用
    Plug 'Valloric/YouCompleteMe'

    " 可以在文档中显示 git 信息
    Plug 'airblade/vim-gitgutter'


    " 下面两个插件要配合使用,可以自动生成代码块
    Plug 'SirVer/ultisnips'
    Plug 'honza/vim-snippets'

    " 配色方案
    " colorscheme neodark
    Plug 'KeitaNakamura/neodark.vim'
    " colorscheme monokai
    Plug 'crusoexia/vim-monokai'
    " colorscheme github
    Plug 'acarapetis/vim-colors-github'
    " colorscheme one
    Plug 'rakr/vim-one'

    " go 主要插件
    Plug 'fatih/vim-go', { 'tag': '*' }
    " go 中的代码追踪,输入 gd 就可以自动跳转
    Plug 'dgryski/vim-godef'

    " markdown 插件
    Plug 'iamcco/mathjax-support-for-mkdp'
    Plug 'iamcco/markdown-preview.vim'

    " 插件结束的位置,插件全部放在此行上面
    call plug#end()


    "==============================================================================
    " 主题配色
    "==============================================================================

    " 开启24bit的颜色,开启这个颜色会更漂亮一些
    set termguicolors
    " 配色方案, 可以从上面插件安装中的选择一个使用
    colorscheme one " 主题
    set background=dark " 主题背景 dark-深色; light-浅色


    "==============================================================================
    " vim-go 插件
    "==============================================================================
    let g:go_fmt_command = "goimports" " 格式化将默认的 gofmt 替换
    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


    "==============================================================================
    " NERDTree 插件
    "==============================================================================

    " 打开和关闭NERDTree快捷键
    map <F10> :NERDTreeToggle<CR>
    " 显示行号
    let NERDTreeShowLineNumbers=1
    " 打开文件时是否显示目录
    let NERDTreeAutoCenter=1
    " 是否显示隐藏文件
    let NERDTreeShowHidden=0
    " 设置宽度
    " let NERDTreeWinSize=31
    " 忽略一下文件的显示
    let NERDTreeIgnore=['\.pyc','\~$','\.swp']
    " 打开 vim 文件及显示书签列表
    let NERDTreeShowBookmarks=2

    " 在终端启动vim时,共享NERDTree
    let g:nerdtree_tabs_open_on_console_startup=1


    "==============================================================================
    " majutsushi/tagbar 插件
    "==============================================================================

    " majutsushi/tagbar 插件打开关闭快捷键
    nmap <F9> :TagbarToggle<CR>

    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:NERDTreeIndicatorMapCustom = {
    \ "Modified" : "✹",
    \ "Staged" : "✚",
    \ "Untracked" : "✭",
    \ "Renamed" : "➜",
    \ "Unmerged" : "═",
    \ "Deleted" : "✖",
    \ "Dirty" : "✗",
    \ "Clean" : "✔︎",
    \ 'Ignored' : '☒',
    \ "Unknown" : "?"
    \ }

    let g:NERDTreeShowIgnoredStatus = 1



    "==============================================================================
    " Valloric/YouCompleteMe 插件
    "==============================================================================

    " make YCM compatible with UltiSnips (using supertab)
    let g:ycm_key_list_select_completion = ['<C-n>', '<space>']
    let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
    let g:SuperTabDefaultCompletionType = '<C-n>'

    " better key bindings for UltiSnipsExpandTrigger
    let g:UltiSnipsExpandTrigger = "<tab>"
    let g:UltiSnipsJumpForwardTrigger = "<tab>"
    let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"


    "==============================================================================
    " 其他插件配置
    "==============================================================================

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


    "==============================================================================
    " GVim 的配置
    "==============================================================================
    " 如果不使用 GVim ,可以不用配置下面的配置
    if has('gui_running')
    colorscheme one
    " 设置启动时窗口的大小
    set lines=999 columns=999 linespace=4

    " 设置字体及大小
    set guifont=Roboto\ Mono\ 13

    set guioptions-=m " 隐藏菜单栏
    set guioptions-=T " 隐藏工具栏
    set guioptions-=L " 隐藏左侧滚动条
    set guioptions-=r " 隐藏右侧滚动条
    set guioptions-=b " 隐藏底部滚动条
    " 在 gvim 下不会和 terminal 的 alt+数字的快捷键冲突,
    " 所以将 tab 切换配置一份 alt+数字的快捷键
    :nn <M-1> 1gt
    :nn <M-2> 2gt
    :nn <M-3> 3gt
    :nn <M-4> 4gt
    :nn <M-5> 5gt
    :nn <M-6> 6gt
    :nn <M-7> 7gt
    :nn <M-8> 8gt
    :nn <M-9> 9gt
    :nn <M-0> :tablast<CR>
    endif
  2. 安装插件, 在vim中输入以下命令, 等待插件安装完成

    1
    2
    :PlugInstall
    :GoInstallBinaries
  3. 确保系统安装了build-essential cmake python3-dev相应的软件包,接着在YouCompleteMe里加入Go语言代码补全支持

    1
    2
    cd ~/.vim/plugged/YouCompleteMe
    python3 install.py --go-completer

第一个demo

运行demo, 配置成功,啦啦啦~~~

source

参考教程:

  1. https://blog.siddharthkannan.in/vim/2019/08/31/compiling-vim-with-python/
  2. https://learnku.com/articles/24924

感谢,笔芯…

2021-11-08 13:32:09
下一页