Ubuntu下配置一個高效的PHP開發環境GVIM

來源:互聯網
上載者:User

 Vim本質上只是一個編輯器。但只要配合一些適當的外掛程式,vim也能變成一個全功能的IDE。筆者使用vim已經有挺長一段時間了,經過反覆的實驗,配置了一個高效的PHP開發環境,實為居家旅行、謀財害命、殺人越貨必備之良品。

安裝Vim GVIM

普通方式安裝

sudo apt-get install vim

sudo apt-get install vim-gtk vim-doc cscope

編譯安裝7.3穩定版:www.kukaka.org/home/showonews/344

編譯安裝7.3最新版:www.kukaka.org/home/showonews/370

 

卸載Vim GVIM

普通安裝方式卸載

sudo apt-get remove --purge vim (--purge 是完全刪除,會連設定檔一起刪除)

 

sudo apt-get remove --purge vim-gtk vim-doc cscope

sudo apt-get clean

編譯安裝方式卸載

進入之前編譯安裝時的目錄:make uninstall

開始配置vim

Linux 下 vim 預設設定檔 /etc/vim/vimrc

使用者預設設定檔 ~/.vimrc

如果想一次配置,所有使用者都能使用,那就修改 /etc/vim/vimrc,如果只想目前使用者可以使用,則修改 ~/.vimrc

針對開發配置

    au FileType php,c,java,javascript,html,htm,smarty call SetOption()    function! SetOption()      set expandtab    " 使用空格代替tab      set shiftwidth=4 " 設定 << 和 >> 命令移動時的寬度為 4      set tabstop=4    " 用4個空格代替1個tab      set sts=4        " 設定softtabstop 為 4,輸入tab後就跳了4格.      set cindent      " C語言方式縮排      set smartindent  " 智慧縮排      set autoindent   " 自動縮排      set smarttab     " 只在行首用tab,其他地方的tab都用空格代替      set showmatch    " 在輸入括弧時游標會短暫地跳到與之相匹配的括弧處      " set fdm=indent " 程式碼摺疊功能      set lbr      set tw=500      set wrap         " 自動換行    endfunction
個人化定製標籤

Gvim 標籤定製

    set guitablabel=%{ShortTabLabel()}    function ShortTabLabel ()      let bufnrlist = tabpagebuflist (v:lnum)      let label = bufname (bufnrlist[tabpagewinnr (v:lnum) -1])      let filename = fnamemodify (label, ':t')      return filename    endfunction

Vim 標籤定製

    set tabline=%!MyTabLine()    function MyTabLine()      let s = ''      for i in range(tabpagenr('$'))        " 選擇高亮        if i + 1 == tabpagenr()          let s .= '%#TabLineSel#'        else          let s .= '%#TabLine#'        endif        " 設定標籤頁號 (用於滑鼠點擊)        let s .= '%' . (i + 1) . 'T'        " MyTabLabel() 提供完整路徑標籤 MyShortTabLabel 提供檔案名稱標籤        let s .= ' %{MyShortTabLabel(' . (i + 1) . ')} '      endfor      " 最後一個標籤頁之後用 TabLineFill 填充並複位標籤頁號      let s .= '%#TabLineFill#%T'      " 靠右對齊用於關閉當前標籤頁的標籤      if tabpagenr('$') > 1        let s .= '%=%#TabLine#%999Xclose'      endif      return s    endfunction    " 檔案名稱標籤    function MyShortTabLabel(n)      let buflist = tabpagebuflist(a:n)      let label = bufname (buflist[tabpagewinnr (a:n) -1])      let filename = fnamemodify (label, ':t')      return filename    endfunction    "完整路徑標籤    function MyTabLabel(n)      let buflist = tabpagebuflist(a:n)      let winnr = tabpagewinnr(a:n)      return bufname(buflist[winnr - 1])    endfunction    " vim 標籤樣式    "  TabLineFill  tab pages line, where there are no labels    hi TabLineFill term=none    hi TabLineFill ctermfg=DarkGrey    hi TabLineFill guifg=#777777    "  TabLineSel   tab pages line, active tab page label    hi TabLineSel term=inverse    hi TabLineSel cterm=none ctermfg=yellow ctermbg=Black    hi TabLineSel gui=none guifg=yellow guibg=Black         " Develop editing options    au FileType vim setl expandtab    au FileType vim setl shiftwidth=2    au FileType vim setl tabstop=2
