緣起
大學的時候做過Linux內核驅動程序研發,之前寫C語言就是用的Vim編輯器,當年的Vim還不如今天之強大,當時的插件也沒有現在這么多,只是覺得這個編輯器能滿足我想要的所有,查看Linux內核代碼,調試C程序,調試匯編代碼,寫Shell腳本,跑定時測試任務,等等等,都離不開這個編輯器。可能因為當年的機器為了節省幾百塊的操作系統費,被迫裝上了Linux系統,后來才明白,這是上天指引着我來到了Linux這條道路,並且越陷越深。
以前總有人調侃程序員,說PHP是世界上最好的語言,今天帶給大家的是CNMP系列的一個比較重量級的選手,Linux下的Vim編輯器。
毋庸置疑,Vim是世界上最棒的編輯器,有編輯器之神的稱號,前身是Vi。功能強大,高度可定制是他的特性。
想要熟練使用Vim其實並不難,難就難在要改變你的一些習慣,比方說之前你用編輯器的時候右手肯定是要放在鼠標上面的,只有開始擼代碼的時候才會將右手拿離鼠標。這不禁讓我想到mac是最適合程序員的電腦,不會是因為他的鼠標就在鍵盤下側吧,不過,講真,mac的觸摸板實在是太好用啦!
記住這句話:【vim設計之初就是整個文本編輯都用鍵盤而非鼠標來完成】,鍵盤上幾乎每個鍵都有固定的用法,且vim的制作者希望用戶在普通模式(也就是命令模式,只可輸入命令)完成大部分的編輯工作。
插入模式與命令模式
Vim相較於其他編輯器,不同的地方在於,他有兩種模式,第一種就是大家常見的,大部分編輯器都有的插入模式,第二種模式就是他區別於其他編輯器的命令模式。
熟練的使用命令模式能夠讓你感受到他不適用鼠標的正確性。
兩者切換方式
進入Vim之后,鍵盤敲擊
i:在當前字符的左邊插入
I:在當前行首插入
a:在當前字符的右邊插入
A:在當前行尾插入
o:在當前行下面插入一個新行
O:在當前行上面插入一個新行
這些字符就可以進入插入模式,在插入模式中按【ESC】即可回到命令模式。
兩者的切換,我最習慣的就是進入vim,按【a】進入編輯模式,然后狂按【ESC】進入命令模式。
屏幕跳轉控制命令
【命令模式】
<Ctrl-f>:向下移動一屏。 <Ctrl-d>:向下移動半屏。 <Ctrl-b>:向上移動一屏。 <Ctrl-u>:向上移動半屏。
跳轉到多少行
【命令模式】
numG:移動光標到指定的行(num)
剪切、拷貝、粘貼
【命令模式】
d:剪貼選擇的內容到剪貼板。 y:拷貝選擇的內容到剪貼板。 dd:剪切當前行。 yy:拷貝當前行。 p:在光標區粘貼剪貼板的內容
撤銷
【命令模式】
u:撤銷剛才編輯的內容
高能提示!!!高能提示!!!高能提示!!!千萬別在vim中使用<ctrl+z>,沒用的。
常用命令
下面介紹一下你們在日常工作中可能會用到的一些命令
查找命令
/text 查找text,按n健查找下一個,按N健查找前一個。
替換命令
s/old/new/ 用old替換new,替換當前行的第一個匹配 s/old/new/g 用old替換new,替換當前行的所有匹配 %s/old/new/ 用old替換new,替換所有行的第一個匹配 %s/old/new/g 用old替換new,替換整個文件的所有匹配 :10,20 s/^/ /g 在第10行知第20行每行前面加四個空格,用於縮進。
退出命令
:wq 保存並退出 :q! 強制退出並忽略所有更改 :e! 放棄所有修改,並打開原來文件。
至此為止,你可以編輯你想要編輯的東西了,和一般的編輯器沒多大的區別啦~
Vim插件
下面進入主題,vim的一大特色,他的高可擴展性!插件的安裝與使用

