文章目录

  • python3编译安装
  • 安装python3相关依赖库
  • 下载python3软件包
  • 编译python3源码
  • 安装完成建立python3与pip3软链接
  • 将python3加入环境变量
  • 检查python3与pip3是否安装正常
  • vim编译安装及添加python支持
  • 卸载删除旧版vim
  • 安装vim依赖库
  • 下载vim8源码
  • 编译安装vim8
  • vim安装完成添加环境变量
  • 查看vim是否支持python等
  • 配置vim及安装相关插件
  • VIM插件管理器Vundle安装及“YouCompleteMe”等其他插件安装
  • 为YCM补全插件编写配置文件”.ycm_extra_conf.py”
  • 相关错误提示解决方法


python3编译安装

此文章为自我总结整理备忘,文中内容非完全原创。
版本信息:Lubuntu18.04
Python3.8.1
Vim8

安装python3相关依赖库

# sudo apt-get install build-essential \ 
					   checkinstall
# sudo apt-get install libreadline-gplv2-dev \ 
					   libncursesw5-dev \ 
					   libssl-dev \ 
					   libsqlite3-dev \ 
					   tk-dev \ 
					   libgdbm-dev \ 
					   libc6-dev \ 
					   libbz2-dev \ 
					   libffi-dev

下载python3软件包

方法①手动下载压缩包解压安装

下载地址:https://www.python.org/ftp/python
python源码下载地址 下载相关版本 Python-3.8.1.tgz 压缩包(可放置任何自建文件夹)

方法②wgit下载

# wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz

解压

# tar -zxvf Python-3.6.1.tgz

编译python3源码

建立安装目录

# sudo mkdir /usr/local/python3.8

编译源码并安装

# cd Python-3.8.1
# sudo ./configure –prefix=/usr/local/python3.8
# sudo make
# sudo make install

安装完成建立python3与pip3软链接

# ln -s /usr/local/python3.8/bin/python3.8 /usr/bin/python3.8
# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

将python3加入环境变量

# vim ~/.profile

粘贴以下内容

# vim ~/.profile
# .profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/python3.8/bin
export PATH

保存退出

# source ~/.profile

检查python3与pip3是否安装正常

# python3 -V
# pip3 –V

vim编译安装及添加python支持

卸载删除旧版vim

# sudo apt-get remove vim 
# sudo apt-get remove vim-runtime
# sudo apt-get remove vim -tiny
# sudo apt-get remove vim-common

安装vim依赖库

# sudo apt-get install libncurses5-dev \
				   libgnome2-dev \
				   libgnomeui-dev \
				   libgtk2.0-dev \
				   libatk1.0-dev \
				   libbonoboui2-dev \
				   libcairo2-dev \
				   libx11-dev \
				   libxpm-dev \
				   libxt-dev \
				   python-dev \
				   python3-dev \
				   ruby-dev \
				   lua5.1 \
				   liblua5.1-dev \
				   libperl-dev \
				   git

下载vim8源码

(可下载到任意自建文件夹)

# git clone https://github.com/vim/vim.git

编译安装vim8

①创建安装目录

# sudo mkdir /usr/local/vim8

②配置

# cd vim/src
# ./configure --with-features=huge \
            --enable-multibyte \
            --enable-rubyinterp=yes \
            --enable-pythoninterp=yes \
            --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
            --enable-python3interp=yes \
            --with-python3-config-dir=/usr/local/python3.8/lib/python3.8/config-3.8m-x86_64-linux-gnu \
            --enable-perlinterp=yes \
            --enable-luainterp=yes \
            --enable-gui=gtk2 \
			--enable-cscope \ 
            --prefix=/usr/local/vim8

参数说明如下:

--with-features=huge:支持最大特性
--enable-multibyte:打开多字节支持,可以在Vim中输入中文
--enable-rubyinterp:打开对ruby编写的插件的支持
--enable-pythoninterp:打开对python编写的插件的支持
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/ 指定python 路径
--enable-python3interp:打开对python3编写的插件的支持
--with-python-config-dir=/usr/local/python3.8/lib/python3.8/config-3.8m-x86_64-linux-gnu 指定python3路径
--enable-perlinterp:打开对perl编写的插件的支持
--enable-luainterp:打开对lua编写的插件的支持
--enable-gui=gtk2:vim gui设置
--enable-cscope:打开对cscope的支持
--prefix=/usr/local/vim8:指定将要安装到的路径(自行创建)

③编译安装

# make
# make install

vim安装完成添加环境变量

