导航:首页 > 编程语言 > vimpythonycm

vimpythonycm

发布时间:2022-07-04 18:49:22

① win7下vim安装youcompleteme不能使用

你从vim的官网下载相应的插件,一般插件都有安装说明,另外自动补全的插件vim上有很多,vim在windows平台上叫gvim,插件一般在plugin目录。。。.YourCompleteMe使用说明-for-windows2.本程序YCM部分使用的几乎是该作者提供的文件。3.使用步骤:a.确保电脑上安装有python2.7,并且python.exe在path目录里。b.在_vimrc中注释掉neocpmplete插件,反注释YourCompleteMe.c.打开vim,输入命令:YcmDebug.如果有看到clang版本信息号,serverrunningat,serverprocessID等即表示YCM已经可以使用。d.对于C++补全,首先确保电脑上安装有MinGW或者CLang(折腾去吧)。然后运行如下命令找到C++的库文件:gcc:POSIXshell:g++-E-xc++--vsearchstartshere:和Endofsearchlist.之间的路径就是C++库路径。按照默认配载的格式添加进去。你也可以直接下载我克隆的MinGW,把它放在C盘根目录,再把MinGW/bin目录加到path中。e.经测试,XP系统YCM不可用。WIN7X86和64可以正常使用。原因未知。

② vim 怎么避免重复的bundleInstall

把别人的配置脚本拷贝过来之后,是使用vundle进行插件管理的,所以的插件都安装完成之后,发现每次使用vim打开新的文件的时候都需要重新使用bundleInstall才能使用插件,在脚本写什么才能不做这重复的工作?

此外,.vimrc的这句话被我注释掉了:
call vundle#end()
因为不注释掉,使用vim打开文件后就莫名的stopped了,会有影响什么的吗?

配置文件如下
========================================.vimrc=======================================
" ***************** 全局设置 ************** "
"保持文件上次打开的位置
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

" 开启文件类型侦测
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
" 交互式打开shell
set shell=bash\ -i

" *************** 设置全局快捷键 *****************

" 定义快捷键的前缀,即<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

" YCM 补全菜单配色
" 菜单
"highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
" 选中项
"highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
"设置ycm的pyhton编译
let g:ycm_server_python_interpreter='/usr/bin/python'

" 补全功能在注释中同样有效
let g:ycm_complete_in_comments=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/.ycm_extra_conf.py'
"let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

