Mac開發利器之程序員編輯器MacVim學習總結(轉)

1、關於Vimcss

   Emacs和Vim都是程序員專用編輯器,Emacs被稱爲神的編輯器,Vim則是編輯器之神。至於二者到底哪一個更好用,網絡上兩大派系至今還爭論不休。不過,相比之下,Emacs更加複雜,已經不能算是一個編輯器了,有人這麼說:Emacs是假裝成編輯器的操做系統。與之相反,Vim的定位很明確,就是要作一個強大的編輯器。因爲筆者精力有限,決定仍是選擇本身認爲相對簡單點的Vim來學習。所以,筆者將會在本文跟你們介紹Mac下Vim的安裝以及簡單使用。html

   首先,Mac系統默認已經安裝了Vim。打開終端,輸入vim,回車。可看到以下界面,即表示Vim已經安裝了。在vim裏輸入":q"c++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

   在終端上,界面很是之簡潔,若是你須要更加複雜的界面以及使用Vim更多的特性,須要下載客戶端安裝。在Mac上目前存在兩個版本的Vim客戶端:git

   一、MacVim。使用Cocoa GUI,這是Mac上更新還很活躍的版本,也是Mac上最多人使用的版本。下載地址:http://code.google.com/p/macvim/
   二、使用Carbon GUI的版本,可是這個版本目前基本上再也不更新。下載地址:http://sourceforge.net/projects/macosxvim/files/程序員

       本文主要介紹MacVim,MacVim支持多窗口標籤編輯以及全屏等新特性。下載了相應MacVim壓縮包,解壓之後將MacVim.app拖入/Applications目錄下。啓動MacVim,輸入":h mvim", 按照提示,須要將mvim腳本文件拷貝到"/usr/local/bin"目錄下。打開終端,輸入命令 "cd /usr/local"以及"sudo mkdir bin",最後輸入"sudo cp -f /Users/ericli/SoftWare/MacVim-snapshot-66/mvim  /usr/local/bin/",這樣就能夠在終端輸入命令"mvim"來快速啓動MacVim 。若是你不想將MacVim.app放到/Applications目錄下,只須要在終端設置VIM_APP_DIR變量爲你想放置MacVim.app的目錄並導入到$HOME/.bash_profile中便可,好比:export VIM_APP_DIR=$HOME/SoftWare/MacVim-snapshot-66/。在MacVim輸入":h macvim",能夠查看MacVim的使用幫助介紹文檔。github

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

如今MacVime的界面仍是很簡陋,下面開始介紹如何簡單配置MacVim:shell

2、建立~/.bashrc文件macos

        在終端鍵入"cd $HOME" 和「touch .bashrc」,即建立成功。打開文件,輸入「alias vim=mvim」,並保存別名變量。而後再在終端鍵入「source .bashrc」使.bashrc文件生效。這樣,在終端輸入vim和mvim均可以啓動MacVim.app了。vim

        在這裏稍微解釋下幾個文件的做用,/etc/bashrc、/etc/profile是系統全局環境變量設置,給全部用戶使用,~/.bashrc、~/.bash_profile、~/.bash_login、~/.profile是用戶目錄下的私有變量設置。當進入系統運行一個bash shell進程時,讀取環境設定過程以下:一、讀取全局環境變量設置/etc/profile,而後根據其內容讀取/etc/profile.d、/etc/bashrc等設定,可是注意/etc/profile只在第一次運行bash shell時讀取一次,而/etc/bashrc在每次運行bash shell都讀取;二、而後讀取當前用戶目錄下的~/.bash_profile、~/.bash_login或~/.profile三個中的其中一個文件的局部變量設置,並且只在第一次運行bash shell時讀取,只有讀取~/.bash_profile失敗纔會讀取~/.bash_login,若是前邊兩文件讀取失敗纔會讀取~/.profile;三、最後根據~/.bash_profile的內容讀取當前用戶目錄下的~/.bashrc文件中的局部環境變量設置,~/.bashrc文件在每次打開新的bash shell都讀取一次。總結一下,/etc/bashrc、/etc/profile、~/.bashrc、~/.bash_profile、~/.bash_login、~/.profile都能設置環境變量,而/etc/profile、~/.bash_profile、~/.bash_login、~/.profile能夠設定路徑、環境變量等,只能登入的時候執行一次;/etc/bashrc、~/.bashrc保存路徑、命令別名等,每次打開新的bash shell都會執行一次,一般前者/etc/profile、~/.bash_profile調用後者/etc/bashrc、~/.bashrc。更詳細的資料能夠參考該連接:http://blog.chinaunix.net/uid-24591881-id-2124780.html 。瀏覽器

三.配置~/.vimrc和~/.gvimrc

      首先,在MacVim編輯器中輸入「:version」,看到以下圖示信息:

   

 

 

 

 

 

 

 

 

 

 

 

 

 

從上圖能夠看出一些MacVim的配置信息:

   $VIM系統變量的路徑爲:"/Applications/MacVim.app/Contents/Resources/vim"

   MacVim的系統配置文件vimrc的路徑:「$VIM/vimrc」

   用戶配置文件vimrc的路徑:"$HOME/.vimrc"

   MacVim編輯器的用戶初始化配置文件的路徑:"$HOME/.exrc" (默認不存在,若是須要使用則在終端輸入 「touch $HOME/.vimrc」建立)

   MacVim的系統配置文件gvimrc的路徑:"$VIM/gvimrc"

   用戶配置文件gvimrc的路徑:"$HOME/.gvimrc"

   MacVim的菜單文件的路徑:"$VIMRUNTIME/menu.vim"

   另外解釋下, $HOME爲當前用戶目錄的路徑,$VIMRUNTIME路徑爲"/Applications/MacVim.app/Contents/Resources/vim" . 能夠在MacVim中輸入」:echo $VIMRUNTIME「來查看這些系統變量的路徑。

   其次,從系統文件vimrc_example.vim和gvimrc_example.vim中copy標準的內容,保存到用戶的配置文件~/.vimrc和~/.gvimrc中。在MacVim中輸入以下命令:

