Skip to content

add cli config #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
342 changes: 40 additions & 302 deletions README
Original file line number Diff line number Diff line change
@@ -1,323 +1,61 @@
在fedora上用vim打造一个php集成开发环境(ide)
在linux终端下用vim打造一个php集成开发环境(ide)
1 安装vim
yum install vim-X11.x86_64 vim-common.x86_64 vim-enhanced.x86_64
vim-minimal.x86_64

2 创建配置文件
touch ~/.vimrc

3 我的配置文件
" .vimrc
" See: http://vimdoc.sourceforge.net/htmldoc/options.html for details

"设定 gvim 运行在增强模式下,不使用vi的键盘模式
set nocompatible
"设置支持多语言,解决乱码
set encoding=utf-8
set fileencodings=utf-8,gbk,default,latin1
"设置字体,配色方案
if has("gui_running")
set guifont=Courier\ New\ 14
" on windows,use "set guifont=Courier:14 "
"设置配色方案
" colorscheme oceandeep
endif

"基本编辑器设置
set number "显示行号
set expandtab "编辑时将所有 Tab 替换为空格
set shiftwidth=2 "自动缩进的时候,缩进尺寸为2个空格
set tabstop=2 "设置 softtabstop 为 2. 输入 tab 后就跳了2格
"对于不同类型的文件,进行自定义设置
au FileType html,python,vim,javascript,css setl shiftwidth=2
au FileType html,python,vim,javascript,css setl tabstop=2
au FileType java,php setl shiftwidth=4
au FileType java,php setl tabstop=4

set textwidth=80 "设置每行的最大字符数,超过的话,将换行
set hlsearch "搜索时高亮显示
set incsearch "输入搜索内容时就显示搜索结果
set fileformat=unix "文本格式
set nobackup "覆盖文件时不备份

set ruler "打开状态栏标尺
set laststatus=2 "显示状态栏 (默认值为 1, 无法显示状态栏)
set cmdheight=1 "设定命令行的行数为 1

set showtabline=2 "显示tab标签
set tabline+=%f "tab标签
" Enable Code Folding
set foldenable
set foldmethod=syntax
set mouse=a "任何情况都可以使用鼠标)

"去掉错误声音
set vb t_vb=
"工作目录随文件变
autocmd BufEnter * cd %:p:h
"设置状态栏
set statusline=%F%m%r,%Y,%{&fileformat}\ \ \ ASCII=\%b,HEX=\%B\ \ \ %l,%c%V\
%p%%\ \ \ [\ %L\ lines\ in\ all\ ]
"不显示工具条
set guioptions-=T
set backspace=indent,eol,start "不设定的话在插入状态无法用退格键和 Delete
filetype on "设置文件类型的检测
filetype plugin on "为特定的文件类型允许插件文件的载入

"按住ctrl键,移动方向键时,以峰驼的方式
nnoremap <silent><C-Left> :<C-u>cal
search('\<\<Bar>\U\@<=\u\<Bar>\u\ze\%(\U\&\>\@!\)\<Bar>\%^','bW')<CR>
nnoremap <silent><C-Right> :<C-u>cal
search('\<\<Bar>\U\@<=\u\<Bar>\u\ze\%(\U\&\>\@!\)\<Bar>\%$','W')<CR>
inoremap <silent><C-Left> <C-o>:cal
search('\<\<Bar>\U\@<=\u\<Bar>\u\ze\%(\U\&\>\@!\)\<Bar>\%^','bW')<CR>
inoremap <silent><C-Right> <C-o>:cal
search('\<\<Bar>\U\@<=\u\<Bar>\u\ze\%(\U\&\>\@!\)\<Bar>\%$','W')<CR>

"php语法检查
setlocal makeprg=\/usr/bin/php\ -l\ -n\ -d\ html_errors=off\ %
setlocal errorformat=%m\ in\ %f\ on\ line\ %l
"autocmd BufWritePost *.php,*.phps :make
map :w:noh:make

"Disable phpsyntax based indenting for .php files
au BufRead,BufNewFile *.php set indentexpr= | set smartindent
au BufRead,BufNewFile *.phps set filetype=php

5 插件配置

1)集成NERDTree实现目录导航
wget https://github.com/scrooloose/nerdtree/tarball/master
tar zxvf scrooloose-nerdtree-4.1.0-35-g1cd5048.tar.gz
cp doc/NERD_tree.txt /usr/share/vim/vimfiles/doc/
cp plugin/NERD_tree.vim /usr/share/vim/vimfiles/plugin/
cp -fr nerdtree_plugin/ /usr/share/vim/vimfiles/
最后在 .vimrc 添加如下内容:

"NERDTree
map <F10> :NERDTreeToggle<CR>
let NERDTreeIgnore=['\.svn$','\.bak$']

通过F10即可调出目录导航,通过键盘ctrl+w+w可以在导航和编辑中的文件之前切换焦点。“u”可到上一级目录,回车则展开文件夹

