都知道vim具有高度的可配置性,雖然有大神說過原生的vim可以做插件提供的90%的功能,但是那也是需要一定的境界,不說別的,就vim那出廠界面就會嚇走一批強迫癥患者了。所以入手vim的話,第一步肯定是要將她配置成我們心中那美好的形態,不然真的下不來手。
首先是下載合適的vim版本,linux下都是可以實現一鍵安裝,倒是windows下可能會下載錯,你下載的可能是32位的版本,32位的不支持64位的python,所以建議下載64位的vim。
以下是本人vim配置的效果圖,說不上多么高大上,至少是適合自己的,需要注意的是這個版本需要有python的支持,如果沒有python的話,某些插件可能無法正常使用。
是不是迫不及待自己也想擁有一個呢,我們都是堅定的“拿來主義”者,半小時內就可以搞定,只需要以下2個步驟:
1、相關依賴
linux/mac:
sudo apt-get install curl vim exuberant-ctags git ack-grep
sudo pip install pep8 flake8 pyflakes isort yapf
windows:
2、復制配置文件
配置文件在Zhu-Jun/.vimrc,如果是linux/mac用戶,那么將里面的.vimrc拷貝到~/目錄下,如果是windows用戶,將_vimrc拷貝到%USERPROFILE%目錄下,一般是C:\Users\XXX\(XXX是用戶名)。
以上兩步之后,打開vim,它會自動加載需要的內容,大概10-5分鐘,至此,vim已經配置完成,windows下如果報缺少lua53.dll,需要下載一個放到vim的安裝目錄下。
下面介紹一下vimrc文件的一些比較重要的內容。
基本設置
set nocompatible? ? ? ? ? ? ? ? ? ? ? ? " 不兼容vi模式
set langmenu=en_US? ? ? ? ? ? ? ? ? ? ? " 菜單語言 中文為 zh_CN
set fileencodings=utf-8,chinese,latin-1
set fileencoding=utf-8? ? ? ? ? ? ? ? ? " 中文不亂碼了,世界都好了
set number? ? ? ? ? ? ? ? ? ? ? ? ? ? ? " 窗口左側顯示行號
set relativenumber? ? ? ? ? ? ? ? ? ? ? " 配合number,更高效的行間跳轉
au GUIEnter * simalt ~x? ? ? ? ? ? ? ? " vim 以最大化打開
set ignorecase? ? ? ? ? ? ? ? ? ? ? ? ? " 查找時忽略大小寫
set smartcase? ? ? ? ? ? ? ? ? ? ? ? ? " 當輸入中含有大寫的時候會強制區分大小寫
set incsearch? ? ? ? ? ? ? ? ? ? ? ? ? " 輸入進行中實時匹配查找到的字符串
set autoindent? ? ? ? ? ? ? ? ? ? ? ? ? " 用來自動縮進
set smartindent? ? ? ? ? ? ? ? ? ? ? ? " 自動判斷縮進長度,一般適用于類C語言
set expandtab? ? ? ? ? ? ? ? ? ? ? ? ? " 用一定的空格來代替tab
set tabstop=4? ? ? ? ? ? ? ? ? ? ? ? ? " tab占4個空格
set softtabstop=4? ? ? ? ? ? ? ? ? ? ? " 設置expandtab的情況下,輸入backspace刪除的空格
set shiftwidth=4? ? ? ? ? ? ? ? ? ? ? ? "一般情況下tabstop=softtabstop=shiftwidth,這樣不會亂
上面比較容易搞亂的應該tab相關的內容了,如果你還是很亂,可以看看這里:Tabs and Spaces
key-notation(鍵位標識)
key跟標識的對應關系,詳情可見:help key-notation
map
map可以理解成鍵位的映射,如:
nmap G Gzz?
上面指令的作用是在normal模式下將G(表示移動的最后一行)映射 Gzz(移動到最后一行+居中,zz表示居中),也就是命令生效之后,G就跟Gzz有相同的作用。
其中n表示在normal模式下起作用,同理,vmap表示在visual模式下,具體對應規則見下圖:
值得注意的是nmap一般寫成nnoremap比較好,中間的nore表示no recursion,不遞歸,比如
nmap w ww
nmap ww www
上面兩句話導致的結果是按完一次w之后,光標會不斷地向后移動,因為w觸發ww,而ww又會觸發w,如此遞歸下去,如果改成nnoremap w ww之后就不會再出現這個問題。
如果map的第二個參數是以:開頭,那么表示映射的內容在命令行中生效,如
map tn :tabn<CR>
上面指令的意思是,輸入tn,相當于①輸入:(進入命令行模式)②輸入tabn(跳到另一個tab頁面)③輸入回車
mapleader
這是vim中一個很重要的概念,leader的存在可以非常靈活地自定義快捷方式,很大地提高編輯的效率。
let mapleader=","
nmap <leader>h ^
默認的leader鍵是\,這還是有點反人類的,所以上面的第一句的意思是將leader鍵設置成逗號“,”,你也可以根據自己的喜好設置成空格(let mapleader = "\<space>")等,第二句話的意思表示當你再normal模式下輸入,l(逗號+h),那么光標會移動到行首,是不是比按<Shift>+6方便不少?
Vundle
vim的擴展性很大程度上來自于各種插件的存在,一般情況下你可能會用到非常多的插件,如上面的配置文件中就有30多個插件,這么多的插件管理起來還是很麻煩的,增啥改查都很頭疼,有了vundle就再也不怕了,如果你用了上面提供的配置文件的話,其實你已經見識到了它的強大,因為它已經默默幫你裝了30多個插件。
set rtp+=~/vimfiles/bundle/Vundle.vim? "表示vundle的位置在Vundle.vim下
call vundle#begin('~/vimfiles/bundle/') ?"表示插件存放的位置在bundle下
如果想添加什么插件只需要call vundle#begin和call vundle#end之間添加github上的插件位置,然后執行PluginInstall。刪除更簡單了,只需要將Plugin那一行去掉或者注釋掉,然后執行PluginClean,接著輸入Y就OK了,插件升級執行PluginUpdate一鍵搞定。需要注意的是PluginInstall和PluginClean之間可能需要先保存然后重啟。
如果你修改了vimrc文件后想立即生效,但是又不想重啟,有什么解決的辦法嗎?當然有,只需要so? ~/.vimrc(so ~/_vimrc),其中so表示source。 如果你當前編輯的文件就是vimrc文件的話,那么so %就夠了,其中%是一個特殊的寄存器,表示當前文件的名稱,具體可以:help registers。
插件非常多,Vim Awesome上提供了非常詳細的插件列表,總有幾個是你的菜,在此我只推薦一個插件:
Plugin 'ianva/vim-youdao-translater'
有很多插件的官方文檔缺少中文說明,說多都是淚,如果你的英語足夠好,那就沒必要了。這個插件其實就是有道翻譯,用法很簡單,Ctrl-t會翻譯光標下對應的單詞,<leader>yd 可以讓你輸入想翻譯的單詞。
Abbreviate
在idea intellij中有大量代碼可以通過Ctrl-j完成,比如sout然后ctrl-j就可以快速生成System.out.println()。vim也不落后,只不過需要你自己去思考要配置哪些適合自己的縮寫,一般用來縮寫的都是使用頻率不高的詞,不然反而會降低效率,比較常見的有:
iabbrev teh the 或者 iab teh the
當你把the輸錯成teh時,會自動幫你更正為the。跟map類似,iab中的i表示作用在insert模式下,cabbrev(cab)僅作用于命令行模式,abbrev ?(ab )作用于所有模式下,觸發縮寫替換的快捷鍵是CTRL-]。
配置里面其它的很多內容都牽涉到vimscript,相信有一定編程基礎的話讀起來還是不費勁的,留著以后慢慢摸索也不遲。