Vim for PHP:强大的PHP IDE的完整指南
Vim,PHP IDE?
我可以看到您在电脑前随地吐痰。“什么?带有Vim的PHP IDE?你疯了?”
是吗 使用Vim制作功能非常强大的IDE绝对是可能的:您需要知道安装了哪些插件以及它们的用途。
那是我的前同事之一(kushellig),您向我展示了如何操作。从他们那里,我只是根据自己的需要对其进行了改进。
我在这里提出的插件列表将满足您的大多数需求:项目管理,自动完成,PHPDoc生成,强大的搜索和替换工具,调试器……所有这些功能都将免费唾手可得!
这种配置也不会阻止Vim与不同语言的其他插件完美配合。
与网络上的许多文章不同,我试图列出并描述一个良好的PHP IDE所必需的所有插件。当然,您需要阅读每个插件的文档以根据需要配置它们。这是Vim如此出色的多个原因之一:您可以制作自己的IDE,以完全满足您的需求和喜好!
如果您需要一些具体的配置示例,可以看看我的一般vim配置。您也可以查看我的一些特定插件的配置。
最后,如果您在配置这些插件时遇到困难,可以发表评论。我将竭诚为您服务。
免责声明
我在Arch Linux上将这些插件与Neovim一起使用,这意味着我不知道它们是否可以在MacO或Windows上运行。应该,但是要知道我从未测试过。
Neovim和Vim实际上是几乎相同的软件,这就是为什么我在本文中以全局名称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)设置的索引。
建议为每个项目创建一个标记文件:
- 您将能够轻松跳转到方法和类定义(
ctrl + ]
默认情况下使用) - 此列表中的某些插件需要具有标记文件才能工作
为了生成此文件,有两种解决方案: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
我定义的函数的一些特殊配置Symfony
和mySuperProject
然后我可以连接到该项目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时遇到任何问题或疑问,请在评论中让我知道。
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »