Vim,PHP IDE?

我可以看到您在电脑前随地吐痰。“什么?带有Vim的PHP IDE?你疯了?”

是吗 使用Vim制作功能非常强大的IDE绝对是可能的:您需要知道安装了哪些插件以及它们的用途。

那是我的前同事之一(kushellig),您向我展示了如何操作。从他们那里,我只是根据自己的需要对其进行了改进。

我在这里提出的插件列表将满足您的大多数需求:项目管理,自动完成,PHPDoc生成,强大的搜索和替换工具,调试器……所有这些功能都将免费唾手可得!

这种配置也不会阻止Vim与不同语言的其他插件完美配合。

与网络上的许多文章不同,我试图列出并描述一个良好的PHP IDE所必需的所有插件。当然,您需要阅读每个插件的文档以根据需要配置它们。这是Vim如此出色的多个原因之一:您可以制作自己的IDE,以完全满足您的需求和喜好!

如果您需要一些具体的配置示例,可以看看我的一般vim配置。您也可以查看我的一些特定插件的配置

最后,如果您在配置这些插件时遇到困难,可以发表评论。我将竭诚为您服务。

免责声明

在Arch Linux上将这些插件与Neovim一起使用,这意味着我不知道它们是否可以在MacO或Windows上运行。应该,但是要知道我从未测试过。

NeovimVim实际上是几乎相同的软件,这就是为什么我在本文中以全局名称Vim引用它们。但是请记住,我提到的插件更可能与Neovim一起使用。

PHP Vim插件

我在这里尝试强调我使用的每个插件的所有优势。如果您只需要一个简单的无聊列表,则可以直接转到本文结尾处的插件参考列表

插件管理器

首先,您需要一个插件管理器。这个插件是万能的插件:它将帮助您安装新插件,通过简单的命令行删除或更新它们。

vim-plug是管理Vim插件所需的全部。您只需要安装它,并将此配置放在vimrc之上:

call plug#begin('~/nvim/plugged')Plug 'tpope/vim-fugitive'call plug#end()

该行Plug 'tpope/vim-fugitive'是您可以安装的插件的示例。关键字Plug必须在任何插件的github存储库之后。

您需要在call plug#begin和之间声明您的插件call plug#end

就那么简单!

生成标签

该标记文件是可以为许多OOP语言(包括PHP)设置的索引

建议为每个项目创建一个标记文件:

  1. 您将能够轻松跳转到方法和类定义(ctrl + ]默认情况下使用)
  2. 此列表中的某些插件需要具有标记文件才能工作

为了生成此文件,有两种解决方案:Universal ctags  Gutentags。我个人更喜欢第一个,但您当然可以同时测试两者。

1-通用标签

对于生成标记文件的第一种方法,您需要在您的PHP项目中使用git(我暗中希望您这样做!)。

首先,您需要安装Universal-ctags才能生成此标签文件。

如果在软件包管理器中不可用,则需要对其进行编译。执行这些命令行,您将在当前目录中下载并编译通用标签。一个小建议:将所有编译的软件都放在一个位置是个好习惯(我个人将它们放在文件夹中~/bin):

git clone git@github.com:universal-ctags/ctags.gitcd ctags./autogen.sh./configuremakesudo make install

然后,您需要添加一个git挂钩来自动生成此标记文件。ctags.git/hooks/您的PHP项目的目录中创建一个文件,其内容如下:

#!/bin/shset -ePATH="/usr/local/bin:$PATH"dir="`git rev-parse --git-dir`"trap 'rm -f "$dir/$$.tags"' EXITctags --tag-relative=yes -R -f "$dir/$$.tags" --fields=+aimlS --languages=php --PHP-kinds=+cdfint-av --exclude=composer.phar --exclude=*Test.php --exclude=*phpunit* --exclude="\.git"mv "$dir/$$.tags" "$dir/tags"

现在,您需要更改文件的权限: sudo chmod 777 ctags

最后,您需要在vimrc中添加以下行。每次保存PHP文件时,它将生成标记。 au BufWritePost *.php silent! !eval '[ -f ".git/hooks/ctags" ] && .git/hooks/ctags' &

您可以通过在项目中打开任何PHP文件并将其保存来测试其是否有效。通常,tags文件应出现在.git项目目录中。这就是我们所需要的!

2-Gutentags

第二种方法更简单:您所需要做的就是安装gutentags插件,根据需要配置它,然后就可以开始使用!

Essentials插件

本节的插件只是死亡的最佳和必备插件。他们改善了Vim……很多!它们并不是专门为PHP开发而设计的,但是它们会带来一些主要IDE默认具有的强大功能。

Vim带有一个非常简单的文件浏览器,但这还远远不够。如果要在编辑器中使用更复杂的文件树,则此树功能非常强大。

Miniyank非常容易导航到Vim的寄存器中。您可以使用所需的任何按键轻松地浏览寄存器。当您知道需要复制或删除某些内容时,它非常简单且功能强大。

这个插件允许您关闭缓冲区而不关闭窗口。我一直都在使用它,很棒的是不要弄乱窗口布局并保持关闭文件的可能性。

lightline.vim是一个很好的状态栏,可随时提供您需要的当前文件和状态信息。您不记得自己处于哪种模式?您当前修改的是哪个文件?文件的编码是什么?此状态栏将为您提供所需的信息。

蒂姆·波普Tim Pope)是Vim世界中一个多产的贡献者。他所有的插件都值得尝试。Vim-commentary将通过简单的击键注释每一行。它与多种语言(PHP,JavaScript,Go等)完美配合。

我最常使用的Vim功能之一是替换。它允许您在当前文件中简单地用一个字符串替换另一个字符串。

该插件使替换功能更智能。例如,它允许您保留要替换的单词的复数形式或大写字母。它甚至可以用dot.case替换snake_case的camelCase。

Vim的一个很好的补充。

项目管理插件

如今,在许多IDE或编辑器中将完全不同的代码文件组织到一个项目中非常自然。感觉如此自然,我们不再觉得它有多方便。

通过组合两个插件,可以在Vim中实现相同的目的。

使用vim-project,您将能够覆盖一个项目的任何vim配置!与许多IDE一样,它允许您根据当前打开的项目进行完全个性化的配置。

该插件还提供了Vim的启动页面,让您选择要打开的项目。不幸的是,这个启动页面似乎在Neovim上不起作用。

这就是为什么我将vim-project与vim-startify一起使用。

你知道《财富》吗?每次您打开Neovim时,vim-startify都会使用它来显示与开发相关的随机报价。这听起来可能很愚蠢,但却很棒!

在同一页面上,startify还将显示您已配置的每个项目,并让您选择要打开的项目。

由于我将项目配置文件与vimrc分开,因此这里有一个示例,说明如何使用vim-project和vim-startify配置项目:

let g:startify_bookmarks = [             \ {'1': '~/workspace/mySuperProject/README.md'},            \]call project#rc("~/workspace")Project  'mySuperProject'Callback 'mySuperProject', ['Symfony', 'mySuperProject']function! mySuperProject(...)    let g:vdebug_options["path_maps"] = {    \       "/mySuperProject": "/home/mySuperUser/workspace/mySuperProject"    \}    PadawanStartServerendfunctionfunction! Symfony(...)    let g:ultisnips_php_scalar_types = 1    " standard phpcs config    let g:neomake_php_phpcs_args_standard = 'PSR2'    " php cs fixer     let g:php_cs_fixer_php_path = "php"    autocmd FileType php nnoremap <leader>g :silent :call PhpCsFixerFixFile()<CR>endfunction

我定义的函数的一些特殊配置SymfonymySuperProject然后我可以连接到该项目mySuperProject通过回调线。

此配置使用我在下面介绍的插件。

语法插件

这些插件非常适合PHP开发。

一个简单的插件,它将改善PHP的语法突出显示。像本文中的许多插件一样,它是高度可配置的。

此代码将在需要时自动格式化代码(例如,通过按键或每次保存PHP文件)。默认情况下,它将按照PSR1 / PSR2规则格式化代码,但您也可以自行配置。

自动补全插件

当我开始完全使用Vim时,我非常害怕退出IntelliJ(PhpStorm的索引引擎,该引擎可以实现非常好的自动补全)。最后,我没有错过任何一秒钟……感谢以下插件!

必须使用自动完成引擎来自动触发自动完成本身。ncm2是我的最爱,因为它易于安装,易于配置且易于使用。我从来没有问题。

但是,这还不够。您将需要以下插件来专门自动完成PHP代码:

phpactor绝对是必须具备的。它可以为您提供很多帮助(请参阅“ 重构/代码样式插件”部分)。它提供自动补全功能非常好并且非常稳定。

它还允许您自动导入类名称空间,甚至可以跳转到没有ctags的类或方法定义。

插件ncm2-phpactor旨在将phpactor链接到ncm2。

搜索/替换插件

在文件甚至整个项目中搜索和替换呢?Vim也可以这样做吗?

当然可以,而且做得很好。这些插件比我测试过的任何东西都更快,更强大。

简而言之:fzf是您将找到的最佳模糊搜索器。用Go语言编写,它可以轻快的速度搜索任何文件中的所有内容。老实说,我从PhpStorm切换到Vim的部分原因是因为该插件!就是那样

该列表的第一个插件将安装模糊搜索器本身:您可以在终端中使用它来搜索……任何您想要的东西。搜索命令行历史记录(例如)是我无法缺少的一项主要功能。

第二个插件将在Vim中启用fzf。然后,您可以配置一些击键来搜索文件历史记录,缓冲区或搜索项目中的文件…

Ripgrep不是Vim插件,但可以与fzf结合使用,以将事件搜索到多个文件中。非常强大,而且又快得惊人。

您需要在计算机上安装ripgrep(对于使用Arch linux的用户,只需键入pacman -S ripgrep),并在vimrc中编写一些配置。

例如:

