CentOS | 为Vim8配置Python环境



说明

  • VM15虚拟机中的CentOS7
  • Xshell连接

安装最新版vim

  • 增加最新版vim源
    curl -L https://copr.fedorainfracloud.org/coprs/lantw44/vim-latest/repo/epel-7/lantw44-vim-latest-epel-7.repo -o /etc/yum.repos.d/vim-latest.repo
  • 更新vim
    yum update -y
  • 验证vim
    vim
  • 在vim中输入命令:echo $VIMRUNTIME来查看Vim的运行目录

配置最新版vim

  • 创建用户的.vim文件夹
    mkdir ~/.vim
  • 创建用户的.vimrc文件
    touch ~/.vimrc
  • 创建vim的主题文件夹
    mkdir -p ~/.vim/colors

配色方案

  • 安装gruvbox配色方案
    curl -fLo ~/.vim/colors/gruvbox.vim --create-dirs https://raw.githubusercontent.com/morhetz/gruvbox/master/colors/gruvbox.vim
  • 配置用户的vim
    vim ~/.vimrc
" gruvbox配色方案
colorscheme gruvbox

参阅:


插件管理


  • 安装开发工具
    yum grouplist
    yum groupinstall "开发工具" -yyum groupinstall Development tools -y
  • 安装部分依赖
    yum install cmake python-devel clang kernel-devel ncurses-devel yum-utils epel-release https://centos7.iuscommunity.org/ius-release.rpm -y
  • 安装python3和pip3

yum search python3 | grep devel

yum install python36u python36u-devel python36u-pip -y

  • 创建python3连接符
    ln -s /usr/bin/python3.6 /usr/bin/python3
  • 创建pip3链接符
    ln -s /usr/bin/pip3.6 /usr/bin/pip3
  • 配置pip3
    mkdir ~/.pip && cd ~/.pip
    vim pip.conf
[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host = pypi.douban.com
  • 版本查看
    python -V
    python3 -V
    pip3 -V
  • 升级pip3
    pip3 install --upgrade pip

  • 安装vim_runtime配置方案
    git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
    sh ~/.vim_runtime/install_awesome_vimrc.sh
  • 下载plug.vim(vim插件管理器)
    curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  • 配置用户的vim
    vim ~/.vimrc
" F11快捷键激活/取消paste模式
set pastetoggle=<F11>
  • 配置用户的vim
    vim ~/.vimrc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 一、Vim-plug插件配置 """  
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
call plug#begin()

" 目录结构展示插件
Plug 'scrooloose/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'

" 代码自动补全
Plug 'ycm-core/YouCompleteMe'

" 括号自动补全
Plug 'jiangmiao/auto-pairs'

Plug 'vim-airline/vim-airline'
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
Plug 'junegunn/vim-easy-align'
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

call plug#end()           
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 二、NerdTree配置 """  
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" vim 启动的时候默认开启 NERDTree
autocmd VimEnter * NERDTree
" 默认光标在右侧文件编辑区 
wincmd w
autocmd VimEnter * wincmd w
" 文件树设置 {{{
" NERDTree开关
map <silent> <F3> :NERDTreeToggle<CR>
""当NERDTree为剩下的唯一窗口时自动关闭
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"" 修改树的显示图标
let g:NERDTreeDirArrowExpandable = '►'
let g:NERDTreeDirArrowCollapsible = '▼'
let NERDTreeAutoCenter=1
" 指定鼠标模式(1.双击打开;2.单目录双文件;3.单击打开)
let NERDTreeMouseMode=2
" 将 NERDTree 的窗口设置在 vim 窗口的左侧
let NERDTreeWinPos="left"
" 显示行号
let NERDTreeShowLineNumbers=1
" 是否显示隐藏文件
let NERDTreeShowHidden=1
" 设置宽度
let NERDTreeWinSize=25
" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1
" 忽略一下文件的显示
let NERDTreeIgnore=['\.pyc','\~$','\.swp']
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }
" }}}
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 三、YCM配置 """  
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'

" 打开vim时不再询问是否加载ycm_extra_conf.py配置
let g:ycm_confirm_extra_conf=0

autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<CR>"    "回车即选中当前项
"上下左右键的行为 会显示其他信息
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

let g:ycm_python_binary_path = 'python3'
let g:ycm_autoclose_preview_window_after_completion = 1

" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1  
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1   
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1  
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0  
" 语言关键字补全, 不过python关键字都很短,所以,需要的自己打开 
let g:ycm_seed_identifiers_with_syntax=1
let g:ycm_collect_identifiers_from_tags_files = 1
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=2       
              
"mapping
nmap <leader>gd :YcmDiags<CR>
" 跳转到申明处
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>   
" 跳转到定义处       
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>            
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>

" 对指定源文件,输入两个字母后即触发语义补全
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,
          \ }
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 1. 基本配置 """  
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"set shortmess=atI   " 启动的时候不显示那个援助乌干达儿童的提示
set autoindent             " Indent according to previous line.
set expandtab              " Use spaces instead of tabs.
set softtabstop =4         " Tab key indents by 4 spaces.
set shiftwidth  =4         " >> indents by 4 spaces.
set shiftround             " >> indents to next multiple of 'shiftwidth'.
set smartindent       " 为C程序提供自动缩进
set noeb                  " 去掉输入错误的提示声音
set confirm            " 在处理未保存或只读文件的时候,弹出确认
set iskeyword+=_,$,@,%,#,-  " 带有如下符号的单词不要被换行分割
set smarttab    " 在行和段开始处使用制表符
set completeopt=preview,menu      " 代码补全

