zoukankan      html  css  js  c++  java
  • 强化vim打造python的IDE

    1、手动安装vim

    原因:构建出支持python的vim。

    wget https://github.com/vim/vim/archive/master.zip
    unzip master.zip
    cd vim-master/
    ./configure --with-features=huge --enable-pythoninterp --enable-rubyinterp --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu --enable-gui=gtk2 --enable-cscope --prefix=/usr

    说明:
    /usr/lib/python2.7/config-x86_64-linux-gnu是python-dev(ubuntu叫python-dev,其他系统可能叫python-devel,区别所在)安装后的路径。cd 到自己的python安装目录下,看下config*形式的基本就是。
    –enable-pythoninterp、–enable-rubyinterp、–enable-perlinterp、–enable-luainterp 等分别表示支持 ruby、python编写的插件,–enable-gui=gtk2 表示生成采用 GNOME2 风格的 gvim,–enable-cscope 支持 cscope。

    执行上述命令,会提示系统缺失哪些必要环境。如我的:

    checking for tgetent in -ltinfo... no
    checking for tgetent in -lncurses... no
    checking for tgetent in -ltermlib... no
    checking for tgetent in -ltermcap... no
    checking for tgetent in -lcurses... no
    no terminal library found
    checking for tgetent()... configure: error: NOT FOUND!
          You need to install a terminal library; for example ncurses.
          Or specify the name of the library with --with-tlib.

    说我缺失tgetent,举例说ncurses是一种tgetent,那么我就安装它,百度后知道ncurses-devel包即可,ubuntu的命名规则自然使用:

    sudo apt-get install ncurses-dev

    然后再继续刚才的安装步骤,执行:

    sudo make
    sudo make install

    构建完成之后执行:

    vim
    :echo has('python')

    若输出 1 则表示构建出的 vim 已支持 python,反之,0 则不支持。

    2、vim的配置

    vim的配置主要包括2个内容:

     - .vimrc 文件
     - .vim文件夹
    

    是在用户目录下的2个隐藏文件。.vimrc 主管配置,是控制 vim 行为的配置文件,位于 ~/.vimrc,不论 vim 窗口外观、显示字体,还是操作方式、快捷键、插件属性均可通过编辑该配置文件将 vim 调教成最适合你的编辑器。
    .vimrc 常用的几类基本配置:
    文件类型侦测。允许基于不同语言加载不同插件(如,C++ 的语法高亮插件与 python 的不同):

    " 开启文件类型侦测
    filetype on
    " 根据侦测到的不同类型加载对应的插件
    filetype plugin on

    快捷键。把 vim(非插件)常用操作设定成快捷键,提升效率:

    " 定义快捷键到行首和行尾
    nmap LB 0
    nmap LE $
    " 设置快捷键将选中文本块复制至系统剪贴板
    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>lw <C-W>l
    " 跳转至左方的窗口
    nnoremap <Leader>hw <C-W>h
    " 跳转至上方的子窗口
    nnoremap <Leader>kw <C-W>k
    " 跳转至下方的子窗口
    nnoremap <Leader>jw <C-W>j
    " 定义快捷键在结对符之间跳转
    nmap <Leader>M %
    

    其他。搜索、vim 命令补全等设置:

    " 开启实时搜索功能
    set incsearch
    " 搜索时大小写不敏感
    set ignorecase
    " 关闭兼容模式
    set nocompatible
    " vim 自身命令行模式智能补全
    set wildmenu

    .vim主要是存放各种插件。
    .vim/ 目录是存放所有插件的地方。vim 有一套自己的脚本语言 vimscript,通过这种脚本语言可以实现与 vim 交互,达到功能扩展的目的。一组 vimscript 就是一个 vim 插件,vim 的很多功能都由各式插件实现。vim.org 和 github.com 有丰富的插件资源,任何你想得到的功能,如果 vim 无法直接支持,那一般都有对应的插件为你服务,有需求时可以去逛逛。

    vim 插件目前分为 .vim 和 .vba 两类,前者是传统格式的插件,实际上就是一个文本文件,通常 someplugin.vim(插件脚本)与 someplugin.txt(插件帮助文件)并存在一个打包文件中,解包后将 someplugin.vim 拷贝到 ~/.vim/plugin/ 目录,someplugin.txt 拷贝到 ~/.vim/doc/ 目录即可完成安装,重启 vim 后刚安装的插件就已经生效,但帮助文件需执行 :helptags ~/.vim/doc/ 才能生效,可通过 :h someplugin 查看插件帮助信息。
    目前插件管理使用的vim的插件管理插件 vundle。

    3、插件管理

    使用vundle 接管 .vim/ 下的所有原生目录,所以先清空该目录,再通过如下命令安装 vundle:

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

    接下来在 .vimrc 增加相关配置信息:

    " vundle 环境设置
    filetype off
    set rtp+=~/.vim/bundle/Vundle.vim
    " vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
    call vundle#begin()
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'altercation/vim-colors-solarized'
    " 插件列表结束
    call vundle#end()
    filetype plugin indent on

    其中,每项

    Plugin 'altercation/vim-colors-solarized'

    对应一个插件(这与 go 语言管理不同代码库的机制类似),后续若有新增插件,只需追加至该列表中即可。vundle 支持源码托管在 https://github.com/ 的插件,具体而言,仍以 ctrlsf.vim 为例,它在 .vimrc 中配置信息为 dyng/ctrlsf.vim,vundle 很容易构造出其真实下载地址 https://github.com/dyng/ctrlsf.vim.git ,然后借助 git 工具进行下载及安装。

    此后,需要安装插件,先找到其在 github.com 的地址,再将配置信息其加入 .vimrc 中的call vundle#begin() 和 call vundle#end() 之间,最后进入 vim 执行

    :PluginInstall

    要卸载插件,先在 .vimrc 中注释或者删除对应插件配置信息,然后在 vim 中执行:

    :PluginClean

    即可删除对应插件。插件更新频率较高,差不多每隔一个月你应该看看哪些插件有推出新版本,批量更新,只需执行

    :PluginUpdate

    4、python IDE的配置

    参考的是:https://github.com/j1z0/vim-config/blob/master/vimrc
    编辑~/.vimrc文件,拷贝进去以下内容

    "vundle
    set nocompatible
    filetype off
    
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    
    Plugin 'VundleVim/Vundle.vim'
    "git interface
    Plugin 'tpope/vim-fugitive'
    "filesystem
    Plugin 'scrooloose/nerdtree'
    Plugin 'jistr/vim-nerdtree-tabs'
    Plugin 'kien/ctrlp.vim' 
    
    "html
    "  isnowfy only compatible with python not python3
    Plugin 'isnowfy/python-vim-instant-markdown'
    Plugin 'jtratner/vim-flavored-markdown'
    Plugin 'suan/vim-instant-markdown'
    Plugin 'nelstrom/vim-markdown-preview'
    "python sytax checker
    Plugin 'nvie/vim-flake8'
    Plugin 'vim-scripts/Pydiction'
    Plugin 'vim-scripts/indentpython.vim'
    Plugin 'scrooloose/syntastic'
    
    "auto-completion stuff
    "Plugin 'klen/python-mode'
    Plugin 'Valloric/YouCompleteMe'
    Plugin 'klen/rope-vim'
    "Plugin 'davidhalter/jedi-vim'
    Plugin 'ervandew/supertab'
    ""code folding
    Plugin 'tmhedberg/SimpylFold'
    
    "Colors!!!
    Plugin 'altercation/vim-colors-solarized'
    Plugin 'jnurmine/Zenburn'
    
    call vundle#end()
    
    filetype plugin indent on    " enables filetype detection
    let g:SimpylFold_docstring_preview = 1
    
    "autocomplete
    let g:ycm_autoclose_preview_window_after_completion=1
    
    "custom keys
    let mapleader=" "
    map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>
    "
    call togglebg#map("<F5>")
    "colorscheme zenburn
    "set guifont=Monaco:h14
    
    let NERDTreeIgnore=['.pyc$', '~$'] "ignore files in NERDTree
    
    "I don't like swap files
    set noswapfile
    
    "turn on numbering
    set nu
    
    "python with virtualenv support
    py << EOF
    import os.path
    import sys
    import vim
    if 'VIRTUA_ENV' in os.environ:
      project_base_dir = os.environ['VIRTUAL_ENV']
      sys.path.insert(0, project_base_dir)
      activate_this = os.path.join(project_base_dir,'bin/activate_this.py')
      execfile(activate_this, dict(__file__=activate_this))
    EOF
    
    "it would be nice to set tag files by the active virtualenv here
    ":set tags=~/mytags "tags for ctags and taglist
    "omnicomplete
    autocmd FileType python set omnifunc=pythoncomplete#Complete
    
    "------------Start Python PEP 8 stuff----------------
    " Number of spaces that a pre-existing tab is equal to.
    au BufRead,BufNewFile *py,*pyw,*.c,*.h set tabstop=4
    
    "spaces for indents
    au BufRead,BufNewFile *.py,*pyw set shiftwidth=4
    au BufRead,BufNewFile *.py,*.pyw set expandtab
    au BufRead,BufNewFile *.py set softtabstop=4
    
    " Use the below highlight group when displaying bad whitespace is desired.
    highlight BadWhitespace ctermbg=red guibg=red
    
    " Display tabs at the beginning of a line in Python mode as bad.
    au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^	+/
    " Make trailing whitespace be flagged as bad.
    au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /s+$/
    
    " Wrap text after a certain number of characters
    au BufRead,BufNewFile *.py,*.pyw, set textwidth=100
    
    " Use UNIX (
    ) line endings.
    au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix
    
    " Set the default file encoding to UTF-8:
    set encoding=utf-8
    
    " For full syntax highlighting:
    let python_highlight_all=1
    syntax on
    
    " Keep indentation level from previous line:
    autocmd FileType python set autoindent
    
    " make backspaces more powerfull
    set backspace=indent,eol,start
    
    
    "Folding based on indentation:
    autocmd FileType python set foldmethod=indent
    "use space to open folds
    nnoremap <space> za 
    "----------Stop python PEP 8 stuff--------------
    
    "js stuff"
    autocmd FileType javascript setlocal shiftwidth=2 tabstop=2

    在vim中执行:

    :PluginInstall
  • 相关阅读:
    逐级汇总示例(循环逐级累计法).sql
    UdtSsn.cs
    2013届大华股份 软件算法类试题 D卷
    TCP与UDP区别
    浙江大华 研发类试题
    百度面试经历
    Contiki入门学习
    09网易校园招聘笔试题
    (转载)利用webkit抓取动态网页和链接
    2012.9.23 搜狗笔试
  • 原文地址:https://www.cnblogs.com/windanchaos/p/6398806.html
Copyright © 2011-2022 走看看