2)集成task list url:http://www.vim.org/scripts/script.php?script_id=2607
cp tasklist.vim /usr/share/vim/vimfiles/plugin/
通过":TaskList"可以列出代码中的TODO和FIXME列表,将鼠标移动到相应的项目上时,会关闭列表窗口,并跳转到代码指定的位置

3)集成tag list url:http://www.vim.org/scripts/script.php?script_id=273
taglist 可以列出已打开文件中定义的类、函数、常量,甚至变量。
cp plugin/taglist.vim /usr/share/vim/vimfiles/plugin/
cp doc/taglist.txt /usr/share/vim/vimfiles/doc/
最后在 .vimrc 添加如下内容:

"taglist
set tags=tags;/
let Tlist_Ctags_Cmd="/usr/bin/ctags"
map <F3> :TlistToggle<CR>
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Auto_Open = 0
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
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 0
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 0
let Tlist_WinWidth = 40
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'

map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

需要安装ctags,本文采用yum安装,如需编译安装,请参见其他资料。
2 配置
mv /usr/share/vim/vimfiles /usr/share/vim/vimfiles_bak
cd /usr/share/vim
git clone [email protected]:jqlblue/php-vim.git
3 更新ctags
为了配合taglist,需要ctags的版本大于5.8
安装完成后
ln -s /path/ctags/bin/ctags /usr/bin/ctags

4 快捷键一览
F2:toggle NERDTree(目录导航),通过键盘ctrl+w+w可以在导航和编辑中的文件之前切换焦点。"u"可到上一级目录,回车则展开文件夹
F3:tag list
F6:可以按照zend的标准对代码进行检查
ctrl+p:当光标在函数名所在行时,按此快捷键,可以为函数自动添加代码注释。当光标在类名所在行时,按此快捷键,可以为类自动添加代码注释
ctrl+a:在可视模式下选中相关代码,按此快捷键,可以实现选中代码内'=','=>'两边代码的自动对齐
shift+t:可以列出代码中的TODO和FIXME列表,将鼠标移动到相应的项目上时,会关闭列表窗口,并跳转到代码指定的位置
ctrl+c:在可视模式下,选中代码,按此快捷键,即批量注释代码,再按就取消注释
ctrl+h: 在插入模式下,按此快捷键,即可调出光标所在php函数的说明,参数,返回值
z+f:选中代码,按此快捷键,实现代码折叠,按空格打开折叠
z+c:进行代码折叠
z+o:展开代码折叠

5 其他功能
自动完成
在插入模式下按tab键,可以实现php自动完成
taglist
通过ctags -R生成tags后,可以使用如下快捷键:
ctrl+] - 跳转到定义处
ctrl+t - 从定义处跳转回来
ctrl+w ctrl+] - 水平分割窗口,并在上部打开定义所在文件,跳转到定义处
ctrl+\ - 打开新标签页。并跳转到定义处
alt+] - 垂直分割窗口,并在右部打开定义所在文件,跳转到定义处

ctrl+鼠标左键 - 跳转到定义处
ctrl+鼠标右键 - 从定义处跳转回来

4)集成php-doc url http://www.vim.org/scripts/script.php?script_id=1355
cp php-doc.vim /usr/share/vim/vimfiles/plugin/

最后在 .vimrc 添加如下内容:
"在通常模式(n)和插入模式(i),按ctrl+p插入注释
inoremap <buffer> <C-P> ^[:call PhpDocSingle()<CR>i
nnoremap <buffer> <C-P> :call PhpDocSingle()<CR>
"选择多行,在可视模式(v)下,对选中的多行插入注释
vnoremap <buffer> <C-P> :call PhpDocRange()<CR>

5)集成PHPM url http://eide.org/2009/01/02/phpm/
cp -fr phpm /usr/share/vim/vimfiles
最后在 .vimrc 添加如下内容:

" Map <CTRL>-H to search phpm for the function name currently under the cursor
(insert mode only)
inoremap <buffer> <C-H> <ESC>:!/usr/share/vim/vimfiles/phpm/phpm
<C-R>=expand("<cword>")<CR><CR>
在插入模式下,按ctrl+h,即可调出光标在函数的说明,参数,返回值

6)集成funclist,实现自动完成 url
http://svn.php.net/viewvc/phpdoc/doc-base/trunk/funclist.txt
cp funclist.txt /usr/share/vim/vimfiles
最后在 .vimrc 添加如下内容:

setlocal dictionary-=/usr/share/vim/vimfiles/funclist.txt
dictionary+=/usr/share/vim/vimfiles/funclist.txt
" Use the dictionary completion
setlocal complete-=k complete+=k

func! InsertTabWrapper()
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<tab>"
else
return "\<c-p>"
endif
endfunction

" Remap the tab key to select action with InsertTabWrapper
inoremap <buffer> <tab> <c-r>=InsertTabWrapper()<cr>
在插入模式下,按tab,即可调出函数列表