filetype plugin indent on 
" 打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu

" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
set mouse=a 
" 通过使用: commands命令,告诉我们文件的哪一行被改变过
set report=0

set hidden                 " Switch between buffers without having to save first.
set display     =lastline  " Show as much as possible of the last line.

set ttyfast                " Faster redrawing.
set lazyredraw             " Only redraw when necessary.

set splitbelow             " Open new windows below the current window.
set splitright             " Open new windows right of the current window.

set cursorline             " Find the current line quickly.
set wrapscan               " Searches wrap around end-of-file.
set report      =0         " Always report changed lines.
set synmaxcol   =120       " Only highlight the first 200 columns.

set list                   " Show non-printable characters.
if has('multi_byte') && &encoding ==# 'utf-8'
  let &listchars = 'tab:▸ ,extends:❯,precedes:❮,nbsp:±'
else
  let &listchars = 'tab:> ,extends:>,precedes:<,nbsp:.'
endif

" Put all temporary files under the same directory.
let s:vim_backup = expand("$HOME/.vim/files/backup/")
if !isdirectory(s:vim_backup)
   silent! call mkdir(s:vim_backup, 'p')
endif
let s:vim_swap = expand("$HOME/.vim/files/swap/")
if !isdirectory(s:vim_swap)
   silent! call mkdir(s:vim_swap, 'p')
endif
let s:vim_undo = expand("$HOME/.vim/files/undo/")
if !isdirectory(s:vim_undo)
   silent! call mkdir(s:vim_undo, 'p')
endif
let s:vim_info = expand("$HOME/.vim/files/info/")
if !isdirectory(s:vim_info)
   silent! call mkdir(s:vim_info, 'p')
endif
set backup
set backupdir   =$HOME/.vim/files/backup/
set backupext   =-vimbackup
set backupskip  =
set directory   =$HOME/.vim/files/swap/
set updatecount =100
set undofile
set undodir     =$HOME/.vim/files/undo/
set viminfo     ='100,n$HOME/.vim/files/info/viminfo
" 显示行号
set number
" 取消换行
set nowrap 
" 为方便复制,用<F6>开启/关闭行号显示
nnoremap <F6> :set nonumber!<CR>:set foldcolumn=0<CR>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 2. 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
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 3. 新文件标题 """  
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " 新建.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, "")
     endif
     if &filetype == 'c'
     call append(line(".")+6, "#include <stdio.h>")
     call append(line(".")+7, "#include <stdlib.h>")
     call append(line(".")+8, "")
     endif
     "    if &filetype == 'java'
     "        call append(line(".")+6,"public class ".expand("%"))
     "        call append(line(".")+7,"")
     "    endif
     "新建文件后,自动定位到文件末尾
     autocmd BufNewFile * normal G
 endfunc 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" 4. CTags的设定 """  
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

let Tlist_Sort_Type = "name"    " 按照名称排序  
let Tlist_Use_Right_Window = 1  " 在右侧显示窗口  
let Tlist_Compart_Format = 1    " 压缩方式  
let Tlist_Exist_OnlyWindow = 1  " 如果只有一个buffer,kill窗口也kill掉buffer  

let Tlist_File_Fold_Auto_Close = 0  " 不要关闭其他文件的tags  
let Tlist_Enable_Fold_Column = 0    " 不要显示折叠树  
autocmd FileType java set tags+=D:\tools\java\tags  
"autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags  

"不同时显示多个文件的tag,只显示当前文件的
"let Tlist_Show_One_File=1         
"设置tags  
set tags=tags  
"set autochdir 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  • 安装YouCompleteMe插件
    vim
    :PlugInstall

提示:

  • Q1:
  • A1:

mkdir -p ~/.vim_runtime/sources_non_forked/ack.vim/plugged/YouCompleteMe/third_party/go/src/golang.org/x
cd ~/.vim_runtime/sources_non_forked/ack.vim/plugged/YouCompleteMe/third_party/go/src/golang.org/x
git clone https://github.com/golang/tools.git

cd ~/.vim_runtime/sources_non_forked/ack.vim/plugged/YouCompleteMe/third_party/ycmd/third_party/go/src/golang.org/x
git clone https://github.com/golang/tools.git

cd ~/.vim_runtime/sources_non_forked/ack.vim/plugged/YouCompleteMe
git submodule update --init --recursive

  • 安装虚拟环境
    pip3 install virtualenv
    cd ~/.vim_runtime/sources_non_forked/ack.vim/plugged/YouCompleteMe
    virtualenv venv
    source venv/bin/activate

提示:

  • 退出venv
    deactivate
  • 安装
    ./install.py --clang-completer
  • 新建项目文件夹
    cd ~ && mkdir mydata
    cd mydata
    virtualenv venv
    source venv/bin/activate
    vim test.py
import os
os.

提示:

  • pip3 install requests

参阅:


更新中......


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容