""" color settings
""" Solarized """
"let g:solarized_termcolors=16
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>
"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 on

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

" 设置tagbar
" 设置 tagbar 子窗口的位置出现在主编辑区的左边
let tagbar_left=1
" " 设置显示/隐藏标签列**窗口的快捷键。速记:identifier list by tag
nnoremap <Leader>t :TagbarToggle<CR>
" " 设置标签子窗口的宽度
let tagbar_width=32
" " tagbar 子窗口中不显示冗余帮助信息
let g:tagbar_compact=1
" " 设置 ctags 对哪些代码标识符生成标签

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

③ 学会了 Vim 还有必要用 GitHub Atom 或者 Sublime Text 么

用过 [ Visual Studio 2015 ] [ Sublime Text 3 ] [ WebStorm 9 ] [ IDEA 14 ] [ atom ](这货尼玛有很多BUG!)等等编辑器.
我想说,只有Emacs 和 Vim 最适合我。。学会Vim 之后我几乎不想换其他任何编辑器(Emacs除外,来烧死我吧),目前在玩Vim.(由于是做Web开发, 所有JetBrains的IDE只用来调试一下JXH,NodeJS,以及上线前的优化,排错,不做正常用途)

--------------- 看了这么多小伙伴点赞, 那我奉上我GVim,NeoVim的截图 ---------------
--------------- Update 小伙伴支持过100赞, 感谢大家,vimrc dotfile 项目地址-------------------

地址:DemonCloud/Aix-Vim · GitHub
持续更新,长期维护 -- 如果你觉得我的dotfile和markdown对你学习Vim有帮助,请赏个github star,谢谢~

注:此项目中包含了 linux 和 Windows 下两种不同的配置文件, Windows下的Gvim 已经更新到了最新版本的7.4.898,已打包,项目地址中有Windows版本的下载,本人已经完全迁移到Linux环境下, 详情请参见项目,有任何issue请及时提交,有疑问可以私信我 @亦俊

Update 2015.7.14
OS: Ubuntu 14.04 TLS 1366*768(LabTop)
ColorScheme: J (自写自用,-- 囧 . DemonCloud/J · GitHub)
GVim & Vim 7.4.781 ( 最新自己编译版本: ftp://ftp.vim.org/pub/vim/patches/7.4/README )
Fonts: [ Aix ] ( Aix BitMap 字体 由我自己制定,已经开源,请看项目 )

一些GIF:
Bug Repo 给老外 : Support vim-multiple-cursors ??? · Issue #151 · justinmk/vim-sneak · GitHub

------------ 点赞数超过 100, 马上奉上自己的 vimrc 配置文件(包括Windows 和 Linux 下的)
赤裸裸的抢劫啊!


后我以一个新人的身份入驻了 Vim。 并且折腾配置学习了一个月。 最后才能够真正规范, 明了的用 Vundle
优雅的管理插件,整合一套Vim中比较爽的插件组合, 大概20几个。 然后读懂, 读明白每一行 vimrc代码的含义。 并且愉快的享受这 Vim
给我带来的刺激。 可能我是一个天生就爱折腾, 爱完美的男人(虽然我不是处女座)

关于题目:
首先。关于题目, 题目命名其实本身有问题 :
有了 Vim 还有必要用 github atom 或者 sublime text 么?

应该改成, 学会了 Vim 还有必要用 github atom 或者 sublime text 么?
如果按照题主这样问。 我可以说, 有了Vim 。 对于一个不爱折腾的人,有必要使用 atom 和 sublime。

但是如果问题是 学会了Vim 还有必要使用。。。 ??
这样的话, 我可以以我的亲身经历告诉题主。 你学会了 Vim。不说你会不会用 VimScript写插件。 完全可以丢弃其他的 IDE.

Vim 的真谛:(个人理解)
一:
其实Vim背后代表的更多是一种Geek思想,而不是装波一(B)。
也就是:“你只需要你需要的,丢掉那些你不需要的”。 一种极简思想。
一个臃肿的编辑器,你只会用到它功能的10%,其余90%的选项,你都没有心思去研究。
而也就这10%是你真正需要的,为什么不丢弃臃肿的90%, 轻松旅行呢?

二:
秉承Unix哲学: 一切皆文本.
Vim把对文本的掌控权交给了你,让你通过各种 ‘奇技淫巧’ 来操作它。
看似奇怪的键位,其实是那些前人总结出来的一套非常高效实用的文本操作技巧。
都是熟能生巧。

说说Vim 为什么比 IDE要叼。这里推荐一些插件
1. 使用 ag.vim 优雅的完成代码搜索, 速度比ack快上153%. 关键词各种秒搜而且自动忽略.git .,svn 类似的版本控制文件。且速度比IDE快了不少 。 而且定位代码速度飞起

2. 使用 vimshell + vimproc
优雅的在 Vim中完成各种CMD,终端操作。 从来没有见过,如此优雅的Shell 执行方式。 直接打开GUI 在里面模拟一个终端,非常爽,
前提是你要知道, 怎么在你当前的环境里, 编译 vimproc。 我在 Windows 8 下轻松的用 MinGW 完成编译。

3 使用 YouCompleteMe
优雅的自动补全。 YCM是Google的C++工程师开发的一套比较叼的代码补全插件。 需要 Python 2.7 以上的支持,
配置的话没什么复杂, 有外国人编译好的Windows版本。 我已经成功在 Windows下配置。很简单,轻松。 除非你不想看 FAQ,
那就没法子了。

4 使用 Ultisnip 优雅的增强补全。 这个插件可以扩展YCM 的提示,而且可以自定义代码生成。简直神器。

5. 使用 Multiple-Cursors 优雅的完成多光标同时输入。 我去, 这他吗比 Sublime Text 的多光标屌多了。。 为什么? 还在用 Sublime 的 Alt + 鼠标右键?。。。 Too young to simple。。。
哎哟,我去, 实在忍不住上图了.知乎蛋疼的不能上传Gif
Link: vim-multiple-cursors

6 使用 tagbar 优雅的查看 函数,类,变量。 不解释了。
。。。。 好了, 还有一堆神级插件, 这里我就不说了。。。

你只有 折腾 Vim 累死过 3次, 你才能真正的喜欢上它, 不然你就会选择放弃,最终回到 IDE
在Vim的世界里,一切都需要自己动手,所以,他不适合不喜欢折腾的人,如果你对它没有200%的好奇心,不要玩, 不然你一定会摔键盘.

为什么说 Vim 写代码快? 前提你累死过3次,成功配置了Vim。
那么开始神奇的Vim之旅。你就发现。

1.你删代码比队友快 “first blood”
2.自动补全比队友快
3 在20个G的文件堆里定位代码各种秒杀你队友
4 在vim中完成各种shell , 秒杀你队友 “Killing spree”!
5 优雅的更新升级, 删除 Vim插件(前提 Vundle) “Dominating”!
6 随性的自定义快捷键,完全属于你自己的风格, 一个配置文件随身带着走。或者压缩Vim文件包带着走, 想去哪就去哪,不用等你队友带节奏。 Unstoppable!
7 你队友还在用鼠标?那你已经进化了 。 Wicked Sick!!
8 什么? 开始用 Vim Markdown 来写文档了? 我草,你已经超神了!! God Like!!!
9 你已经离不开Vim了。 从最开始被各种折腾到想要砸键盘的你, 如今你已经爱上他了。 aM-m-m-m....(重复8次)Monster Kill
10. 你注定和 Vim 过完这一生!......Holy Shit

于是你开始对自己以前的一些行为出现质疑:
删除一行 dd 不就行了。。为什么要鼠标选中一行之后按下backspace?
清除一行内容S 不就行了,为什么还要鼠标选中一行然后按下backspace?
给一行末尾补分号,A; 不就好了,为什么还要鼠标移过去末尾点一下然后按下; ?
然后给n行末尾补分号,Vjj*选中多行 :normal . 不就好了, 为什么要鼠标一个一个点了然后一个个补?
复制a行插入到b行后, dd掉a行在b行那按下p不就好了。 为什么要鼠标选中a,ctrl+x ,然后到b的末尾按下回车,然后ctrl-v ?
................................................

................................................

基本上是不适合在 Windows 环境下玩的,Vim比较适合在 OS X 或者 Linux下跑,原因是Windows实在是太坑了。 Gvim 性能不行,然后很多插件的兼容性很差。

④ 如何在Windows下给Vim安装YouCompleteMe

安装YCM有几个基本的要求:

包含Python支持的Vim版本。
LLVM/Clang,具体地说其实是libclang.dll这一个文件。
Haroogan预编译好的YCM库,主要是指ycm_core.pyd这个文件。
检查Vim的Python支持的办法是在cmd中运行python --version看看出来的Python前面是否有加号,或者在Vim中执行:echo has('python')。不过相信会看这篇文章的多半是从官网下的gvim74,很不幸地这个版本并不支持Python。

不过Haroogan同学很贴心地给出了全套解决方案,上面的三个基本要求他都提供了预编译好的版本:

带Python和其它一大票语言支持的Vim
LLVM for Windows
YCM
需要提醒的是,不知道什么原因,上面的bitbucket.org网站中正文里的链接都挂了,不过还好下载链接可以在左侧的Downloads里找到。

⑤ 有谁安装过vim的插件,YouCompleteMe的,出现问题YouCompleteMe/python/ycm_core.so: Permission denied

权限问题, 简单点儿就chmod 777

⑥ archlinux 怎么安装vim 插件youcompleteme

a.确保电脑上安装有python2.7,并且python.exe在path目录里。
b.在_vimrc中注释掉neocpmplete插件,反注释YourCompleteMe.
c.打开vim ,输入命令 :YcmDebug.如果有看到clang版本信息号,server running at,server process ID 等即表示YCM已经可以使用。

⑦ 为啥vim和gvim对python的支持不一样

有人在realpython.com宣扬Sublime Text 3。作为公司的资深开发人员(呃,也就是老古董),我觉得有义务介绍一个真正的Python开发环境给大家——我要推荐的当然就是Vim了。不错,Vim编辑器无处不在,速度快,从来不会崩溃。并且,它能做任何事情!
不过,不利之处也有,就是Vim配置起来很让人头疼。但是,别担心,本文将告诉你如何配置一个强大的Vim环境,专门用于天天捣鼓Python开发。
下面是最终效果预览。
如果想充分地利用好本文,你应该对如何使用Vim和它的命令模式至少有一个基本的了解。如果你是初学者,你可以通过vim-adventure或者openvim网站学习。在继续阅读本文之前,请花点时间浏览那两个网站的内容。
安装
因为许多Unix衍生系统已经预装了Vim,我们首先要确认编辑器是否成功安装:
vim --version
如果已经安装了,你应该看到类似下面的文字:
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 5 2014 21:00:28)
Compiled by [email protected]
Normal version without GUI. Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
-conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs
-dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path
+find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv
+insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape
-mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse
+mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg -osfiletype
+path_extra -perl +persistent_undo +postscript +printer -profile +python/dyn
-python3 +quickfix +reltime -rightleft +ruby/dyn +scrollbind +signs
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
-toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo
+vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
-xterm_clipboard -xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses
在这一步,你要确保已经满足以下两点要求:
Vim编辑版本应该大于7.3。
支持Python语言。在所选编辑器的功能中,确保你看到了+python。
如果满足上述要求,接下来可以安装Vim扩展了。如果不满足,则需要安装/升级。
Unix衍生系统
Debian或Ubuntu系统,可以使用下面的代码:
sudo apt-get remove vim-tiny
apt-get update
apt-get install vim
如果是其他版本的Linux系统,请查阅相应版本包管理器的文档。不清楚的话,可以先阅读这篇文章:安装Vim
验证安装
确保你已经安装了7.3版本以上、支持Python的Vim编辑器。你可以再次运行vim --version进行确认。如果你想知道Vim中使用的Python版本,你可以在编辑器中运行:python import sys; print(sys.version)。
2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]
这行命令会输出你的编辑器当前的Python版本。如果报错,那么你的编辑器就不支持Python语言,需要重装或重新编译。
Vim编辑器安装完成后,我们来看看如何将其设置为Python开发的强大环境。
Vim扩展
Vim本身能够满足开发人员的很多需求,但是它的可扩展性也极强,并且已经有一些杀手级的扩展,可以让Vim拥有“现代”集成开发环境的特性。所以,你所需要的第一件东西就是一个好用的扩展管理器。
Vim的扩展通常也被成为bundle或插件。
Vundle
Vim有多个扩展管理器,但是我们强烈推荐Vundle。你可以把它想象成Vim的pip。有了Vundle,安装和更新包这种事情不费吹灰之力。
我们现在来安装Vundle:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
该命令将下载Vundle插件管理器,并将它放置在你的Vim编辑器bundles文件夹中。现在,你可以通过.vimrc配置文件来管理所有扩展了。
将配置文件添加到你的用户的home文件夹中:
touch ~/.vimrc
接下来,把下来的Vundle配置添加到配置文件的顶部:
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
这样,你就完成了使用Vundle前的设置。之后,你就可以在配置文件中添加希望安装的插件,然后打开Vim编辑器,运行下面的命令:
:PluginInstall
这个命令告诉Vundle施展它的魔法——自动下载所有的插件,并为你进行安装和更新。
开始打造IDE吧
本文不可能列举Vim的全部功能,只能快速介绍一些Vim自带的强大功能,它们对于Python开发来说是非常有用的。
扔掉鼠标
或许,Vim编辑器最重要的功能就是它不要求使用鼠标(除了GUI版本外)。一开始,你可能会觉得这是个非常糟糕的做法,但是只要你投入时间——是的,这很花时间——学习快捷组合键,就可以大幅提升工作流的速度。
分割布局(Split Layouts)
使用:sv <filename>命令打开一个文件,你可以纵向分割布局(新文件会在当前文件下方界面打开),使用相反的命令:vs <filename>, 你可以得到横向分割布局(新文件会在当前文件右侧界面打开)。
你还可以嵌套分割布局,所以你可以在分割布局内容再进行分割,纵向或横向都可以,直到你满意为止。众所周知,我们开发时经常需要同时查看多个文件。
专业贴士:记得在输入完:sv后,利用tab补全功能,快速查找文件。
专业贴士:你还可以指定屏幕上可以进行分割布局的区域,只要在.vimrc文件中添加下面的代码即可:
set splitbelow
set splitright
专业贴士:想要不使用鼠标就切换分割布局吗?只要将下面的代码添加到.vimrc文件中,你就可以通过快捷组合键进行切换。
"split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
组合快捷键:
Ctrl-j 切换到下方的分割窗口
Ctrl-k 切换到上方的分割窗口
Ctrl-l 切换到右侧的分割窗口
Ctrl-h 切换到左侧的分割窗口
换句话说, 按Ctrl+Vim的标准移动键,就可以切换到指定窗口。
等等,nnoremap是什么意思?——简单来说,nnoremap将一个组合快捷键映射为另一个快捷键。一开始的n,指的是在Vim的正常模式(Normal Mode)下,而不是可视模式下重新映射。基本上,nnoremap <C-J> <C-W><C-j>就是说,当我在正常模式按下<C-J>时,进行<C-W><C-j>操作。更多信息请看这里。
缓冲区(Buffers)
虽然Vim支持tab操作,仍有很多人更喜欢缓冲区和分割布局。你可以把缓冲区想象成最近打开的一个文件。Vim提供了方便访问近期缓冲区的方式,只需要输入:b <buffer name or number>,就可以切换到一个已经开启的缓冲区(此处也可使用自动补全功能)。你还可以通过ls命令查看所有的缓冲区。
专业贴士: 在:ls命令输出的最后,Vim会提示“敲击Enter继续查看”,这时你可以直接输入:b <buffer name>,立即选择缓冲区。这样可以省掉一个按键操作,也不必去记忆缓冲区的名字。
代码折叠(Code Folding)
大多数“现代”集成开发环境(IDE)都提供对方法(methods)或类(classes)进行折叠的手段,只显示类或方法的定义部分,而不是全部的代码。
你可以在.vimrc中添加下面的代码开启该功能:
" Enable folding
set foldmethod=indent
set foldlevel=99
这样就可以实现,但是你必须手动输入za来折叠(和取消折叠)。使用空格键会是更好的选择。所以在你的配置文件中加上这一行命令吧:
" Enable folding with the spacebar
nnoremap <space> za
现在你可以轻松地隐藏掉那些当前工作时不需要关注的代码了。
第一个命令,set foldmethod=ident会根据每行的缩进开启折叠。但是这样做会出现超过你所希望的折叠数目。但是别怕,有几个扩展就是专门解决这个问题的。在这里,我们推荐SimplyFold。在.vimrc中加入下面这行代码,通过Vundle进行安装:
Plugin 'tmhedberg/SimpylFold'
不要忘记执行安装命令::PluginInstall
专业贴士: 希望看到折叠代码的文档字符串?
let g:SimpylFold_docstring_preview=1
Python代码缩进
当然,想要代码折叠功能根据缩进情况正常工作,那么你就会希望自己的缩进是正确的。这里,Vim的自带功能无法满足,因为它实现不了定义函数之后的自动缩进。我们希望Vim中的缩进能做到以下两点:
首先,缩进要符合PEP8标准。
其次,更好地处理自动缩进。
PEP8
要支持PEP8风格的缩进,请在.vimrc文件中添加下面的代码:
au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
\ set fileformat=unix
这些设置将让Vim中的Tab键就相当于4个标准的空格符,确保每行代码长度不超过80个字符,并且会以unix格式储存文件,避免在推送到Github或分享给其他用户时出现文件转换问题。
另外,对于全栈开发,你可以设置针对每种文件类型设置au命令:
au BufNewFile,BufRead *.js, *.html, *.css
\ set tabstop=2
\ set softtabstop=2
\ set shiftwidth=2
自动缩进
自动缩进有用,但是在某些情况下(比如函数定义有多行的时候),并不总是会达到你想要的效果,尤其是在符合PEP8标准方面。我们可以利用indentpython.vim插件,来解决这个问题:
Plugin 'vim-scripts/indentpython.vim'
标示不必要的空白字符
我们希望避免出现多余的空白字符。可以让Vim帮我们标示出来,使其很容易发现并删除。
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
这会将多余的空白字符标示出来,很可能会将它们变成红色突出。
支持UTF-8编码
大部分情况下,进行Python开发时你应该使用UTF-8编码,尤其是使用Python 3的时候。确保Vim设置文件中有下面的命令:
set encoding=utf-8
自动补全
支持Python自动补全的最好插件是YouCompleteMe。我们再次使用Vundle安装:
Bundle 'Valloric/YouCompleteMe'
YouCompleteMe插件其实底层使用了一些不同的自动补全组件(包括针对Python开发的Jedi),另外要安装一些C库才能正常工作。插件官方文档提供了很好的安装指南,我就不在这里重复了。切记跟随文档的步骤进行安装。
安装完成后,插件自带的设置效果就很好,但是我们还可以进行一些小的调整:
let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
上面的第一行确保了在你完成操作之后,自动补全窗口不会消失,第二行则定义了“转到定义”的快捷方式。
支持Virtualenv虚拟环境
上面“转到定义”功能的一个问题,就是默认情况下Vim不知道virtualenv虚拟环境的情况,所以你必须在配置文件中添加下面的代码,使得Vim和YouCompleteMe能够发现你的虚拟环境:
"python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
project_base_dir = os.environ['VIRTUAL_ENV']
activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
EOF
这段代码会判断你目前是否在虚拟环境中编辑,然后切换到相应的虚拟环境,并设置好你的系统路径,确保YouCompleteMe能够找到相应的site packages文件夹。
语法检查/高亮
通过安装syntastic插件,每次保存文件时Vim都会检查代码的语法:
Plugin 'scrooloose/syntastic'
还可以通过这个小巧的插件,添加PEP8代码风格检查:
Plugin 'nvie/vim-flake8'
最后,让你的代码变得更漂亮:
let python_highlight_all=1
syntax on
配色方案
配色方案可以和你正在使用的基础配色共同使用。GUI模式可以尝试solarized方案, 终端模式可以尝试Zenburn方案:
Plugin 'jnurmine/Zenburn'
Plugin 'altercation/vim-colors-solarized'
接下来,只需要添加一点逻辑判断,确定什么模式下使用何种方案就可以了:
if has('gui_running')
set background=dark
colorscheme solarized
else
colorscheme Zenburn
endif
Solarized方案同时提供了暗色调和轻色调两种主题。要支持切换主题功能(按F5)也非常简单,只需添加:
call togglebg#map("<F5>")
文件浏览
如果你想要一个不错的文件树形结构,那么NERDTree是不二之选。
Plugin 'scrooloose/nerdtree'
如果你想用tab键,可以利用vim-nerdtree-tabs插件实现:
Plugin 'jistr/vim-nerdtree-tabs'
还想隐藏.pyc文件?那么再添加下面这行代码吧:
let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
超级搜索
想要在Vim中搜索任何文件?试试ctrlP插件吧:
Plugin 'kien/ctrlp.vim'
正如插件名,按Ctrl+P就可以进行搜索。如果你的检索词与想要查找的文件相匹配的话,这个插件就会帮你找到它。哦,对了——它不仅仅可以搜索文件,还能检索标签!更多信息,可以观看这个Youtube视频.
显示行号
开启显示行号:
set nu
Git集成
想要在Vim中执行基本的Git命令?vim-fugitive插件则是不二之选。
Plugin 'tpope/vim-fugitive'
请看Vimcasts的这部视频,了解更多情况。
Powerline状态栏
Powerline是一个状态栏插件,可以显示当前的虚拟环境、Git分支、正在编辑的文件等信息。
这个插件是用Python编写的,支持诸如zsh、bash、tmux和IPython等多种环境。
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
请查阅插件的官方文档,了解配置选项。
系统剪贴板
通常Vim会忽视系统剪贴板,而使用自带的剪贴板。但是有时候你想从Vim之外的程序中剪切、复制、粘贴文本。在OS X平台上,你可以通过这行代码访问你的系统剪贴板:
set clipboard=unnamed
Shell开启Vim编辑模式
最后,当你熟练掌握了Vim和它的键盘快捷方式之后,你会发现自己经常因为shell中缺乏相同的快捷键而懊恼。没关系,大部分的shell程序都有Vi模式。在当前shell中开启Vi模式,你只需要在~/.inputrc文件中添加这行代码:
set editing-mode vi
现在,你不仅可以在shell中使用Vim组合快捷键,还可以在Python解释器以及任何利用GNU Readline程序的工具(例如,大多数的数据库shell)中使用。现在,你在什么地方都可以使用Vim啦!
结语
Vim的设置到这里就差不多了(至少对于Python开发来说是这样的)。当然,开源世界里还有大量你可以使用的其他扩展,以及本文中所提到插件的替代品。你最喜爱的扩展是什么?你又是如何将Vim设置符合你喜好的?
这是我本人的Vim配置文件链接。你有没有自己的设置代码?请与我们分享!
谢谢!
资源
Vim Tutor是Vim自带的程序,安装结束之后,只要在命令行输入vimtutor即可,程序将会用Vim编辑器教你如何使用Vim。
Vimcasts是一系列的高阶视频教程,内容涉及许多Vim的功能。
Vim官方文档
Open Vim
笨办法学Vimscript是学习vimscript的极好材料。

⑧ 如何让YouCompleteMe支持php补全

ycm这里查不到php的completer,有这么几种措施:1. 给YCM指定一个外部completer,也就是一个vim插件,比如phpcomplete:autocmd FileType php setlocal omnifunc=phpcomplete#Complete类似地,你可以用javacomplete2等插件来补全java,jedi-vim来补全python,但是当然,YCM的GOTO等semantic功能就不能用了,我正是这样做的:autocmd FileType java setlocal omnifunc=javacomplete#Complete2. 补全的时候强制调用,ctrl+space。3. 有atom插件的话试试卸载了。4. 重新装一次所有的plugin。YCM不提供除了C系和Python的Goto definition。。。用ctags吧。c/c++ 管用,不知道对PHP对否生效。

⑨ 为什么用 YCM 补全 python 无法补全第三方库

YCM毕竟只是一个vim插件,功能毕竟有限,但是已经足够强大了,,Python这种语言 也不要太多的提示吧,很多东西都比较语义化了,很容易就hi的

阅读全文

与vimpythonycm相关的资料

热点内容
编译程序输入一个字符串 浏览:404
圆命令画法 浏览:305
如果给电脑e盘文件加密 浏览:801
javaswing项目 浏览:774
androidsdksetup 浏览:1003
pdf怎么设置中文 浏览:126
安卓手机用什么软件看伦敦金 浏览:964
魅族文件夹无名称 浏览:789
苏黎世无人机算法 浏览:872
核桃编程和小码王的融资 浏览:684
微积分教材pdf 浏览:725
写python给微信好友发消息 浏览:336
蚊帐自营米加密 浏览:420
学校推荐核桃编程 浏览:804
湖南农信app怎么导明细 浏览:473
福特abs编程 浏览:509
如何自学安卓手机 浏览:439
以太坊源码共识机制 浏览:912
单片机探测器 浏览:872
demo编程大赛作品怎么运行 浏览:52