個人化定製狀態列

Statusline

    " 顯示狀態列(預設值為 1,無法顯示狀態列)    set laststatus=2    " Format the statusline    set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}E5%h\ \ \ Line:\ %l/%L:%c         function! CurDir()        let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g")        return curdir    endfunction
用NERDTree實現目錄和檔案導航

在進行PHP應用開發時,同時編輯多個檔案是很正常的事情。所以必須有一個方便的目錄導航工具,以便在目錄結構間快速切換,找到需要編輯的檔案。

vim中提供該類功能的外掛程式很多,比較知名的有project、winmanager等。但筆者個人認為最好用的還是The NERD Tree這個外掛程式。NERDTree不但可以顯示完整的分類樹結構,還可以將任何一個目錄設定為根目錄。並且提供了目錄導航的書籤功能,可謂非常方便。

:http://www.vim.org/scripts/script.php?script_id=1658

下載檔案:NERD_tree.zip

解壓縮時,要把壓縮包中的目錄結構完整的解壓縮到 ~/.vim/ 目錄中。完成後,應該分別找到  ~/.vim/doc/NERD_tree.txt 檔案和  ~/.vim/plugin/NERD_tree.vim 檔案。然後在vim中輸入命令: helptags  ~/.vim/doc,將NERDTree的協助文檔添加到vim中。

現在,命令模式下輸入:NERDTreeToggle便可開啟或關閉NERDTree

注意:使用過程中,你可能會因為刪除一個檔案夾,而沒有刪除這個檔案夾所綁定的標籤,出現以下錯誤

NERDTree: 1 invalid bookmarks w...

解決:開啟~/.vim/.NERDTreeBookmarks,刪除裡面無用的標籤即可。

用taglist實現代碼導航

解決了目錄和檔案導航問題,我們還要為代碼之間的跳轉提供輔助手段,taglist就是這樣一個外掛程式。taglist可以列出已開啟檔案中定義的類、函數、常量,甚至變數。

:http://www.vim.org/scripts/script.php?script_id=273

下載檔案:taglist_45.zip

壓縮包需要完整解壓縮到 ~/.vim/ 目錄,並且用:helptags ~/.vim/doc命令索引taglist外掛程式的協助文檔。

taglist外掛程式需要依賴ctags程式才能工作。目前常用的ctags版本是Exuberant Ctags。

安裝ctags

:http://ctags.sourceforge.net/

下載檔案:ctags-5.8.tar.gz

解壓ctags:tar -zxcf ctags-5.8.tar.gz

進入ctags:cd ctags-5.8

打上PHP補丁(否則按下ctrl+n,連基本的function include等函數都出不來):

wget http://svn.bitflux.ch/repos/public/misc/ctags-php5.patch

patch php.c ctags-php5.patch

編譯安裝:

./configure

make

sudo make install

經過這三步後就產生 /usr/local/bin/ctags

 

繼續回來修改~/.vim/plugin/taglist.vim

在 if !exists('loaded_taglist')上面加入

let Tlist_Ctags_Cmd="/usr/local/bin/ctags"

或加在~/.vim/.vimrc檔案,只要能讓vim開啟時載入的*.vim檔案即可

此時Ctags和Taglist已經結合起來,再用vim編輯php檔案, 執行 :TlistToggle 就會在右邊出現一個當前檔案的 類 函數 變數 等東西

還記得我們使用netbeans eclipse等大型開發工具的時候嗎,按著 ctrl + 滑鼠左鍵 點擊一個函數,就會跳轉到該函數定義處,他其實也是使用的tags跟蹤跳轉,只不過他們會自動去掃描源碼目錄,產生一個tags檔案(是否曾經為netbeans沒完沒了的掃描崩潰過?),而vim需要我們自己去產生這個tags。這個功能對代碼跟蹤非常有好處,下面我們就來實現他

在相應的源碼目錄運行ctags -R產生相應的tags檔案

