① 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 root@apple.com
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的