:e $VIMRUNTIME/vimrc_example.vim  
:saveas ~/.vimrc  
:e $VIMRUNTIME/gvimrc_example.vim  
:saveas ~/.gvimrc   

4、添加插件

   一般有以下兩種方式添加插件:

   其一:拷貝該 plugin_name.vim插件到你我的插件目錄~/.vim/plugin/下,拷貝plugin_help.txt到你我的文檔目錄~/.vim/doc/下,若存在該插件syntax的vim支持文件則放到~/.vim/syntax/目錄下,若是以上目錄不存在到終端輸入以下命令建立:

cd $HOME  
mkdir .vim  
mkdir .vim/plugin  
mkdir .vim/doc  
mkdir .vim/syntax  

   好比,拷貝matchit.txt到~/.vim/doc/下,拷貝matchit.vim到目錄~/.vim/plugin/下, 

   其二,在你的vimrc配置文件最後加一行命令:

source $VIMRUNTIME/macros/matchit.vim0 

   最後,還有一種不經常使用的方式能夠安裝插件,將插件、文檔、syntax支持文件分別放到$VIMRUNTIME/plugin/  、$VIMRUNTIME/doc/、$VIMRUNTIME/syntax/三個目錄下,或者/usr/share/vim/vim73/plugin/、/usr/share/vim/vim73/doc/、/usr/share/vim/vim73/syntax三個目錄下均可以使MacVim自動加載插件。

    以上安裝插件的方法都比較麻煩,而且每一個插件的文件分散到幾個文件夾去,不方便管理。在這裏給各位推薦一個很方便管理插件的Vim插件vundle:https://github.com/gmarik/vundlevundle可使得安裝的插件的文件都放到同一個目錄下,而且簡單設置就可以使用。安裝方法以下:

        首先,在終端輸入以下命令:

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle  

    而後,在~/.vimrc裏寫入如下配置:

set nocompatible               " be iMproved  
 filetype off                   " required!  
  
 set rtp+=~/.vim/bundle/vundle/  
 call vundle#rc()  
  
" let Vundle manage Vundle  
" required!   
"這是vundle自己的設置  
 Bundle 'gmarik/vundle'    
   
 " My Bundles here:  
 "這裏是設置你本身自定義的插件的設置vundle設置,注意:下載的插件git爲:https://github.com/godlygeek/tabular.git,則設置爲Bundle 'godlygeek/tabular';https://github.com/gmarik/vundle.git設置則爲 Bundle 'gmarik/vundle'    
 " original repos on github  
 Bundle 'godlygeek/tabular'  
  
 " vim-scripts repos,vim-scripts的訪問地址,格式則以下:  
 Bundle 'L9'  
 Bundle 'FuzzyFinder'  
 " non github repos ,非git的訪問地址的,格式以下:  
 Bundle 'git://git.wincent.com/command-t.git'  
 " ...  
  
 filetype plugin indent on     " required!  
 "  
 " Brief help  
 " :BundleList          - list configured bundles  
 " :BundleInstall(!)    - install(update) bundles  
 " :BundleSearch(!) foo - search(or refresh cache first) for foo  
 " :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles  
 "  
 " see :h vundle for more details or wiki for FAQ  
 " NOTE: comments after Bundle command are not allowed.. 

   最後,登錄MacVim,運行:BundleInstall命令。這樣,Vundle.vim管理插件就安裝成功。接下來繼續簡單介紹下,Vundle插件的使用:

搜索新的插件: 

:BundleSearch matchit  

   

 

 

 

 安裝新的插件: 

:BundleInstall matchit.zip   

  
   

 

 

最後在~/.vimrc中的註釋" vim-scripts repos下,加入以下命令並保存.vimrc文件,這樣一個插件就安裝成功了:

Bundle 'matchit.zip'   

更新全部安裝的插件(這個命令會根據~/.vimrc的Bundle 設置來更新插件):

:BundleInstall  

列出全部安裝的插件列表:

:BundleList  

清除插件命名(這個命令我測試有些插件刪除不了,手動刪除~/.vim/bundle的相關插件的目錄,並將~/.vimrc中的相關配置去掉便可):

:BundleClean   

上述中的Tabular插件是用於編碼中的字符對齊的,關於其具體用法見連接:https://github.com/godlygeek/tabular用法是選定一段文本,而後輸入相應的命令來根據相應的字符對齊。幾個經常使用的命令以下:

:Tab /=   
:Tab /:  
:Tab /:\zs  
:Tab /|  

分別是選定文本按=、:、:\zs、|等符號對齊。 

    推薦一些插件:

        NERD_tree : 一個文件管理插件,一些經常使用命令: 打開一個目錄樹( :NERDTree <啓動目錄> | <bookmark>  )  關閉目錄樹欄(:NERDTreeClose);切換目錄樹欄(:NERDTreeToggle);      定義標籤(:Bookmark <name>);定義Root標籤(:BookmarkToRoot <bookmark>)。。。。。。更多命令和用法見 :help NERD_tree。

        word_complete  :代碼自動補全

        SuperTab :省去Ctrl-n或Ctrl-p快捷鍵,經過按tab鍵快速顯示補全代碼.

        xptemplate: 快速自動完成一些if、switch、for、while結構模板代碼,支持c、c++、Lua、Ruby、PHP、html、css、JavaScript等多種語言。通常是輸入結構體的關鍵字後

     ,再按Ctrl-\組合鍵便可完成代碼補全,而後按Tab鍵跳轉到不一樣的位置替換模板內容。好比:輸入for後按Ctrl-\組合鍵便可快速完成for結構的模板代碼。

    ctags : 一個掃描記錄代碼的語法元素,並記錄爲tag,方便代碼定位跳轉等操做,MacVim自帶,可是聽說有點問題,筆者用Vundle安裝的貌似也有問題,推薦用MacPorts安裝,而後在             ~/.gvimrc配置中加入:  let Tlist_Ctags_Cmd="/opt/local/bin/ctags"。用法:在終端 cd 進入到你的項目根目錄,輸入語句便可將項目全部代碼文件打上tag: 

         ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .

     taglist : 能夠用Vundle安裝,在編輯代碼文件時,輸入命令":TlistToggle"在右邊就會出現當前類的函數或變量列表。輸入命令「:tag <函數名或變量、類>」,若是隻有一個文件定義了該

     函數或變量、類,vim打開該文件並將光標定位到對應的位置;若是多個文件有這個函數名或變量、類的tag,將給提示,並可輸入「:tselect」 ,顯示可選的文件。快捷鍵跳轉Ctrl+],Ctrl-o。

         Cscope :功能跟ctags差很少,不過更增強大,MacVim默認已經支持,輸入「:version」命令查看.

         OmniCppComplete : 功能跟taglist差很少。 

          a.vim :在.cpp文件和.h頭文件間快速切換的插件。

          grep.vim : 在工程中查找詞彙的插件。

         minibufexplorerpp : 操做緩存buffer窗口。

         quickfix :MacVim內置安裝好了,不須要從新安裝。顯示一些命令查詢結果以及編譯錯誤等信息。

         Command-t :用Commad-t命令快速查找切換文件。若是是用Vundle安裝的話,還不能使用,在MacVim中輸入「:CommandT」命令會報錯。用Vundle安裝好打開終端,輸入以下命令,等待         編譯完畢後就可使用了:

