文章目录
- 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
至此完成安装配置工作,以上集百家之长总结整理,以此备忘。