7)在任意模式下,按";"在行尾输入添加";",如果没有";"的话
noremap <buffer> ; :s/\([^;]\)$/\1;/<cr>

8)配置 PhpAlign,手动格式代码的对齐
在 .vimrc 添加如下内容:

" Map <CTRL>-a to alignment function
vnoremap <buffer> <C-a> :call PhpAlign()<CR>

func! PhpAlign() range
let l:paste = &g:paste
let &g:paste = 0

let l:line = a:firstline
let l:endline = a:lastline
let l:maxlength = 0
while l:line <= l:endline
" Skip comment lines
if getline (l:line) =~ '^\s*\/\/.*$'
let l:line = l:line + 1
continue
endif
" \{-\} matches ungreed *
let l:index = substitute (getline (l:line),
'^\s*\(.\{-\}\)\s*\S\{0,1}=\S\{0,1\}\s.*$', '\1', "")
let l:indexlength = strlen (l:index)
let l:maxlength = l:indexlength > l:maxlength ? l:indexlength :
l:maxlength
let l:line = l:line + 1
endwhile

let l:line = a:firstline
let l:format = "%s%-" . l:maxlength . "s %s %s"

while l:line <= l:endline
if getline (l:line) =~ '^\s*\/\/.*$'
let l:line = l:line + 1
continue
endif
let l:linestart = substitute (getline (l:line), '^\(\s*\).*', '\1', "")
let l:linekey = substitute (getline (l:line),
'^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\1', "")
let l:linesep = substitute (getline (l:line),
'^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\2', "")
let l:linevalue = substitute (getline (l:line),
'^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\3', "")

let l:newline = printf (l:format, l:linestart, l:linekey, l:linesep,
l:linevalue)
call setline (l:line, l:newline)
let l:line = l:line + 1
endwhile
let &g:paste = l:paste
endfunc
在可视模式下,选中代码,按ctrl+a,即可格式代码的对齐

9)配置 PhpUnComment,批量注释代码
在 .vimrc 添加如下内容:

vnoremap <buffer> <C-c> :call PhpUnComment()<CR>

func! PhpUnComment() range
let l:paste = &g:paste
let &g:paste = 0

let l:line = a:firstline
let l:endline = a:lastline

while l:line <= l:endline
if getline (l:line) =~ '^\s*\/\/.*$'
let l:newline = substitute (getline (l:line),
'^\(\s*\)\/\/ \(.*\).*$', '\1\2', '')
else
let l:newline = substitute (getline (l:line),
'^\(\s*\)\(.*\)$', '\1// \2', '')
endif
call setline (l:line, l:newline)
let l:line = l:line + 1
endwhile

let &g:paste = l:paste
endfunc
在可视模式下,选中代码,按ctrl+c,即批量注释代码,再按就取消注释

10)设置自动补齐
在 .vimrc 添加如下内容:

inoremap <buffer> { {<CR>}<C-O>O

inoremap <buffer> [ []<LEFT>

" Standard mapping after PEAR coding standard
inoremap <buffer> ( ()<LEFT><LEFT>
" inoremap <buffer> ( ()<LEFT>

" Maybe this way in other coding standards
" inoremap ( ( )<LEFT><LEFT>

inoremap <buffer> " ""<LEFT>
inoremap <buffer> ' ''<LEFT>
11)在文件夹中查找
:vimgrep /pattern/gj ./**/*.php
这哥命令告诉vim,在当前目前下的所有.php文件中全局查找符合pattern的结果。
在行尾输入添加";"
在普通模式下,按";"在行尾输入添加";",如果没有";"的话
在文件夹中查找
:vimgrep /pattern/gj ./*/.php
这命令告诉vim,在当前目前下的所有.php文件中全局查找符合pattern的结果。
运行
:cw
会列出查找结果。

11)转换大小写
会列出查找结果
转换大小写
~ 转换当前光标所在字符的大小写
u 将选中的字符全转成小写
U 将选中的字符全转成大写
u 将选中的字符全转成小写
U 将选中的字符全转成大写
UV 将当前行转成大写
guw 将当前的单词转成小写

12)排序
vim在linux上,可以通过在命令模式下输入相关命令,进行文本的排序
%!sort -u 排序时,删除重复的行
%!sort -f 排序时,忽略大小写
排序
!sort -u 排序时,删除重复的行
!sort -f 排序时,忽略大小写
%!sort -r 进行逆向排序
排序时,都是以行为单位。按照字典顺序,如:a-z, 0-100的顺序进行排序
sort /pattern/ 可以在排序时,过滤掉正则匹配到的字符。
sort /^./ 将不是按照第一个字符排序,而是过滤掉第一个字符,从第二个开始。正则表达式/^./匹配开头的第一个字符。

sort /./ 将不是按照第一个字符排序,而是过滤掉第一个字符,从第二个开始。正则表达式/./匹配开头的第一个字符

参考链接
http://eide.org/category/php/
Expand Down
Loading