此处可以建软连接 ln –s
也可添加 /etc/profile source /etc/profile
还可以以下操作,类似于软链

# sudo update-alternatives --install /usr/bin/vim vim /usr/local/vim8/bin/vim 1
# sudo update-alternatives --set vim /usr/local/vim8/bin/vim

说明:
update-alternatives 命令用于处理 Linux 系统中软件版本的切换,使其多版本共存。alternatives 的管理目录 /etc/alternatives。

alternatives 管理方式

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 1120  2017 /usr/bin/python -> /etc/alternatives/python

$ ls -l /etc/alternatives/python
lrwxrwxrwx 1 root root 18 1121  2017 /etc/alternatives/python -> /usr/bin/python2.7

python 这个可执行命令实际是一个链接,指向了 /etc/alternatives/python 。而这个也是一个链接,指向了 /usr/bin/python2.7 ,这才是最终的可执行文件。alternatives 实际上是通过软链接的方式对版本进行管理。

语法

$ update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>

命令:
  --install <链接> <名称> <路径> <优先级>
    [--slave <链接> <名称> <路径>] ...
                           在系统中加入一组候选项。
  --remove <名称> <路径>   从 <名称> 替换组中去除 <路径> 项。
  --remove-all <名称>      从替换系统中删除 <名称> 替换组。
  --auto <名称>            将 <名称> 的主链接切换到自动模式。
  --display <名称>         显示关于 <名称> 替换组的信息。
  --query <名称>           机器可读版的 --display <名称>.
  --list <名称>            列出 <名称> 替换组中所有的可用候选项。
  --get-selections         列出主要候选项名称以及它们的状态。
  --set-selections         从标准输入中读入候选项的状态。
  --config <名称>          列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。
  --set <名称> <路径>      将 <路径> 设置为 <名称> 的候选项。
  --all                    对所有可选项一一调用 --config 命令。

<链接> 是指向 /etc/alternatives/<名称> 的符号链接。(如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。(如 pager)
<路径> 是候选项目标文件的位置。(如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
..........

查看vim是否支持python等

# vim --version

# vim --version | grep python

"+"为支持 "-"为不支持

配置vim及安装相关插件

VIM插件管理器Vundle安装及“YouCompleteMe”等其他插件安装

Vundle的安装分新旧版本,以下为新版本安装。
①获取安装

# git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

②更新.vimrc配置文件

用户目录新建即可,如 ~/ 或/root/ 。
在call vundle#begin()和call vundle#end()指令之间编写需要安装的插件。

配置文件如下:

" ***************** 全局设置 ************** "
 
" 开启文件类型侦测
filetype on
" 根据侦测到的不同类型加载对应的插件
filetype plugin on
 
" 自动缩进
filetype indent on
" 开启语法高亮功能
syntax enable
" 允许用指定语法高亮配色方案替换默认方案
syntax on
set nocompatible "关闭兼容模式
set incsearch "开启实时搜索功能
set ignorecase "搜索忽略大小写
set wildmenu "vim命令自动补全
set autoread "文件自动更新
set gcr=a:block-blinkon0 "禁止关闭闪烁
set laststatus=2 "总是显示状态栏
set ruler "显示光标位置
set number "显示行号
set cursorline "高亮显示当前行
"set cursorcolumn "高亮显示当前列
set hlsearch "高亮显示搜索结果
" set nowrap "禁止折行
set backspace=2 "回退键生效
"set backspace=indent,eol,start
set novisualbell
 
" 禁止显示滚动条
set guioptions-=l
set guioptions-=L
set guioptions-=r
set guioptions-=R
" 禁止显示菜单和工具条
set guioptions-=m
set guioptions-=T
 
" 将制表符扩展为空格
set expandtab
" 设置编辑时制表符占用空格数
set tabstop=4
" 设置格式化时制表符占用空格数
set shiftwidth=4
" 让 vim 把连续数量的空格视为一个制表符
set softtabstop=4
" 基于缩进或语法进行代码折叠
set foldmethod=syntax
" 启动 vim 时关闭折叠代码
set nofoldenable

" *************** 设置全局快捷键 *****************
 
" 定义快捷键的前缀,即<Leader>
"let mapleader="\<space>"
let mapleader="'"
 
" 设置快捷键将选中文本块复制至系统剪贴板
vnoremap <Leader>y "+y
 
" 设置快捷键将系统剪贴板内容粘贴至 vim
nmap <Leader>p "+p
 
" 定义快捷键关闭当前分割窗口
nmap <Leader>q :q<CR>
" 定义快捷键保存当前窗口内容
nmap <Leader>w :w<CR>
 
" 定义快捷键保存所有窗口内容并退出 vim
"nmap <Leader>WQ :wa<CR>:q<CR>
 
" 不做任何保存,直接退出 vim
"nmap <Leader>Q :qa!<CR>
 
" 依次遍历子窗口
nnoremap nw <C-W><C-W>
" 跳转至右方的窗口
nnoremap <Leader>l <C-W>l
 
" 跳转至左方的窗口
nnoremap <Leader>h <C-W>h
" 跳转至上方的子窗口
nnoremap <Leader>k <C-W>k
 
" 跳转至下方的子窗口
nnoremap <Leader>j <C-W>j
" 定义快捷键在结对符之间跳转
nmap <Leader>M %
 
nnoremap <Leader>g <C-]>
nnoremap <Leader>b <C-t>
 
 
" ************** 插件管理与设置 ************ "
 
" vundle 环境设置
"filetype off
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Lokaltog/vim-powerline' "status 美化
Plugin 'octol/vim-cpp-enhanced-highlight' "对c++语法高亮增强
Plugin 'kshenoy/vim-signature' "书签可视化的插件
Plugin 'vim-scripts/BOOKMARKS--Mark-and-Highlight-Full-Lines' "书签行高亮
Plugin 'majutsushi/tagbar' "taglist的增强版,查看标签,依赖于ctags
Plugin 'scrooloose/nerdcommenter' "多行注释,leader键+cc生成, leader+cu删除注释
Plugin 'scrooloose/nerdtree' "文件浏览
Plugin 'Valloric/YouCompleteMe' "自动补全
Plugin 'kien/ctrlp.vim' "搜索历史打开文件,在命令行模式下按ctrl+p触发
Plugin 'vim-scripts/grep.vim' "在命令行模式使用grep命令,:Grep
Plugin 'Lokaltog/vim-easymotion' "快速跳转,按两下leader键和f组合
Plugin 'vim-scripts/ShowTrailingWhitespace.git' "高亮显示行尾的多余空白字符
Plugin 'vim-scripts/indentpython.vim.git'
Plugin 'vim-scripts/Solarized.git' "主题方案
Plugin 'nathanaelkane/vim-indent-guides.git' "缩进对齐显示
"Plugin 'vim-scripts/indexer.tar.gz' "自动生成标签
"Plugin 'vim-scripts/DfrankUtil' "indexer 依赖
"Plugin 'vim-scripts/vimprj' "indexer 依赖
Plugin 'davidhalter/jedi-vim' "python 补全,不依赖于tags,但比较慢,可以使用indexer替换,但不能跳转项目外
Plugin 'vim-scripts/Markdown'
Plugin 'tpope/vim-surround'
Plugin 'ekalinin/Dockerfile.vim'
" 插件列表结束
call vundle#end()
"filetype plugin on
 
" ***************** Powerline 设置 ************** "

" 设置状态栏主题风格
let g:Powerline_colorscheme='solarized256'
 
 
 " ***************** 设置tagbar ************** "

" "设置tagbar使用的ctags的插件,必须要设置对
let g:tagbar_ctags_bin='/usr/bin/ctags'
" "设置 tagbar 子窗口的位置出现在主编辑区的左边
let g:tagbar_left=1
" " 设置显示/隐藏标签列表子窗口的快捷键。速记:identifier list by tag
nnoremap <Leader>t :TagbarToggle<CR>
" " 设置标签子窗口的宽度
let g:tagbar_width=32
" " tagbar 子窗口中不显示冗余帮助信息
let g:tagbar_compact=1
" " 设置 ctags 对哪些代码标识符生成标签
" "打开文件自动 打开tagbar
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
 
" ***************** signature设置 ************** "

let g:SignatureMap = {
        \ 'Leader'             :  "m",
        \ 'PlaceNextMark'      :  "m,",
        \ 'ToggleMarkAtLine'   :  "m.",
        \ 'PurgeMarksAtLine'   :  "m-",
        \ 'DeleteMark'         :  "dm",
        \ 'PurgeMarks'         :  "mda",
        \ 'PurgeMarkers'       :  "m<BS>",
        \ 'GotoNextLineAlpha'  :  "']",
        \ 'GotoPrevLineAlpha'  :  "'[",
        \ 'GotoNextSpotAlpha'  :  "`]",
        \ 'GotoPrevSpotAlpha'  :  "`[",
        \ 'GotoNextLineByPos'  :  "]'",
        \ 'GotoPrevLineByPos'  :  "['",
        \ 'GotoNextSpotByPos'  :  "mn",
        \ 'GotoPrevSpotByPos'  :  "mp",
        \ 'GotoNextMarker'     :  "[+",
        \ 'GotoPrevMarker'     :  "[-",
        \ 'GotoNextMarkerAny'  :  "]=",
        \ 'GotoPrevMarkerAny'  :  "[=",
        \ 'ListLocalMarks'     :  "ms",
        \ 'ListLocalMarkers'   :  "m?"
        \ }
 

" ***************** NERDTree设置 ************** "

" 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file list
nmap <Leader>f :NERDTreeToggle<CR>
" 设置NERDTree子窗口宽度
let g:NERDTreeWinSize=32
" 设置NERDTree子窗口位置
let g:NERDTreeWinPos="right"
" 显示隐藏文件
let g:NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
let g:NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let g:NERDTreeAutoDeleteBuffer=1


" ***************** YCM 设置 ************** " 

" YCM 补全菜单配色
" 菜单
"highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
" 选中项
"highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
" 补全功能在注释中同样有效
let g:ycm_complete_in_comments=1
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1
" 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_confirm_extra_conf=0
" 开启 YCM 标签补全引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 引入 C++ 标准库tags
set tags+=/data/misc/software/misc./vim/stdcpp.tags
" YCM 集成 OmniCppComplete 补全引擎,设置其快捷键
"inoremap <leader>; <C-x><C-o>
" 补全内容不以分割子窗口形式出现,只显示补全列表
set completeopt-=preview
" 从第一个键入字符就开始罗列匹配项
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_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
" Python Semantic Completion
let g:ycm_python_binary_path = 'python3'
"let g:ycm_server_python_interpreter = 'python3'
" 弹出列表时选择第1项的快捷键(默认为<TAB>和<Down>)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
" 弹出列表时选择前1项的快捷键(默认为<S-TAB>和<UP>)
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
" 主动补全, 默认为<C-Space>
"let g:ycm_key_invoke_completion = ['<C-Space>']
" 停止显示补全列表(防止列表影响视野), 可以按<C-Space>重新弹出
"let g:ycm_key_list_stop_completion = ['<C-y>']

" 对指定源文件,输入两个字母后即触发语义补全
let g:ycm_semantic_triggers =  {
           \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
           \ 'cs,lua,javascript': ['re!\w{2}'],
           \ }

let g:ycm_filetype_whitelist = {
            \ "c":1,
            \ "cpp":1,
            \ "go":1,
            \ "python":1,
            \ "sh":1,
            \ "zsh":1,
            \ }
" 黑名单,不启用
let g:ycm_filetype_blacklist = {
          \ 'tagbar' : 1,
          \ 'gitcommit' : 1,
          \ }


" ***************** 颜色主题 设置 ************** " 

""" color settings
set t_Co=256
if has("gui_running")
    set guioptions=gR
   set mousemodel=popup
    set background=light
    ""hi LineNr cterm=bold guibg=black guifg=white
    ""hi CursorLine cterm=none ctermbg=lightgray ctermfg=none
    ""hi CursorColumn cterm=none ctermbg=lightgray ctermfg=none
else
    set background=dark
    ""hi LineNr cterm=bold ctermbg=black ctermfg=white
    ""hi CursorLine cterm=none ctermbg=darkgray ctermfg=none
    ""hi CursorColumn cterm=none ctermbg=darkgray ctermfg=none
endif
colorscheme solarized
"colorscheme default
" indent guides
"let g:indent_guides_enable_on_vim_startup=1
" 从第二层开始可视化显示缩进
let g:indent_guides_start_level=2
"let g:indent_guides_auto_colors = 0
"hi IndentGuidesOdd  guibg=red   ctermbg=3
"hi IndentGuidesEven guibg=green ctermbg=4
" 色块宽度
let g:indent_guides_guide_size=1
" 快捷键 i 开/关缩进可视化
noremap <Leader>sj :IndentGuidesToggle<CR>

" ***************** C/C++运行与调试 ************** " 

"C、C++ 的运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec "!gcc % -o %<"
        exec "! ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ % -o %<"
        exec "! ./%<"
    elseif &filetype == 'java' 
        exec "!javac %" 
        exec "!java %<"
    elseif &filetype == 'sh'
        :!./%
    endif
endfunc

" C、C++的调试
map <F8> :call Rungdb()<CR>
func! Rungdb()
    exec "w"
    exec "!g++ % -g -o %<"
    exec "!gdb ./%<" 
endfunc

" ***************** 新文件标题 ************** " 

 " 新建.c,.h,.sh,.java文件,自动插入文件头
 autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
 "" 定义函数SetTitle,自动插入文件头
 func SetTitle()
     "如果文件类型为.sh文件
     if &filetype == 'sh'
     call setline(1,"\#########################################################################")
     call append(line("."), "\# @File Name:    ".expand("%"))
     call append(line(".")+1, "\# @Author:         Ricsy")
     call append(line(".")+2, "\# @Email:          Ricsy45@163.com")
     call append(line(".")+3, "\# @Created Time: ".strftime("%c"))
     call append(line(".")+4, "\#########################################################################")
     call append(line(".")+5, "\#!/bin/bash")
     call append(line(".")+6, "")
     else
     call setline(1, "/*************************************************************************")
     call append(line("."), "    > @File Name:    ".expand("%"))
     call append(line(".")+1, "    > @Author:       Ricsy")
     call append(line(".")+2, "    > @Email:        Ricsy45@163.com")
     call append(line(".")+3, "    > @Created Time: ".strftime("%c"))
     call append(line(".")+4, " ************************************************************************/")
     call append(line(".")+5, "")
     endif
     if &filetype == 'cpp'
     call append(line(".")+6, "#include <iostream>")
     call append(line(".")+7, "using namespace std;")
     call append(line(".")+8, "")
     call append(line(".")+9, "int main(void){")
   	 call append(line(".")+10, "")
	 call append(line(".")+11, "    return 0;")
	 call append(line(".")+12, "}")
     endif
     if &filetype == 'c'
     call append(line(".")+6, "#include <stdio.h>")
     call append(line(".")+7, "#include <stdlib.h>")
     call append(line(".")+8, "")
     call append(line(".")+9, "int main(void){")
	 call append(line(".")+10, "")
	 call append(line(".")+11,"     return 0;")
	 call append(line(".")+12, "}")
     endif
     "    if &filetype == 'java'
     "        call append(line(".")+6,"public class ".expand("%"))
     "        call append(line(".")+7,"")
     "    endif
     "新建文件后,自动定位到文件末尾
     autocmd BufNewFile * normal G
 endfunc

③安装插件

打开vim

# vim

进入命令模式输入

:PluginInstall

等待插件安装,插件逐一安装,安装完毕插件名称前为”+” ,“YouCompleteMe”插件安装时间较长。

Vundle常用命令

功能

命令

安装插件

PluginInstall

清除插件

PluginClean

查看帮助

h Vundle

更新插件

PluginUpdate

列出插件

Plugi

为YCM补全插件编写配置文件”.ycm_extra_conf.py”

前面配置文件”.vimrc“中

let g:ycm_global_ycm_extra_conf ='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

为”.ycm_extra_conf.py”读取地址
在安装配置过程中发现我安装版本”.ycm_extra_conf.py”文件地址为:

'~/.vim/bundle/YouCompleteMe/third_party/ycmd /.ycm_extra_conf.py'

出现此种情况可以将文件利用“cp”命令拷贝至“.vimrc”配置地址,也可将”.vimrc”配置地址改为文件所在地址。

YCM自带搜索的库数目有限。如果想要补充更多的库,可以将库的路径添加到”.ycm_extra_conf.py”中的 flag 数组里,自行添加的库需要用 ‘-isystem’ 标识。
如下所示(注意后面 有逗号):

'-isystem',
'/usr/include/c++/7',
'-isystem',
'/usr/include',
'-isystem',
'/usr/lib/gcc/x86_64-linux-gnu/7/include',
'-isystem',
'/usr/include/x86_64-linux-gnu',
'-isystem',
'/usr/include/c++/7/bits',

相关错误提示解决方法

①打开vim后提示”The ycmd server SHUT DOWN (restart with :YcmRestartServer)”

# cd ~/.vim/bundle/YouCompleteMe
# ./install.py

②运行上述命令后如出现” ERROR: Unable to find executable ‘cmake’. CMake is required to build ycmd”
安装cmack

# sudo apt-get install cmake

③运行vim出现:Indexer error: Exuberant Ctags not found in PATH.……等错误
需要安装ctags,tagbar需要ctags支持

# sudo apt-get install exuberant-ctags

至此完成安装配置工作,以上集百家之长总结整理,以此备忘。