zoukankan      html  css  js  c++  java
  • Ubuntu下配置一个高效的PHP开发环境GVIM

     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插件配置

  • 相关阅读:
    Ubuntu18.04安装配置
    Ubuntu Terminal「控制台」
    Ubuntu16.04系统安装
    UEFI Install CentOS 7
    安装Ubuntu16.04后要做的事
    Ubuntu Google Chrome
    Nuke Linux Crack
    Selenium3自动化测试实战 基于Python语言
    函数基础
    Jenkins持续集成
  • 原文地址:https://www.cnblogs.com/zfying/p/2724421.html
Copyright © 2011-2022 走看看