nnoremap <leader>a :Rg<space>nnoremap <leader>A :exec "Rg ".expand("<cword>")<cr>autocmd VimEnter * command! -nargs=* Rg  \ call fzf#vim#grep(  \   'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>), 1,  \   <bang>0 ? fzf#vim#with_preview('up:60%')  \           : fzf#vim#with_preview('right:50%:hidden', '?'),  \   <bang>0)

当您输入按键<leader> a并在命令行提示符下键入内容时,ripgrep将在项目的所有文件中搜索该内容。

然后,借助fzf,您可以在搜索窗口中微调搜索。您甚至可以通过键入在搜索中突出显示文件的预览?

最后但并非最不重要的一点,这里是一个使用Ripgrep的插件,用于搜索多个文件中的事件。就像ripgrep与fzf组合在一起(见上文),只是有一个区别:您可以使用多个著名的vim替换来为多个精确的文件选择命名的文件,从而重命名多个文件中的文件。

假设您需要通过一堆文件来重命名变量?这个插件可以很容易地为您做到这一点。此外,它使您可以完全控制要修改的内容。

PhpStorm批量重命名有很多问题,特别是因为它倾向于替换我不想替换的内容。我从来没有一个问题与此插件。

代码质量插件

您编写代码时会犯错误吗?如果答案是否定的,请与我们取得联系。我很想知道您的做法...

否则,我强烈建议您获取此插件:

Neomake将在左侧的装订线(在行号附近)和窗口的位置列表中填充代码中出现的任何错误,这要感谢警告者。

这些警告制定者被插入一些著名的PHP代码质量工具中:

您也可以创建自己的制造商。在Vim中,只需输入:help neomake-job-makers并按照说明进行操作即可。

Neomake可以立即显示任何PHP语法错误。

重构插件

拥有一些用于重构和正确格式化代码的工具可以节省大量时间。

通过简单的按键操作,您可以(显然)进行配置,此插件可以:

  • 重命名局部变量,方法,类属性
  • 创建获取器和设置器或类属性
  • 提取使用语句,常量,类属性

此列表并不详尽。一个做得很好的插件,易于配置。

如上所述,此插件可以执行一些非常有用的操作,例如:

  • 在项目树中移动类并更新其所有引用(!)
  • 根据构造函数参数自动创建属性
  • 提取方法
  • 提取常数
  • … 以及更多

一个怪兽。

Git插件

如今谁不使用git?如果您更喜欢使用SVN,这是一个谎言。尝试git,再也不要回头。

Vim逃犯是必须具备的。您可以执行很多操作(git怪或在特定文件上显示差异…)。强烈推荐。

Vim signify也是非常有用的:它通过在左侧装订线中显示小标志来显示修改/添加/删除的行。

片段插件

没有摘要我该怎么办?为了加快代码键入速度,这非常方便。您是否要通过仅键入pri键击然后创建私有方法?我确定你会的。

Ultisnips将为您提供一个非常好的和快速的摘录引擎,可以使用您想要的每种语言。

Vim代码段是许多语言(包括PHP或课程)的非常好的代码段集。

最好的部分:用自己的代码片段很容易扩展!

大纲插件

大纲插件在单独的窗口中显示类的每个方法和属性的列表。然后,您可以选择它们以跳到源文件本身中的定义。

这是您会发现的最好的大纲插件。我个人不经常使用它(并且我经常忘记使用它),但是在某些情况下它可以派上用场。

调试器插件

如果您需要使用多种语言的优秀调试器,则vdebug是最好的选择。配置可能有些繁琐,但功能非常强大。对于PHP,您需要正确配置xdebug才能使用它。

对于Docker用户(或者如果您使用Vagrant之类的任何虚拟机),则需要指定项目的路径,如下所示:

let g:vdebug_options["path_maps"] = {    \       "/mySuperProject": "/home/mySuperUser/workspace/mySuperProject"    \}

左边的路径是您的虚拟机/ Docker上的路径,右边的路径是您的本地路径。

PHPDoc插件

能够通过简单的按键生成PHPDoc非常方便。这些插件正是这些插件!

这些插件将自动创建一些有用的带有参数变量的PHPDoc(但不会返回)。您大部分时间都需要完成信息,但这是一个好的开始。

简而言之:Vim比PhpStorm好吗?

我不喜欢这种比较:PhpStorm是具有更多功能的IDE。对我来说,它太多了,我讨厌有一百万个窗口突然弹出,这打扰了我的思维和流程。

命令行比一堆Windows更加通用和强大。

Vim可能并不比PhpStorm“更好”,但我认为Vim可以肯定地用本文列出的插件替换PhpStorm。

此外,您还具有Vim配置的灵活性,可以根据需要扩展它。PhpStorm并没有真正为您提供任何配置选择(至少只有基本的选择)。

至少对我来说,Vim确实比我尝试过的任何其他PHP IDE更有趣,功能更强大!

如果您在设置自己的Vim时遇到任何问题或疑问,请在评论中让我知道。