cd ~/.vim/bundle/Command-T/ruby/command-t  
ruby extconf.rb  
make  

      NERD_commenter.vim : 註釋插件。

      DoxygenToolkit.vim : 用於快速生成註釋,並由註釋生成文檔。

      winmanager : 能夠用Vundle安裝,管理窗口的插件,能夠跟NERD_tree、Taglist插件結合,打造一個相似IDE的界面。只須要在NERD_tree.vim中加入以下代碼:

let g:NERDTree_title = "NERDTree"  
function!  NERDTree_Start()  
    exec 'NERDTree'  
endfunction  
function! NERDTree_IsValid()  
    return 1  
endfunction   

而且在winmanager.vim的找到下面代碼,增長一句代碼:

" toggle showing the explorer plugins.  
function! <SID>ToggleWindowsManager()  
    if IsWinManagerVisible()  
        call s:CloseWindowsManager()  
    else  
        call s:StartWindowsManager()  
        "NERDTree 打開的時候有一個空白窗口,須要關閉  
        exec 'q'  
    end  
endfunction  

最後在~/.gvimrc中加入以下配置:

"在vim左側顯示窗口Taglist和文件列表窗口  
"let g:winManagerWindowLayout='FileExplorer,BufExplorer|TagList'  
let g:winManagerWindowLayout='NERDTree, BufExplorer|TagList'  
"打開vim時自動打開winmanager  
let g:AutoOpenWinManager = 1  
"定義打開關閉winmanager的快捷鍵爲 wt組合鍵命令  
nmap wt :WMToggle<cr>  

重啓,便可看到一個相似IDE的Vim界面:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5、Vim的模式與一些經常使用命令

   i、Vim的模式:

      Vim有三種模式,Normal 、Insert 、 Visual。在Normal模式下,能夠輸入運行命令;在Insert模式下,能夠輸入編輯文本;在Visual模式下,能夠對選定的文本運行命令操做並該命令僅僅做用於選定文本。啓動Vim的默認模式是Normal模式,輸入 i、I、a、A、o、O、s、S、r、R能夠進入Insert模式,其中區別在於:

    進入Insert模式的命令區別
命令 區別
i  在光標以前插入字符
I 在光標所在行的全部字符開頭以前插入字符
a 在光標以後插入字符
A 在光標所在行的全部字符以後插入字符
o 在當前光標的下面打開新的一行
O 在當前光標的上面打開新的一行
s 刪除當前光標下的字符
S 刪除當前光標所在行的全部字符
r 用新輸入的字符替換當前光標所在字符,而後當即返回Normal模式
R 在當前光標位置所在字符開始日後一直用新輸入的字符替換全部原有字符

 

 

 

 

 

 

 

 

 

