有哪些編程必備的 Vim 配置?

用 Vim 的話, 有什麼推薦的配置呢?


更新,給 Vim 8 / NeoVim 寫了個更好用的,asyncrun, 一個月時間http://vim.org上 100多星,對比:

  • ctrlp 700多星用了5年

  • UltiSnip 700星用了7年

  • vim-airline:300多星用了3年

可以在 vim 8 /neovim 裡面方便的啟動各種後台任務,結果會實時輸出到 Quickfix窗口:

https://github.com/skywind3000/asyncrun.vim

只有一條命令,就是 :AsyncRun ,跟vim中的 ! 一樣用法,後面接 shell 命令即可:

非同步git push:AsyncRun git push origin master

非同步編譯:AsyncRun gcc % -o %&<

非同步更新 tag:AsyncRun ctags -R --fields=+S .

非同步 grep:AsyncRun grep -R & .

所有命令都會在後台運行,不再需要等待整個進程結束才能繼續。進程輸出會被實時顯示到 Quickfix窗口中,編譯器錯誤輸出也會使用 vim的 errorformat 得到匹配,在後台命令運行的過程中,你可以馬上跳到 quickfix窗口查看輸出或者繼續象往常一樣的在vim裡面編輯你的文件,同時跑著你的程序。

-----------------

能不能推薦下自己寫的用了好幾年的編程插件:vimmake ?完美支持 vim的非同步模式:

GitHub - skywind3000/vimmake: Customize shell commands in vim

讓用戶自定義各種不同的編譯,運行任務,並且在 Vim 中執行他們。類似 NotePad++的自定義 Commands 和 EditPlus/UltraEdit 的 "User Tool" 或者 GEdit中的 External Tool 以及 TextMate 中的 Shell Command。完美支持 vim 7.4.1829 後已經穩定成熟的非同步任務機制,不需要寫任何 Vim Script 也可以很容易的體驗到 vim 的非同步任務機制,並且使用它來執行各種艱巨的編譯任務,讓你一邊編輯代碼,一邊跑編譯任務。

---


我給大家推薦一個無論你是用什麼編程語言你都用得著的好東西。

在大家寫代碼的時候,肯定被代碼行尾部的空格困擾過。例如,下面這個diff,除了幾個空格以外,其實代碼是一模一樣的。

如果我們在寫代碼的時候,能夠知道代碼行尾有空格就好了,比如,像下面這樣:

為了顯示代碼尾部的空格,大家需要ShowTrailingWhitespace 這個插件。如果你是用vundle管理vim插件只需要在.vimrc中加入一行即可:

Bundle "ShowTrailingWhitespace"

你可能會想,如果這時候,能夠一鍵清理掉代碼行尾的空格就好了。放心,我這麼體貼,怎麼會想不到,在你們.vimrc中加入:

"strip all trailing whitespace in the current file
nnoremap &w :%s/s+$//&:let @/=""&

然後,在normal模式下,按leader + w,就把當前文件中,所有行尾的空格給刪掉啦。

另外,如果你是一個Python程序員,我想你可能會對這個感興趣:如何使vim下開發python調試更方便? - 知乎用戶的回答

請叫我活雷鋒。關於vim,我還有很多好東西,如果大家感興趣或者有什麼問題,可以留言哈。


像我這類懶人一直致力於尋找終極配置.

robbyrussell/oh-my-zsh · GitHub 終結了我的 Shell 配置;

spf13/spf13-vim 路 GitHub 終結了我的 Vim 配置

---

轉投 windows 平台,找到了一個很好用的 shell 集成了 cygwin 和 oh-my-zsh 等實用插件: Babun - a windows shell you will love!


我不怎麼用VIM,算是稍有了解吧。

放一個基本的配置表給大家看看:

"顯示行號
set nu

"啟動時隱去援助提示
set shortmess=atI

"語法高亮
syntax on

"使用vim的鍵盤模式
"set nocompatible

"不需要備份
set nobackup

"沒有保存或文件只讀時彈出確認
set confirm

"滑鼠可用
set mouse=a

"tab縮進
set tabstop=4
set shiftw=4
set expandtab
set smarttab

"文件自動檢測外部更改
set autoread

"c文件自動縮進
set cindent

"自動對齊
set autoindent

"智能縮進
set smartindent

"高亮查找匹配
set hlsearch

"背景色
set background=dark

"顯示匹配
set showmatch

"顯示標尺,就是在右下角顯示游標位置
set ruler

"去除vi的一致性
set nocompatible