左側為Vim插件文件管理器【NERDTree】,后面我會給大家詳細解答。
右側為我的vimrc文件部分內容。
插件管理器
提起插件,大家第一個想到的就是管理器,類似於包管理器,Python的pip,PHP的Composer,CentOS的yum,Ubuntu的apt-get,Mac的brew,是不是很情切,啊。
那Vim也有自己的插件管理器,那就是大名鼎鼎的【vundle】,最老牌的Vim插件管理器。
按照如下方式下載vundle並安裝
#git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
該命令將下載Vundle插件管理器,並將它放置在你的Vim編輯器bundles文件夾中。現在,你可以通過.vimrc配置文件來管理所有擴展了。
vimrc
vim的配置文件,你想要的功能,包括插件的下載安裝,都是配置在這個目錄下的,然后在命令模式下輸入
:PluginInstall
即可完成對插件的安裝,別忘了前面有個【:】哈。
首先,我們先看下你的home目錄下是否存在vimrc文件,默認是不存在的,如果你之前編輯過的,可以,沒關系,我們從頭再來過一遍。
#ls ~/.vimrc
【~】是Linux下對應用戶的home目錄。
沒有的話,那就touch一個吧,或者直接vim一個,直接編輯即可。
#touch ~/.vimrc
編輯上面的.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)
注:" 開頭的是注釋
插件的安裝
先來裝個插件試試吧,就從剛才的那個文件管理器開始吧。
在上面的vimrc文件中新增一行
Plugin 'scrooloose/nerdtree'
在命令模式下輸入【:PluginInstall】
如果出現如下的界面,就表示安裝成功啦!

最左邊的窗口就是插件安裝的顯示頁面,安裝成功的插件全部會顯示在這邊,怎么在幾個分割窗口間跳轉呢,按<ctrl+ww>,記住,是兩個w喲。
關閉某個窗口,跳到那個窗口,命令模式輸入【:q】即可關閉。
什么?打開沒有文件夾目錄?因為你還沒有打開NERDTree呢,命令行輸入NERDTree即可打開文件夾管理目錄了,如果想要打開就會顯示當前的文件夾,在vimrc中輸入下面兩行即可
autocmd VimEnter * NERDTree let NERDTreeShowBookmarks=1
代碼自動補齊
YouCompleteMe - 前Google的C++工程師Valloric (Val Markovic) 開發的一款,專門用於C系(C,C++,C#) 的自動補全工具, 優點是速度非常快,而且支持變量跳轉,函數關聯跳轉,檢測代碼報錯, 可以說是最牛逼的補全工具,缺點是太難配置,對於除了C系語言的其他語言補全支持並不好. 對於剛接觸Vim的同學來說相當不友好, 不過文檔比較齊全.
Git版本控制
只支持Git 的高亮,速度非常不錯
Plugin 'vim-gitgutter'
更新和安裝插件
編輯好vimrc文件之后,需要在命令模式下輸入下面命令才能更新和安裝插件
:source %
:PlugInstall

更改在git管理下的代碼,新增一行,左側就會出現一個小+號。
常用的vimrc配置命令
大多數“現代”集成開發環境(IDE)都提供對方法(methods)或類(classes)進行折疊的手段,只顯示類或方法的定義部分,而不是全部的代碼。
你可以在.vimrc中添加下面的代碼開啟該功能:
" Enable folding set foldmethod=indent set foldlevel=99
你必須手動輸入za來折疊(和取消折疊)。
讓Vim中的Tab鍵就相當於4個標准的空格符,確保每行代碼長度不超過80個字符,並且會以unix格式儲存文件,避免在推送到Github或分享給其他用戶時出現文件轉換問題。
set tabstop=4 set softtabstop=4 set shiftwidth=4 set textwidth=79 set expandtab set autoindent set fileformat=unix
支持UTF-8編碼
set encoding=utf-8
開啟顯示行號:
set nu
語法高亮顯示
syntax on
關於vim的所有就講到這里,vim其實有很多,包括linux,其實有很多可以讓我們去學習的地方,我指的學習不單單是指工具的使用,而是代碼層面的學習,尤其是Linux內核的相關源碼,可以讓你學到很多變成思想,也可以說是算法,真的很精辟,看過的人都知道~~~