cd ~/www/mysite

ctags -R *

開啟vim

:cd ~/www/mysite

:set tags=tags

現在,我們設定好了tags選項,接下來我們使用它,我們先來尋找一個名叫make_html的方法:

方法一:

:tag make_html

如果make_html方法的定義只存在一個檔案中你會看到VIM開啟了該檔案,並把游標定位到make_html方法所在行上。

如果make_html方法的定義存在多個檔案中,會提示:

找到 tag:1 / 14 或更多

這時我們可以列出保護這個方法的所有檔案

:tselect        "顯示列表

這時會列出所有檔案,讓我們選擇一個檔案開啟

# pri kind tag                檔案
> 1 F C f         make_html         function/my_function.php
   2 F     f         make_html         xxx/xxx.php
鍵入數字和斷行符號(empty cacels) :

根據提示輸入我們想查看的檔案對應的序號然後斷行符號就可以了。

:tn       "顯示後一個tag到的PHP檔案
:tp       "顯示前一個tag到的PHP檔案
:tags   "顯示標籤棧

我們還可以把滑鼠停留在想要跳轉的 類 函數 變數 上面,然後按 ctrl + ] ,回到原來位置是 ctrl + t

方法二:

把滑鼠停留在 make_html 上面,然後按ctrl+],怎麼樣,和直接輸入:tag make_html 是一模一樣的吧

現在,我們已經跳轉到make_html函數的定義處,看到了函數的詳細定義,明確知道如何使用這個函數了,那怎麼回到原來的位置呢,答案是按 ctrl+o 返回。

小技巧:

細心的朋友可能會發現,作為一個強大的IDE,還應該解決以下幾個問題:

1.左邊分類樹結構不變。

 

2.代碼塊注釋,刪除注釋。

3.代碼塊縮排,刪除縮排。

解決問題:

1.一般情況下,我們會以標籤的方式開啟一個檔案(讓游標停留在一個要開啟的檔案上,按 t ),此時左邊沒有分類樹,輸入
:NERDTreeToggle開啟分類樹,此分類樹為建立的,和第一個檔案的分類樹結構不同,這不符合我們普通IDE的習慣,還記得我們用
Netbeans之類的編輯器嗎?左邊的目錄書結構一直沒變,其實是所有檔案分享權限設定一顆樹的原因,NERDTree也允許我們共用樹,命令是
:NERDTreeMirror,結合Tlist,我的捷徑定義如下:

    map <F2>:NERDTreeToggle    map <F3>:TlistToggle    map <F4>t:NERDTreeMirror

現在,看看我寫代碼的習慣:

首先,開啟vi編輯器。

按 F2 開啟分類樹

把游標停留在需要建立標籤的檔案夾上, :Bookmark 收藏名。

以後只需要 開啟分類樹,Shift+B開啟收藏標籤,雙擊一下想開啟的標籤,再按一次Shift+B關閉收藏標籤。

滑鼠選中需要開啟的檔案,按 F4快速鍵 ,此時,vi會先執行 t (標籤方式開啟檔案),再執行:NERDTreeMirror共用第一棵樹,後面一串是為了保持之前開啟的檔案便簽還是顯示檔案名稱用的。

怎麼樣,效果和大型IDE差不多了吧。

2.代碼塊注釋,刪除注釋

 

注釋:ctrl+v 進入列編輯模式,向上或向下移動游標,把需要注釋的行的開頭標記起來,然後按大寫的I,再插入注釋符,比如"//",再按Esc,就會全部注釋了。

刪除:ctrl+v 進入列編輯模式,選中注釋部分,然後按d,就會刪除注釋符號。

3.代碼塊縮排,刪除縮排。

縮排:選擇需要縮排的程式碼(鍵盤滑鼠都可以,選中了就行),>(shift+.)

刪除:選擇需要縮排的程式碼(鍵盤滑鼠都可以,選中了就行),<(shift+,)

 

下面是我一直使用的設定檔,有興趣的朋友可以參考一下

.vimrc

下面兩個放在~/.vim/plugin/下

MY_keymap.vim   鍵盤對應

MY_taglist.vim    taglist外掛程式配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.