在Nomal模式中輸入v進入Visual模式。 在Insert模式或Visual模式中按Esc鍵即返回Normal模式。

   ii、VIm的經常使用命令(不作特殊注釋的話,下面的命令通常在Normal模式生效,通常對文本操做的命令在Visual模式下也一樣生效)

      (1)、光標的移動: 

          h()j(下)、k(上)、l(右)移動光標。還能夠在命令以前輸入數字,指定要移動多少行。好比:7h表示左移7個光標,6j表示光標下移6行。

         光標向前跳多個詞到達詞首,好比5個詞,輸入5w;光標向後跳7個詞到達詞首,輸入7b。跳到3個單詞後的詞末,輸入3e;跳到3個單詞前的詞末,輸入3ge

         移動到行首第一個非空字符,輸入"^"或按Home鍵;移動到光標所在行的第一個字符(包括空格);移動到行尾,輸入"$"或按End鍵。注意,這個只有"$"或按End鍵以前加數字會生效。

         向前移動到某個指定的字符,好比向前找第三個「h」,輸入」3fh「;向前把光標移動到第四個"b"字符的前一個字符上,輸入」4tb「。向後移動到某個指定的字符,好比向後查找第三個」h「,輸入」3Fh「;       向後把光標移動到第四個」b「的後一個字符上,輸入」4Tb「。這四個命令均可以使用」;「命令重複,","命令反向重複。光標不會移出當前行。

         "%"命令能夠將當前光標所在的括弧移動到匹配的括弧的位置,好比:從」)「移動到」(「,反之亦然。

         gd命令到達光標所在處函數或變量定義之處。 

         」*「和」#「命令匹配當前光標所在單詞, 」*「移動光標的下一個匹配單詞,而」#「命令是移動光標到上一個匹配單詞。

         移動到指定行,好比想移動到第30行,輸入30G或輸入30gg。沒有數字限制的話,G命令將光標移動到文件的尾部,gg命令移動光標到文件開始。

         移動都某部分,好比到文件大約10%的行位置,輸入」10%「

         H命令移動光標到視野內的第一行,M移動到視野內的中部,L移動光標到視野內的最後一行。

         肯定光標的位置,輸入Ctrl-G命令。

         Ctrl-u命令光標向上移動半屏,Ctrl-d光標向下移動半屏。

         Ctrl-e上滾一行,Ctrl-y下滾一行。

         Ctrl-f標向前移動一整屏,Ctrl-b標向後移動一整屏。

        」zt「命令將光標所在行移動到屏幕的頂部,」zz「命令將光標所在行移動到屏幕的中部,」zb「將光標移動到屏幕的底部。

         (2)刪除字符:

         刪除某個字符,移動光標到所在字符,而後輸入x或dl(光標下的字符)、X或dh(光標籤的字符);刪除多個字符,能夠在x以前加數字;

         刪除從當前光標到所在行上指定的某個字符之間的全部字符(包括該指定字符)

         刪除某行,移動光標到所在行,而後輸入dd

         刪除換行符將兩行連起來,光標移動到要合併的兩行的第一行,而後輸入J

         利用命令組合模式,操做符-動做。d命令後跟一個光標移動動做,將刪除從當前位置到光標移動到的目標位置的所有內容。例如:刪除從當前光標向前的5個單詞,命令爲d5w;刪除

     從當前光標位置到行尾的字符,命令爲d$

         db表示從當前位置刪除到前一個單詞的開頭。diw表示刪除光標上的單詞(不包括空格)。daw表示刪除光標上的單詞(包括空格)。

         從當前光標位置上的字符一直刪除到指定的字符(包括指定字符),用df命令,好比,刪除到r,命令爲dfr。從當前光標位置刪除到指定字符的前一個字符,用dt命令,好比:dtr。

         dG 表示從當前光標位置一直刪除到文件的末尾。dgg表示從當前光標位置一直刪除到文件的開始。

          (3)、修改字符:

          修改字符的操做命令是c。做用是刪除字符後自動切換到Insert模式,比刪除操做命令多了一個切換到Insert模式的功能。

          修改光標下的 字符,cl.

          修改光標前的字符,ch.

          修改當前光標後的3個詞,組合命令是c3w。

          修改當前光標以前的單詞,cb.

          修改光標上的單詞,不包括空格,ciw。

          修改光標上的單詞,包括空格,caw。

          修改到指定字符(包括指定字符),好比修改到e,命令爲cfe。

          修改到指定字符以前一個字符,好比,修改到e以前的字符,cte.

          修改光標所在行一整行,cc。

          從當前光標位置修改到行尾,c$。

          cG,修改到文件的末尾。

          cgg,修改到文件的開頭。

         (4)、替換字符:

         r命令是進入Insert模式的命令之一,進入Insert模式等待你輸入一個字符替換當前光標上的字符後自動返回Normal模式。 

         在r命令以前加入數字前綴,能夠用一個字符替換當前光標後的多個字符。好比:3rp。可是例外的是,若是替換的字符是回車鍵,則只會用一個換行符替換多個字符。        

         使用R命令啓動Replace模式, 這個模式下在當前光標位置所在字符開始日後一直能夠持續用新輸入的字符替換全部原有字符,直到你退出Replace模式。在這個模式下,使用退格

      鍵Backspace,原來被替換的字符會恢復。 

         (5)查詢字符:

         從當前光標位置向前查找當前行上的某個指定字符的第一個字符,命令是f。好比: 查找w,fw。F也和f命令同樣,可是查找方向相反。

         從當前光標位置向前查找當前行上的某個指定字符的前一個字符,命令是t。好比: 查找o以前的字符,to。T也和t命令同樣,可是查找方向相反。

         向前查找字符單詞命令, 」/「後加上想查找的字符單詞。好比:」/a「 就是查找字符」a「。想要向前查找當前光標後第三個匹配的a,還須要輸入」3n「命令。向後第三個則輸入」3N「

         向後查找字符,」?「後加上想查找的字符。想要向前查找光標後第三個匹配的字符,還需輸入」3N「。向後第三個則輸入」3n「

         查找字符一般區分大小寫的,若是不想區分大小寫,可在~/.vimrc文件中加入命令"set ignorecase"命令。

         還能夠將光標移動要查找的單詞上,而後輸入」*「命令,這樣將取得當前光標上的單詞並向前查找該單詞。想要向前查找光標後第2個單詞,能夠輸入"2*"

          向後查找當前光標上的單詞,則能夠輸入」#「。想要向後查找當前光標的第2個單詞,能夠輸入」2#「

          輸入」/di「,也可能查找到單詞」media「。若是想限定di只匹配單詞開頭,能夠輸入」/<di「。若是隻想查找以di結尾的單詞,則能夠輸入」/di>「。若是隻想查找完整

      的單詞"di"輸入」/<di>「。注意,」*「和」#「命令也是匹配整個單詞查找的,若是想要部分匹配,輸入」g*「和」g#「

          "/^di",只匹配行首。"/di$"只匹配行未。」/^di$「僅僅匹配包括」di「的行並不帶空格。

           」/d.i「只匹配第一個字符是」d「,第二個字符是任意字符,第三個字符是」i「的字符串。

          」/di/.「匹配帶特殊字符」.「的字符串」di.「

          (6)、複製字符:

          使用d、x或其它命令刪除文本的時候,這些被刪除的文字將會被Vim緩存起來。可使用p命令將該被刪除的文本在當前光標的前面(好比前一行)從新粘貼出來。

          使用y(yank:抽出)操做符命令可直接把文字拷貝到寄存器中,而後用p命令粘貼到其餘地方。好比:拷貝4個單詞,4yw(包括了單詞後面的空格,用ye則不包括單詞後的空格)。

          yl拷貝當前光標下的字符,yh拷貝當前光標以前的字符。

          yw拷貝當前光標到下一個單詞的開頭,yb拷貝當前光標到上一個單詞的開頭。yiw,拷貝光標上的單詞(不包括空格)。yaw,拷貝光標上的單詞(包括空格)。

      y$拷貝到行尾。

          yy命令拷貝一整行,快捷方式爲Y。

          yG,拷貝到文件的末尾。

          ygg,拷貝到文件的開頭。

        (7)、文本對象:

          當處於某個單詞或句子的中間,而又想刪除整個單詞或句子時,可使用文本對象。好比:diw能夠刪除一整個單詞(iw表示Inner word,不包括單詞後的空格),若是想要包

      含單詞後的空格也刪除,可用命令daw。一樣地,cis表示修改一整個句子(is表示Inner Sentence,不包括句子後的空格),若是想要包含句子後的空格也修改,則用命令cas。

          一樣地,在Visual模式下,也能夠用文本對象命令來選中更多的文本。好比使用aw選中當前的整個單詞,再次使用則選中多一個單詞。

          文本對象的表達式:<操做命令>a<文本對象>或<操做命令>i<文本對象>,操做命令能夠是任何命令,如d,y,c;文本對象能夠是一個單詞w,一個句子s,一個

       段落p,也能夠是一個特殊的字符:"、'、)、}、]。

          使用 :help text-objects 能夠在幫助裏查看更多的文本對象的更多命令內容。

          使用:help operator 能夠在幫助裏查看更多的操做符命令內容。

          (8)、撤銷與重作:

          撤銷上一個編輯操做,輸入u;撤銷全部在前一個編輯行上的操做,輸入U;重作,輸入Ctrl+r

         "."命令表示重複最後一次除u命令、Ctrl-r命令和冒號命令以外的任何操做命令。

          (9)查找命令:

         輸入"/"」?「」:"後,按方向鍵上箭頭或下箭頭,能夠查找一樣的歷史命令記錄。

          (10)、命令次數:

          能夠在不少命令以前加上數字,表示執行該命令的次數。

          在組合命令的中,數字能夠放在不一樣的地方。好比:修改5個單詞,5cw和c5w都同樣;刪除10個單詞,能夠寫成10cw、c10w,或者2c5w、5c2w。其中的

      差異在於數字修飾的命令不同,可是做用是同樣的。

          (11)、退出:

           保存文件並退出,輸入ZZ或":wq"或「:x」;放棄修改並退出,輸入「:q!」;強制退出全部打開的文件,輸入「:qa!」

          (12)、放棄執行命令:

          Esc鍵能夠終止大部分命令。    

          (13)、幫助:

          輸入「:help」進入幫助窗口;輸入ZZ,退出幫助窗口。

          得到具體的幫助,好比關於u命令的幫助,輸入相似「:help u」

          認顯示Normal模式的幫助,要顯示其餘模式的命令,可使用「i_」綴。

          獲取命令參數的幫助,好比:「:help -e」.

          使用「:helptags ~/.vim/doc」 命令產生插件的本地tags文件,從而能夠在幫助中查詢插件的文檔。

          (14)標籤跳轉:

          被 [ ]包起來的文字是一個標籤連接,光標移動到 [ ]間,按Ctrl+]組合鍵跳轉到標籤連接的地方。Ctrl+t或 Ctrl + O跳回前一個標籤。

          使用G命令或者」n「命令或者查找」/「命令跳到其餘行後,Vim會記錄下你跳過來的地方,使用兩個單引號('')便可跳回原來的地方;或者使用Ctrl-o命令跳到較舊的地方;

      Ctrl-i命令Tab鍵跳到較新的地方。輸入":jumps"命令能夠看到光標跳轉的位置列表信息。

          使用」m「命令標記當前光標的位置,位置的名稱只能爲a~z的單個字母(區分大小寫)。好比:定義當前光標的位置爲」E「,命令爲"mE"。設置後能夠經過單引號'+光標名稱,或者

      上句號`+光標名稱能夠跳到指定的光標位置,區別是單引號 ’E命令跳轉到標記光標位置所在行的首個非空字符(列的位置跟標記的時候不一樣),而上句號 `E跳轉到標記

      的光標原來位置(包括行和列的位置都跟標記的時候同樣)。輸入」:marks「命令能夠查看全部帶名稱的標記信息列表,其中有幾個特殊的標記。好比:單引號 ' ,表示跳轉前的

      位置。雙引號 "表示Normal模式最後編輯的位置。中括號 [表示文件第一行的第一列。中括號 ]表示文件最後一行的第一列。 ^表示Insert模式下最後修改的位置。 表示不管

      是Insert模式或Normal模式最後修改的位置的開頭。

         (15)顯示Vim相關的文件路徑:

         :scriptnames命令能夠查找~/.vimrc或~/.gvimrc或插件等文件的路徑。

         (16)、在vim中打開編輯文件命令: 