"允許摺疊
set foldenable
"""""""""""""""""設置摺疊"""""""""""""""""""""
"
"根據語法摺疊
set fdm=syntax

"手動摺疊
"set fdm=manual

"設置鍵盤映射,通過空格設置摺疊
nnoremap & @=((foldclosed(line(".")&<0)?"zc":"zo"))&
""""""""""""""""""""""""""""""""""""""""""""""
"不要閃爍
set novisualbell

"啟動顯示狀態行
set laststatus=2

"淺色顯示當前行
autocmd InsertLeave * se nocul

"用淺色高亮當前行
autocmd InsertEnter * se cul

"顯示輸入的命令
set showcmd

"被分割窗口之間顯示空白
set fillchars=vert:/

set fillchars=stl:/

set fillchars=stlnc:/

對了,有一個我一直覺得很好的,地址在這裡: spf13-vim


你想更深入了解學習Linux知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Linux雲計算從入門到精通》系列實戰筆記全放送


很多小白用戶希望快速入手 Vim,無奈配置過多一時看不懂也記不住,我寫了一個 shell 腳本,可以幫助一鍵配置 Vim 環境,先將 Vim 變成一個好看易用類似於 Notepad++、Sublime Text 的工具,用起來再慢慢摸索,這樣效率會稍微高一點。

shell 腳本地址:GitHub - barretlee/autoconfig-mac-vimrc: autoconfig mac vimrc with bundle


你可以參考這個博客
http://www.vimer.cn 裡面很多vim的配置插件相關的問題,還有各種插件的整理介紹。對新手參考價值很大。

其中有三篇文章詳細介紹「把VIM打造成一個真正的IDE」

鏈接:http://www.vimer.cn/2009/10/%E6%8A%8Avim%E6%89%93%E9%80%A0%E6%88%90%E4%B8%80%E4%B8%AA%E7%9C%9F%E6%AD%A3%E7%9A%84ide1.html


可以看看我的dotfiles tankywoo/dotfiles · GitHub

每一個配置項,都得知道是啥才去配

每一個插件,都在需要的場景下,覺得好用才裝上

用不著的配置或插件堅決不配上,指不定哪個插件就給其它插件帶來衝突,或者帶來一些問題,並且還影響啟動速度

裡面vimrc的每一行我都知道是幹啥的,不用的插件我就注釋並卸載掉,用時再裝上,反正有vundle

沒事就折騰下配置,看看有沒有改善的


推薦一個 ultimate vimrc http://amix.dk/vim/vimrc.html

有lite和awesome模式,個人覺得比spf13要好用太多了,lite版本適合伺服器或者windows下免折騰,awesome適合在自己的開發機上使用。

我個人的vimrc就是基於這個ultimate vimrc的awesome版然後做一些符合自己習慣的配置


我簡單說一下常見的編程用的基本配置,這些配置只要寫在vim的配置文件中就可以了。

配置文件目錄:

在linux下一般用~/.vimrc文件

windows下一般在用戶文件夾下的_vimrc文件或vim安裝目錄下的_vimrc文件。

設置:

"傳說中的去掉邊框用下邊這一句

set go=

"設置配色,這裡選擇的是desert,也有其他方案,在vim中輸入:color 在敲tab鍵可以查看

color desert

"設置背景色,每種配色有兩種方案,一個light、一個dark

set background=light

"打開語法高亮

syntax on

"顯示行號

set number

"設置縮進有三個取值cindent(c風格)、smartindent(智能模式,其實不覺得有什麼智能)、autoindent(簡單的與上一行保持一致)

set cindent

"在windows版本中vim的退格鍵模式默認與vi兼容,與我們的使用習慣不太符合,下邊這條可以改過來

set backspace=indent,eol,start

"用空格鍵替換製表符

:set expandtab

"製表符佔4個空格

set tabstop=4

"默認縮進4個空格大小

set shiftw=4

"增量式搜索

set incsearch

"高亮搜索

set hlsearch

"有時中文會顯示亂碼,用一下幾條命令解決

let termencoding=encoding

set fileencodings=utf-8,gbk

"很多插件都會要求的配置檢測文件類型

:filetype on

:filetype plugin on

:filetype indent on

"下邊這個很有用可以根據不同的文件類型執行不同的命令

"例如:如果是c/c++類型

:autocmd FileType c,cpp : set foldmethod=syntax

:autocmd FileType c,cpp :set number

:autocmd FileType c,cpp :set cindent

"例如:如果是python類型

:autocmd FileType python :set number

:autocmd FileType python : set foldmethod=syntax

:autocmd FileType python :set smartindent

以上是簡單的幾個比較常用的vim配置,用vim來敲程序還要藉助於一些插件,比如:

omnicppcomplete c/c++代碼補全

taglist 查看函數列表

NERD_Tree 查看文件列表

pydiction python代碼補全

具體安裝方法參見google、baidu或訪問http://www.vim.org就不贅述了

另外從樓主提的問題來看,應該是初學vim。vim很強大,想要用好vim需要也很值得投入一定的時間去學習,僅憑上邊的幾條配置與插件是遠遠不夠的。推薦一部教材《vimbook》老外寫的,很詳細,內容也不多。that"s all.


目前我在用這個方案:wklken/k-vim · GitHub

下面是插件

Vim Awesome


使用 VIM 多年,VIMRC 改了又改,我想,除了下面這句,沒有什麼配置是必備的。

set nocompatible


如果寫c++的話推薦clang_complete, 我在用win7+mingw和ubuntu都試過, 但是gcc 4.6.2好像要更新一下才能用. https://github.com/Rip-Rip/clang_complete/wiki, 貼圖如下


Vim Awesome上有一個列表,排前面的按喜好挑幾個裝上就挺好用了。

不過現在為了用Proof General叛逃到Emacs陣營了……

倒是想給Vim開發一個能用的Coq插件,可能下學期有空研究一下。


這個,基本上,我得用 80+ 頁才能說得清楚:《所需即所獲:像 IDE 一樣使用 vim》 yangyangwithgnu/use_vim_as_ide


在開發中使用vim五年,分享一下我的一些小技巧吧。

1. 我日常是IDE與Vim混用,IDE可以配一鍵開VIM。 IntelliJ配置一鍵開Vim - 知乎專欄

2. 由於開發以IDE為主Vim為輔助,基本上不裝太酷炫的插件。常用的插件是:

Plugin "https://github.com/easymotion/vim-easymotion.git"
Plugin "git://github.com/tpope/vim-surround.git"
Plugin "kshenoy/vim-signature"
Plugin "terryma/vim-multiple-cursors"
Plugin "junegunn/vim-easy-align"
Plugin "https://github.com/gcmt/taboo.vim.git"
Plugin "https://github.com/mhinz/vim-grepper.git"
Plugin "https://github.com/Chun-Yang/vim-action-ag.git"
Plugin "https://github.com/Valloric/YouCompleteMe.git"
Plugin "https://github.com/kien/rainbow_parentheses.vim"
Plugin "https://github.com/tpope/vim-fugitive.git"
Plugin "junegunn/fzf.vim"

重點推薦 vim-multiple-cursors和vim-easy-align,在IDE中開VIM往往是為了用這兩個功能。

3. 一些常用配置項目

  • 交換區域內容 (先刪除區域A,然後選中區域B,按快捷鍵交換A,B內容)

"Swap
vnoremap & &`.``gvp``P

  • 當前游標所在詞轉大寫並保持原來的游標位置和插入狀態 (避免用CapsLock後忘了切回來游標亂飛,直接小寫輸入然後按鍵轉大寫)

nmap & gUiwe
imap & &gUiwgi

  • 提示輸入正則表達式,把匹配行抽取到buffer末尾

function! CopyToBottom()
let l:a = input("Copy to bottom with Regex: ")
execute "g/".l:a."/t$"
endfunction

noremap &zg :call CopyToBottom()&

  • 選中剛剛粘貼的內容

" select the pasted block
nnoremap & gp "`[" . strpart(getregtype(), 0, 1) . "`]"

  • 摺疊其他內容只留下匹配之前一次search的行

nnoremap zpr :setlocal foldexpr=(getline(v:lnum)=~@/)?0:(getline(v:lnum-1)=~@/)\|\|(getline(v:lnum+1)=~@/)?1:2 foldmethod=expr foldlevel=0 foldcolumn=2&:set foldmethod=manual&&

4. 擅用!命令

比如說,在shell里安裝

npm install -g js-beautifier
npm install -g esprima

在vim中選中文本後可以用 !html-beautify 或 !js-beautify 格式化html或js代碼,可以用!esvalidate查找大段js代碼中的語法錯誤。


我覺得最適合編程的Vim配置是: exVim: Home


提問者這樓.. 我跑 StackOverFlow 找了關於 SublimeText2 的習慣

括弧自動補全自動清除, 初步體驗可用 http://stackoverflow.com/questions/8625576/how-to-configure-vimrc-to-make-the-autocomplete-feature-the-some-with-sublime-t

自動提示用 SuperTab, 按下 & 才能彈出 https://github.com/tsaleh/vim-supertab

關於自動彈出@依雲 推 neocomplcache, 不過我沒配成功 http://www.zhihu.com/question/19990132

感覺 Vim 好亂, 其他 $ aptitude install 或者 $ npm install 直接搞定的...

更新: acp. AutoComplPop


去http://vimcasts.org去看

我簡單說一下推薦的東西

vim-hardtime幹掉 hjkl,原因是: Habit breaking, habit making

set guioptions-=m
set guioptions-=T

這是必然的

command W w !sudo tee % &> /dev/null

linux下sudo寫入

nmap gb :b #&

其實可要可不要,就是對我來說,#的跳轉比較多而已

" 重啟後撤銷歷史可用 persistent undo

set undofile
set undodir=/home/lenovo/.vim/\_undodir
set undolevels=1000 "maximum number of changes that can be undone
set noimdisable

call vundle#rc() 這是必然的

Bundle "vim-textobj-user"
Bundle "vim-textobj-entire"

text-objs系列擴展魔法的施法前件

Bundle "textobj-word-column.vim"
"This plugins provides text-objs of "c"( col based on word) and "C" (col based on WORD)
Bundle "vim-indent-object"
"This plugin provides text-objs of "i"(Indentation level and lines above/below.) and "l"( Indentation level and lines above/below.)
Bundle "argtextobj.vim"
"This plugin provides a text-object "a" (argument).
" What this script does is more than just typing F,dt, because it recognizes inclusion relationship of parentheses.

" Here follows motions
Bundle "vim-smartword"
" http://www.vim.org/">welcome home : vim online;
" # # # # # # ## ## # # ## ## # # vim orginally moves like this;
" # # # # # # # # # # with smartword vim moves like;

Search for the selected text 萬一你想選擇一段然後search的話,可能需要類似配置

Swapping two regions of text with exchange.vim 交換用的exchange.vim

set ignorecase smartcase


要是你又要用Vim,又要寫Lisp,那你就只有用Slimv


說一下Windows下配置YCM的問題.

很多人說要重新編譯Vim以支持Python, 其實不用, Vim默認有動態載入幾個語言的dll, 找不到就不載入, 找到就載入. 方法如下:

1. 下載安裝Vim

https://github.com/vim/vim-win32-installer/releases

此處下載64位還是32位, 後面的Python要對應下載相同的版本.

2. 打開Vim, 命令輸入:version, 查看裡面的python27.dll或者python35.dll, 定下來你裝Python2還是Python3, 裝一個就可以了, 我裝的是Python2, Python3同理應該也可以.

下載安裝Python

https://www.python.org/downloads/windows/

注意選擇對應:version信息里的版本下載. 下載後安裝, 然後查找C:WindowsSystem32目錄或者安裝目錄下的python27.dll或者python35.dll, 拷貝到Vim安裝目錄gvim.exe相同目錄

打開Vim, 輸入:echo has("python") || has("python3"), 如果顯示為1代表Python在Vim里載入成功.

3. 下載安裝Cmake

https://cmake.org/download/

4. 下載安裝Visual Studio, 下載Community版本就可以了:

https://www.visualstudio.com/zh-hans/downloads/

5. 檢查環境變數

cmd輸入:python --version, 如果顯示版本信息代表Python安裝成功.

cmd輸入:cmake --version, 如果顯示版本信息代表Cmake安裝成功.

一般情況Python和Cmake的安裝程序會把目錄自動添加到操作系統path環境變數, 如果沒添加手動添加, xxx換成你自己的安裝目錄:

D:xxxPython2.7;D:xxxPython2.7Scripts;D:xxxCMakein

6. 下載YouCompleteMe, 我用Vundle安裝插件的, 你們隨意

https://github.com/Valloric/YouCompleteMe

cmd打開命令提示符, cd到YouCompleteMe的目錄, 目錄下要有install.py, 運行如下命令:

install.py --clang-completer

YCM會自動編譯安裝, 最後會顯示多少警告, 多少錯誤. 沒有錯誤就沒問題了.

7. 打開Vim, 開始使用吧,我Win7 Vim 64位測試成功...

-----------------------------

以下啰嗦幾句:

YCM太大了,下載下來後100多兆,如果你不是寫c++建議不要用了,手寫才是王道。

實在要用推薦Neocomplete,支持語言也多,安裝簡單方便,不用編譯。我就是用Neocomplete,我YCM安裝配置後暫時關閉沒使用。Neocomplete需要Vim有Lua支持,安裝方法跟上面Python一樣。


推薦閱讀:

TAG:編程 | 代碼 | Vim | vimrc |