在機子目錄下創建 .vim文件夾php
例如 /home/xxx/.vimhtml
在~文件夾下創建.vimrc文件 這是你本身配置文件java
vim雖然啓用了格式化高亮、行號顯示,以及括號匹配、自動縮進等編輯功能,對於大多數狀況均可以得到理ios
想的編輯體驗。不過此時對.php文件的支持還不完善,須要下載專門的php插件。c++
下載地址:http://www.vim.org/scripts/script.php?script_id=1571
下載文件:php.tar.gzgit
將其中的php.vim複製到.vim/syntax目錄中便可。github
一開始在設置裏更換主題一直沒法顯示,後來找到問題的緣由:vim
通常的Linux發行版默認的終端都是16色的,但事實上幾乎全部的終端都支持256色終端。windows
1.將Terminal設爲Xterm模式:編輯->配置文件首選項->顏色 設置爲自定義,內置方案選擇XTerm.bash
2.vimrc裏設置:set t_Co=256
而後就能夠隨便color本身喜歡到主題了。我是用的:colorscheme desert。
IDE左側是目錄導航,中間是編輯區域,而右側則是方法列表,用於在已經打開的文件中快速跳轉。在編輯區
域按下CTRL+X鍵,還會顯示已打開文件的列表。
其餘諸如自動補全、代碼模板等功能,都應有盡有。看過了漂亮的截圖,咱們就來一步步打造PHP IDE吧。
在進行PHP應用開發時,同時編輯多個文件是很正常的事情。因此必須有一個方便的目錄導航工具,以便在目
錄結構間快速切換,找到須要編輯的文件。
vim中提供該類功能的插件不少,比較知名的有project、winmanager等。但筆者我的認爲最好用的仍是The
NERD Tree這個插件。NERDTree不但能夠顯示完整的目錄樹結構,還能夠將任何一個目錄設置爲根目錄。並
且提供了目錄導航的書籤功能,可謂很是方便。
下載地址:http://www.vim.org/scripts/script.php?script_id=1658
下載文件:NERD_tree.zip
解壓縮時,要把壓縮包中的目錄結構完整的解壓縮到$VIMvimfiles目錄中。完成後,應該分別找到$VIM
vimfilesdocNERD_tree.txt文件和$VIMvimfilespluginNERD_tree.vim文件。而後在vim中輸入命令:helptags
$VIMvimfilesdoc,將NERDTree的幫助文檔添加到vim中。
最後在_vimrc添加以下內容:
」 NERDTree
map <F8> :NERDTreeToggle<CR>
重啓vim後,按下F8鍵,就能夠在左側看到一個目錄樹了。在目錄樹窗口中按下?鍵能夠查看詳細的幫助信息
最經常使用的操做鍵有:
按鍵 | 做用 |
C(大寫C鍵) | 將光標所在目錄設置爲根目錄 |
u(小寫u鍵) | 轉到上一級目錄 |
o(小寫o鍵,不是「零」) | 展開(或摺疊)光標所在目錄的子目錄。若是光標所在位置是一個文件,則在編輯窗口中打開該文件 |
此外在目錄樹窗口中輸入目錄:Bookmark 收藏名還能夠將光標所在目錄添加到收藏夾中。下次使
用:BookmarkToRoot 收藏名能夠直接轉到該目錄,而且以該目錄做爲根目錄。更多命令能夠參考NERDTree的
幫助文檔。
解決了目錄和文件導航問題,咱們還要爲代碼之間的跳轉提供輔助手段,taglist就是這樣一個插件。taglist能夠
列出已打開文件中定義的類、函數、常量,甚至變量。
下載地址:http://www.vim.org/scripts/script.php?script_id=273
下載文件:taglist_45.zip
壓縮包須要完整解壓縮到$VIMvimfiles目錄,而且用:helptags $VIMvimfilesdoc命令索引taglist插件的幫助文
檔。taglist插件須要依賴ctags程序才能工做。目前經常使用的ctags版本是Exuberant Ctags。
sudo apt-get install ctags,而後whereis ctags,找到ctags: /usr/bin/ctags 這目錄下的ctags。
將ctags複製到$VIMvim72目錄中便可。
最後在/etc/vim/vimrc添加下列內容,設置好taglist插件:
「」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"
」 => Plugin configuration
「」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"」"
」 taglist
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Auto_Open = 1
let Tlist_Auto_Update = 1
let Tlist_Close_On_Select = 0
let Tlist_Compact_Format = 0
let Tlist_Display_Prototype = 0
let Tlist_Display_Tag_Scope = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 0
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
利用ctrl+ww來進行兩個窗口之間的切換。
在taglist窗口中,可使用下面的快捷鍵:
點擊下面網址,進去下載autocomplpop插件
http://www.vim.org/scripts/script.php?script_id=1879
下載的是一個zip文件,解壓後會有三個文件夾,分別是autoload,doc,plugin。到Vim的根目錄下,找到名字
和這三個同樣的文件夾。不一樣系統目錄位置不一樣。個人fedora是/usr/share/vim/vimfiles
按照文件夾對應的把裏面的acp.vim和其餘的什麼文件都copy過去。而後重啓Vim。這時候可能會有錯誤提示
Error detected while processing /home/carlos/.vim/plugin/acp.vim:
line 13:
***** L9 library must be installed! *****
這是插件放出的一個錯誤提示,查看plugin裏的acp.vim能夠看到。是缺乏L9 library庫。這個也是須要下載的。地址在下面
http://www.vim.org/scripts/script.php?script_id=3252
下載下來,它也是一個插件形式,以一樣的方式copy到Vim目錄下。
安裝完後就能夠了。
再就是這個插件默認是沒有設置php自動補全的,能夠設置一個PHP函數字典,讓其根據字典的內容進行自動
補全。
這個是一個PHP字典:.
編輯配置文件.vimrc,在文件後面加上下面的代碼
au FileType php setlocal dict+=/etc/vim/php_funclist.txt
後面跟着的是字典的目錄地址,根據本身的需求存放在一個地方就好。我是放到了/etc/vim/目錄下。 php_funclist下載:php_funclist.tar.gz
再附加一些自動補全配置(加入到vimrc中):
php 中 通常是會在 "$", "->", "::" 後須要出現自動補全,在 .vimrc 中加入如下代碼:
if !exists('g:AutoComplPop_Behavior') let g:AutoComplPop_Behavior = {} let g:AutoComplPop_Behavior['php'] = [] call add(g:AutoComplPop_Behavior['php'], { 'command' : "<C-x><C-o>", 'pattern' : printf('(->|::|$)k{%d,}$', 0), 'repeat' : 0, }) endif
在 Vim 中實現括號自動補全:
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "<Right>"
else
return a:char
endif
endf
這樣,寫代碼的時候再也不擔憂會丟掉右邊的括號了,尤爲是函數嵌套的時候。
到http://github.com/mattn/zencoding-vim下載壓縮包,而後解壓到vimfiles文件夾,和上面同樣,將doc plugin
autoload三個文件夾放到相應文件夾下。而後在vim中輸入helptags /etc/vim/doc 導入幫助文件.就OK了。
zencoing能夠很方便的寫html,一些經常使用命令:
輸入 div>p#foo$*3>a 這樣的縮寫,而後按 ctrl + y + , 來展開(注意那個逗號),展開後它應該是這個樣子的
<div> <p id="foo1"> <a href=""></a> </p> <p id="foo2"> <a href=""></a> </p> <p id="foo3"> <a href=""></a> </p> </div>
輸入以下:
test1 test2 test3
而後進入行選擇模式,選中這三行按 ctrl + y + ,,接着它會提示你要使用的tag名稱,TAG: 輸入 ‘ul>li* 會變成以下的樣子
<ul> <li>test1</li> <li>test2</li> <li>test3</li> </ul>
若是是輸入blockquote,那麼會變成這樣
<blockquote> test1 test2 test3 </blockquote>
輸入ctrl + y + n 進入插入模式
輸入ctrl + y + N 進入插入模式
假若有如下內容
<img src="foo.png" />
光標移動到img標籤上,按下ctrl + y + i 該插件會自動獲取foo.png的大小並插入寬高屬性 看起來像這個樣子
<img src="foo.png" width="32" height="48" />
若有如下段
<div> hello world </div>
光標移動到此段落,輸入ctrl + y + /變成
<!-- <div> hello world </div> -->
再次輸入則還原
將光標移動到一個url上,如:
http://www.google.com/
輸入ctrl + y + a 它會自動獲取url頁面的標題並生成一個鏈接
<a href="http://www.google.com/"></a>
Zen Coding官方提供的速查手冊(PDF):http://zen-coding.googlecode.com/files/ZenCodingCheatSheet.pdf
不過通常不須要使用那麼複雜的功能,一個vim就夠了
個人配置
"顯示行數
set number
"設置編碼
set encoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set fileencoding=utf-8
set termencoding=utf-8
"不要使用vi的鍵盤模式,vim's
set nocompatible
"history文件中須要記錄的行數
set history=400
"與windows共享剪貼板
set clipboard+=unnamed
"支持鼠標事件,點擊定位等
set mouse=a
"偵測文件類型
filetype on
"載入文件類型插件
filetype plugin on
"爲特定文件類型載入相關縮進文件
filetype indent on
"語法高亮
syntax enable
syntax on
"高亮顯示匹配的括號
set showmatch
"設置縮進
"製表符爲4
set tabstop=4
"統一縮進爲4
set softtabstop=4
set shiftwidth=4
"
"繼承前一行的縮進方式,特別適用於多行注視
set autoindent
"使用C樣式的縮進
set cindent
"設置C/C++語言的具體縮進方式(以個人windows風格爲例):
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
if &term=="xterm"
set t_Co=8
set t_Sb=^[[4%dm
set t_Sf=^[[3%dm
endif
"顯示下劃線
"set cursorline
關於c/c++語言的一些配置
"新建.c,.h,.sh,.java文件,自動插入文件頭
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
""定義函數SetTitle,自動插入文件頭
func SetTitle()
"若是文件類型爲.sh文件
if &filetype == 'sh'
call setline(1,"\#########################################################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: ")
call append(line(".")+2, "\# mail: ")
call append(line(".")+3, "\# Created Time: ".strftime("%c"))
call append(line(".")+4, "\#########################################################################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Author: ")
call append(line(".")+2, " > Mail: ")
call append(line(".")+3, " > Created Time: ".strftime("%c"))
call append(line(".")+4, " ************************************************************************/")
call append(line(".")+5, "")
endif
if &filetype == 'cpp'
call append(line(".")+6, "#include<iostream>")
call append(line(".")+7, "using namespace std;")
call append(line(".")+8, "")
endif
if &filetype == 'c'
call append(line(".")+6, "#include<stdio.h>")
call append(line(".")+7, "")
endif
"新建文件後,自動定位到文件末尾
autocmd BufNewFile * normal G
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"鍵盤命令
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <leader>w :w!<cr>
nmap <leader>f :find<cr>
" 映射全選+複製 ctrl+a
map <C-A> ggVGY
map! <C-A> <Esc>ggVGY
map <F12> gg=G
" 選中狀態下 Ctrl+c 複製
vmap <C-c> "+y
"去空行
nnoremap <F2> :g/^\s*$/d<CR>
"比較文件
nnoremap <C-F2> :vert diffsplit
"新建標籤
map <M-F2> :tabnew<CR>
"列出當前目錄文件
map <F3> :tabnew .<CR>
"打開樹狀文件目錄
map <C-F3> \be
"C,C++ 按F5編譯運行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'sh'
:!./%
endif
endfunc
"C,C++的調試
map <F8> :call Rungdb()<CR>
func! Rungdb()
exec "w"
exec "!g++ % -g -o %<"
exec "!gdb ./%<"
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""實用設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 設置當文件被改動時自動載入
set autoread
" quickfix模式
autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
"代碼補全
set completeopt=preview,menu
"容許插件
filetype plugin on
"共享剪貼板
set clipboard+=unnamed
"從不備份
set nobackup
"make 運行
:set makeprg=g++\ -Wall\ \ %
"自動保存
set autowrite
set ruler " 打開狀態欄標尺
set cursorline " 突出顯示當前行
set magic " 設置魔術
set guioptions-=T " 隱藏工具欄
set guioptions-=m " 隱藏菜單欄
"set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
" 設置在狀態行顯示的信息
set foldcolumn=0
set foldmethod=indent
set foldlevel=3
set foldenable " 開始摺疊
" 不要使用vi的鍵盤模式,而是vim本身的
set nocompatible
" 語法高亮
set syntax=on
" 去掉輸入錯誤的提示聲音
set noeb
" 在處理未保存或只讀文件的時候,彈出確認
set confirm
" 自動縮進
set autoindent
set cindent
" Tab鍵的寬度
set tabstop=4
" 統一縮進爲4
set softtabstop=4
set shiftwidth=4
" 不要用空格代替製表符
set noexpandtab
" 在行和段開始處使用製表符
set smarttab
" 顯示行號
set number
" 歷史記錄數
set history=1000
"禁止生成臨時文件
set nobackup
set noswapfile
"搜索忽略大小寫
set ignorecase
"搜索逐字符高亮
set hlsearch
set incsearch
"行內替換
set gdefault
"編碼設置
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"語言設置
set langmenu=zh_CN.UTF-8
set helplang=cn
" 個人狀態行顯示的內容(包括文件類型和解碼)
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
" 老是顯示狀態行
set laststatus=2
" 命令行(在狀態行下)的高度,默認爲1,這裏是2
set cmdheight=2
" 偵測文件類型
filetype on
" 載入文件類型插件
filetype plugin on
" 爲特定文件類型載入相關縮進文件
filetype indent on
" 保存全局變量
set viminfo+=!
" 帶有以下符號的單詞不要被換行分割
set iskeyword+=_,$,@,%,#,-
" 字符間插入的像素行數目
set linespace=0
" 加強模式中的命令行自動完成操做
set wildmenu
" 使回格鍵(backspace)正常處理indent, eol, start等
set backspace=2
" 容許backspace和光標鍵跨越行邊界
set whichwrap+=<,>,h,l
" 能夠在buffer的任何地方使用鼠標(相似office中在工做區雙擊鼠標定位)
set mouse=a
set selection=exclusive
set selectmode=mouse,key
" 經過使用: commands命令,告訴咱們文件的哪一行被改變過
set report=0
" 在被分割的窗口間顯示空白,便於閱讀
set fillchars=vert:\ ,stl:\ ,stlnc:\
" 高亮顯示匹配的括號
set showmatch
" 匹配括號高亮的時間(單位是十分之一秒)
set matchtime=1
" 光標移動到buffer的頂部和底部時保持3行距離
set scrolloff=3
" 爲C程序提供自動縮進
set smartindent
" 高亮顯示普通txt文件(須要txt.vim腳本)
au BufRead,BufNewFile * setfiletype txt
"自動補全
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction
filetype plugin indent on
"打開文件類型檢測, 加了這句才能夠用智能補全
set completeopt=longest,menu
若是出現can not find 這些錯誤
能夠設置vim目錄
let $VIMRUNTIME="/usr/share/vim/vim70"set runtimepath=/usr/share/vim/vim70