:e! ~/.vimrc  

保存文件: 

:w  

另存爲:

:saveas pathFile 

當同時打開多個文件,在多個文件間切換命令:

:bn //下一個文件       
:bp  //前一個文件  

         (17)、Visual模式:

         以前介紹過,在Normal模式下,輸入v,進入Visual模式。這樣,你對光標做任何移動操做,從當前光標位置到移動到的位置之間的文本都會高亮,此時輸入

      操做命令,好比刪除命令d,則高亮部分文本會被刪除。

         在Visual模式下光標的移動操做跟Normal模式差很少。注意,在Visual模式下,"o"命令表示返回到選中文字的另外一端,這跟Normal模式不一樣。

        18)、快捷鍵與一些經常使用的命令:

         一些常用的組合命令,存在等價的快捷單字符命令:

         dl 的等價快捷鍵爲 x,做用刪除當前光標下的字符。

         dh的等價快捷鍵爲 X,做用刪除光標左邊的字符。

         d$的等價快捷鍵爲D,做用刪除到行尾。

         cl的等價快捷鍵爲s,做用修改當前光標的字符。

         cc的等價快捷鍵爲S,做用修改一整行。

         c$的等價快捷鍵爲C, 做用修改到行尾。

         yy的等價快捷鍵爲Y,做用拷貝一整行。

一些經常使用的命令的以下:

        c          修改操做命令

        d          刪除操做命令

        y          複製到寄存器的操做命令

        ~         修改選中的字符的大小寫,原來大寫的轉換成小寫,原來小寫的轉成大寫。在Visual模式和Normal模式下都能生效。 注意,

                只有tiledeop設置後,這個才能成爲一個操做命令,纔可用該命令與其餘光標移動的命令組合使用。

       g~        修改選中的字符的大小寫操做命令,原來大寫的轉換成小寫,原來小寫的轉成大寫。

       gu         修改選中的字符爲小寫操做命令。

       gU         修改選中的字符爲大寫操做命令。

        !           過濾警告操做命令

        gq         選中文本格式化,文本拼接組合成句子或段落命令。在Normal模式和Visual模式下都能生效。

        >       選中文本向右Tab縮進。在Normal模式和Visual模式下都能生效。

        <          選中文本向左Tab縮進。在Normal模式和Visual模式下都能生效。

       gd          到達光標所在處函數或變量定義之處。

       塊操做命令過程: 移動到想要進行操做的位置,好比行首或行尾;按組合鍵Ctrl-v,進入塊操做模式;移動光標到任何地方,選定塊操做的範圍,比

   如:hjkl命令;最後輸入I(在塊的每一行首插入字符)或A(塊的每一行尾部插入)進入Insert模式,而後輸入想要插入的字符,按Esc鍵使塊的每一行一樣的位置生效。

   自動補全功能:在Insert模式下,輸入一個詞的開頭,而後按組合鍵Ctrl-n或Ctrl-p,就出現自動補全的提示。

   宏錄製:q + <宏> + 操做隊列 + q ,@<宏> , @@。<宏> 能夠是任意單個字母(區分大小寫)或任意單個數字, q<宏> 進入recording模式,該模式下你的操做

   記錄會保存到寄存器<宏> 中;而後輸入@<宏>操做命令將從新執行被記錄到寄存器<宏>中的命令;@@命令跟@<宏>的做用同樣。

 

   可視化選擇:v,V,Ctrl-v.  v,V均可以進入Visual模式,而Ctrl-v能夠進入Visual Block模式(即塊操做模式),在這兩個模式下,均可以移動光標選定編輯文本。對選

   定文本執行c,y,d等操做,下面有幾個經常使用的對選定文本的操做:

  •  J:把全部行連起來變成一行。
  •  >或<操做,文本向左右Tab縮進。
  •  =操做:選中文本自動縮進。 
       分屏:
   [N]-Ctrl-w-s、[N]-ctrl-w-S或:[N]sp[lit],組合命令將Vim的屏幕高度分出一個新的具備N行的屏幕,其中[N]和[lit]選項能夠不輸入。即:sp或:5split都是合法的分屏命令。
   [N]-Ctrl-w-v或:[N]vs[plit]組合命令將Vim的屏幕寬度分出一個新的具備N列的屏幕,其中[N]和[plit]選項能夠不輸入,即:vs或:5vsplit都是合法的分屏命令。
   [N]-Ctrl-w-n或:[N]new 組合命令將Vim的屏幕高度分出一個新的具備N行的屏幕,並打開一個新的空文件開始編輯。
   :[N]vne[w] 組合命令將Vim的屏幕寬度分出一個新的具備N列的屏幕,並打開一個新的空文件開始編輯。
   :q或:q!、:close或:close!(最後一個窗口不關閉)、:hide(最後一個窗口不關閉)能夠關閉當前屏幕窗口。:on[ly][!]    除了當前窗口全部其餘窗口都關閉。
   Ctrl-w-w、Ctrl-w-方向鍵(包括hjkl和箭頭方向鍵),能夠在多個窗口中切換。Ctrl-t(top-left窗口)、Ctrl-b(bottom-right窗口)、Ctrl-p(上一個窗口)也是經常使用的切換窗口命令。
   Ctrl-w-r、 Ctrl-w-R、 Ctrl-w-x、 Ctrl-w-J\H\K\L\T等能夠改變窗口的佈局。
   Ctrl-w-+(增長尺寸)、 Ctrl-w--(減小尺寸)增長或減小當前窗口屏幕尺寸。Ctrl-w-_(豎屏最大化)、Ctrl-w-| (橫屏最大化)用來最大化當前分窗口屏幕。

本身配置不一樣的語言函數自動補全的步驟:
建立~/.vim/dict     目錄, 而後建立包含各類語言函數列表的txt文件;最後在~/.gvimrc文件加入以下命令:
au FileType cpp setlocal dict+=~/.vim/dict/cpp_function_list.txt  

  (19)菜單快捷鍵:

        編輯菜單:

         Undo   快捷鍵  command+z

         Redo  快捷鍵 shift+command+z

         Cut    快捷鍵 command+x (剪切的文本能夠粘貼於其餘程序或vim)

         Copy 快捷鍵 command+c  (複製的文本能夠粘貼於其餘程序或vim)

         Paste 快捷鍵 command+v 

         Select All 快捷鍵 command+a

     文件菜單:

         New window  快捷鍵 Command+n

         New  Tab 快捷鍵 Command+t

         Open New File  快捷鍵愛你 Command+o

         Save 快捷鍵 Command+s 

         Save as 快捷鍵 shifit+Command+s

         Close window 快捷鍵 Shift+Command+w

         Close   快捷鍵 Command+w

6、最後貼出本人的~/.vimrc和~/.gvimrc配置:

   ~/.vimrc配置以下:

" An example for a vimrc file.通常設置cli相關設置,即命令行相關設置,插件相關設置。緣由加載順序是先讀取vimrc配置,而後讀取plugin插件,而後加載GUI,最後再讀取gvimrc配置文件。因此,GUI以及快捷鍵通常放到gvimrc裏設置,有時候在vimrc設置跟界面顯示相關的沒做用,要在gvimrc裏設置纔有用。vimrc配置是vim,gvimrc配置文件是gvim,若是想要vim也有配色等,能夠將界面相關的設置放在vimrc文件裏從新設置一下。  
   
"-------------------------------------------------------------------------------  
"           基本設置  
"-------------------------------------------------------------------------------  
" When started as "evim", evim.vim will already have done these settings.  
if v:progname =~? "evim"  
  finish  
endif   
  
"啓用Vim的特性,而不是Vi的(必須放到配置的最前邊)  
set nocompatible  
  
" 設置編碼    
set encoding=utf-8    
set fenc=utf-8    
set fileencodings=ucs-bom,utf-8,cp936,gb2312,gb18030,big5   
   
"顯示行號  
set number  
  
"設置默認打開窗口大小  
set lines=70 columns=100  
  
"設置窗口透明度  
set transparency=10  
  
"設置背景色  
"set bg=dark  
  
"用 koehler 調色板  
colorscheme koehler  
  
"隱藏工具欄和滑動條  
set guioptions=aAce      
            
"設置標籤欄  
"最多30個標籤  
set tabpagemax=30   
"顯示標籤欄    
set showtabline=2     
       
  
"設定文件瀏覽器目錄爲當前目錄  
"set bsdir=buffer  
"set autochdir  
  
"保存100條命令歷史記錄  
set history=100   
      
"老是在窗口右下角顯示光標的位置  
set ruler     
      
"在Vim窗口右下角顯示未完成的命令   
set showcmd           
  
" 啓用鼠標  
if has('mouse')  
  set mouse=a  
endif  
  
"設置語法高亮  
if &t_Co > 2 || has("gui_running")  
syntax on  
endif  
  
  
"-------------------------------------------------------------------------------  
"           文本操做設置  
"-------------------------------------------------------------------------------  
"設置字體  
set gfn=Courier:h15  
  
"設置自動縮進  
"設置智能縮進  
set tabstop=4  
set shiftwidth=4  
set softtabstop=4  
set expandtab  
set smarttab  
  
  
"設置Tab鍵跟行尾符顯示出來  
set list lcs=tab:>-,trail:-  
  
"設置自動換行  
set wrap  
  
"設置Insert模式和Normal模式下Left和Right箭頭鍵左右移動能夠超出當前行  
set whichwrap=b,s,<,>,[,]  
  
"設置光標移動到屏幕以外時,自動向右滾動10個字符  
set sidescroll=10  
  
  
  
  
  
  
"設置使~命令成爲操做符命令,從而使~命令能夠跟光標移動命令組合使用  
set tildeop  
  
"在Insert模式下,設置Backspace鍵如何刪除光標前邊的字符。這裏三個值分別表示空白字符,分行符和插入模式以前的字符。  
set backspace=indent,eol,start  
  
"定義鍵映射,不使用Q命令啓動Ex模式,令Q命令完成gq命令的功能---即文本格式化。  
map Q gq  
  
" CTRL-U 在Insert模式下能夠刪除當前光標所在行所在列以前的全部字符.  Insert模式下,在Enter換行以後,能夠當即使用CTRL-U命令刪除換行符。  
inoremap <C-U> <C-G>u<C-U>  
  
"使 "p" 命令在Visual模式下用拷貝的字符覆蓋被選中的字符。  
vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>  
  
  
"-------------------------------------------------------------------------------  
"           搜索設置  
"-------------------------------------------------------------------------------  
"打開搜索高亮  
set hlsearch  
  
"忽略大小寫  
set ignorecase  
  
"在查找時輸入字符過程當中就高亮顯示匹配點。而後回車跳到該匹配點。  
set incsearch     
  
"設置查找到文件尾部後折返開頭或查找到開頭後折返尾部。  
set wrapscan  
  
  
  
"-------------------------------------------------------------------------------  
"           文件設置  
"-------------------------------------------------------------------------------  
  
"設置當Vim覆蓋一個文件的時候保持一個備份文件,但vms除外(vms會自動備份。備份文件的名稱是在原來的文件名上加上 "~" 字符  
if has("vms")  
  set nobackup         
else  
  set backup          
endif  
  
  
if has("autocmd")  
  "啓用文件類型檢測並啓用文件類型相關插件,不一樣類型的文件須要不一樣的插件支持,同時加載縮進設置文件, 用於自動根據語言特色自動縮進.  
  filetype plugin indent on  
    
  "將下面腳本命令放到自動命令分組裏,這樣能夠很方便地刪除這些命令.  
  augroup vimrcEx  
  au! "刪除原來組的自動命令  
  
  "對於全部文件類型,設置textwidth爲78個字符.  
  autocmd FileType text setlocal textwidth=78  
  
  //vim啓動後自動打開NerdTree  
  autocmd vimenter * NERDTree  
  autocmd vimenter * if !argc() | NERDTree | endif  
  "設置關閉vim NerdTree窗口  
  autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif  
  
  "當打開編輯文件時老是自動執行該腳本,跳轉到最後一個有效的光標位置Mark標記。當一個事件正在處理時,不執行該腳本命令。  
  "行首的反斜槓用於把全部語句鏈接成一行,避免一行寫得太長.   
  autocmd BufReadPost *  
    \ if line("'\"") > 1 && line("'\"") <= line("$") |  
    \   exe "normal! g`\"" |  
    \ endif  
  
  augroup END  
else  
  "Enter換行時老是使用與前一行的縮進等自動縮進。  
  set autoindent  
  "設置智能縮進  
  set smartindent         
endif    
  
  
"編輯一個文件時,你所編輯的內容沒保存的狀況下,能夠把如今的文件內容與編輯以前的文件內容進行對比,不一樣的內容將高亮顯示  
if !exists(":DiffOrig")  
  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis  
          \ | wincmd p | diffthis  
endif  
  
  
"-------------------------------------------------------------------------------  
"           插件設置  
"-------------------------------------------------------------------------------  
  
"插件相關的設置  
"matchit 的字符匹配自定義設置  
let b:match_words = '\<if\>:\<endif\>,'  
        \ . '\<while\>:\<continue\>:\<break\>:\<endwhile\>'  
  
  
  
"Vundle 的配置  
  
filetype off                   " required!  
  
set rtp+=~/.vim/bundle/vundle/  
call vundle#rc()  
  
" let Vundle manage Vundle  
" required!   
"管理Vim插件   
Bundle 'gmarik/vundle'   
  
  
" My Bundles here:  
" original repos on github  
"文本按字符對齊  
Bundle 'godlygeek/tabular'  
  
" vim-scripts repos  
"實現「begin」/「end」相似地匹配,~/.vimrc文件中添加自定義的設置:let b:match_words = '\<if\>:\<endif\>,'  
        \ . '\<while\>:\<continue\>:\<break\>:\<endwhile\>'  
Bundle 'matchit.zip'       
Bundle 'moria'  
Bundle 'word_complete.vim'  
Bundle 'SuperTab'  
Bundle 'xptemplate'  
Bundle 'ctags.vim'  
Bundle 'taglist.vim'  
Bundle 'winmanager'  
Bundle 'Command-T'  
  
" non github repos  
"Bundle 'git://git.wincent.com/command-t.git'  
" ...  
Bundle 'https://github.com/scrooloose/nerdtree.git'  
   
filetype plugin indent on     " required!  
"  
" Brief help  
" :BundleList          - list configured bundles  
" :BundleInstall(!)    - install(update) bundles  
" :BundleSearch(!) foo - search(or refresh cache first) for foo  
" :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles  
"  
" see :h vundle for more details or wiki for FAQ  
" NOTE: comments after Bundle command are not allowed..  

    ~/.gvimrc配置以下:

" An example for a gvimrc file.通常設置GUI和快捷鍵等  
"-------------------------------------------------------------------------------  
"           gvimrc導入的默認設置  
"-------------------------------------------------------------------------------  
" 設置窗口底部命令有兩行  
set ch=2  
      
" 輸入文本時隱藏鼠標  
set mousehide         
  
"鍵位映射,使shift-insert快捷鍵像在 Xterm程序中同樣工做  
map <S-Insert> <MiddleMouse>  "鼠標中鍵表明快捷粘貼  
map! <S-Insert> <MiddleMouse>  
  
" Vim版本5.0或以上下面腳本工做.  
if version >= 500  
  
  "高亮C註釋字符串  
  let c_comment_strings=1  
  
  "若是沒啓動語法高亮,啓動語法高亮  
  if !exists("syntax_on")  
    syntax on  
  endif  
  
  "啓動搜索高亮.  
  set hlsearch  
   
  " 設置顏色  
  " 文本背景爲淺灰色  
  " 文本的最後一行爲深灰色  
  " 光標設置成綠色, C當 ":lmap"映射激活時變成青色  
  " 常量設置爲沒有底線,但常量的背景顏色淺一些  
  highlight Normal guibg=grey90  
  highlight Cursor guibg=Green guifg=NONE  
  highlight lCursor guibg=Cyan guifg=NONE  
  highlight NonText guibg=grey80  
  highlight Constant gui=NONE guibg=grey95  
  highlight Special gui=NONE guibg=grey95  
  
endif  
  
  
  
  
"-------------------------------------------------------------------------------  
"           基本設置  
"-------------------------------------------------------------------------------  
" When started as "evim", evim.vim will already have done these settings.  
" 設置編碼    
set encoding=utf-8    
set fenc=utf-8    
set fileencodings=ucs-bom,utf-8,cp936,gb2312,gb18030,big5   
   
"顯示行號  
set number  
  
"設置默認打開窗口大小  
set lines=70 columns=100  
  
"設置窗口透明度  
set transparency=10  
  
"設置背景色  
"set bg=dark  
  
"用 koehler 調色板  
colorscheme koehler  
  
"隱藏工具欄和滑動條  
set guioptions=aAce      
            
"開啓自帶的tab欄  
set showtabline=2   
          
"老是在窗口右下角顯示光標的位置  
set ruler     
      
"在Vim窗口右下角顯示未完成的命令   
set showcmd           
  
"設置語法高亮  
if &t_Co > 2 || has("gui_running")  
syntax on  
endif  
  
  
"-------------------------------------------------------------------------------  
"           文本操做設置  
"-------------------------------------------------------------------------------  
"設置字體  
set gfn=Courier:h15  
  
"設置自動縮進  
set tabstop=4  
set shiftwidth=4  
set softtabstop=4  
set noexpandtab  
  
"設置Tab鍵跟行尾符顯示出來  
set list lcs=tab:>-,trail:-  
  
  
"設置自動換行  
set wrap  
  
"設置光標移動到屏幕以外時,自動向右滾動10個字符  
set sidescroll=10  
  
  
"-------------------------------------------------------------------------------  
"           搜索設置  
"-------------------------------------------------------------------------------  
"打開搜索高亮  
set hlsearch  
  
"忽略大小寫  
set ignorecase  
  
"在查找時輸入字符過程當中就高亮顯示匹配點。而後回車跳到該匹配點。  
set incsearch     
  
"設置查找到文件尾部後折返開頭或查找到開頭後折返尾部。  
set wrapscan  
  
  
  
"-------------------------------------------------------------------------------  
"           文件設置  
"-------------------------------------------------------------------------------  
  
  
  
"-------------------------------------------------------------------------------  
"           插件界面設置  
"-------------------------------------------------------------------------------  
  
"ctags的設置,這裏的ctags是用MacPorts安裝的,用Vundle安裝的'ctags.vim'有問題,系統自帶的ctags也有點問題  
let Tlist_Ctags_Cmd="/opt/local/bin/ctags"  
  
let Tlist_Exist_OnlyWindow=1 " 若是taglist窗口是最後一個窗口,則退出vim  
let Tlist_Auto_Update " Update the tag list automatically  
  
"在vim左側顯示窗口Taglist和文件列表窗口  
"let g:winManagerWindowLayout='FileExplorer,BufExplorer|TagList'  
let g:winManagerWindowLayout='NERDTree, BufExplorer|TagList'  
"打開vim時自動打開winmanager  
let g:AutoOpenWinManager = 1  
"定義打開關閉winmanager的快捷鍵  
nmap wt :WMToggle<cr>  

   本文蜻蜓點水地帶領你們快速瀏覽了MacVIm的一些基本功能,也至關於筆者的一個學習總結。實際上,上邊談到的每個內容均可以獨立寫成一篇博客來介紹,對於Vim的更多具體用法還須要去進行更深刻的學習。寫這篇文章,筆者參考了不少資料,在這裏羅列一些出來供讀者參考。

原地址:http://blog.csdn.net/forlong401/article/details/42340883

相關文章
相關標籤/搜索