Phpactor VIM Plugin

Installation

Prerequisites:

It is recommended (but not necessary) for you to use a VIM plugin manager. In this document we will use the vim-plug plugin manager, but other plugin managers are quite similar.

Require Phpactor in your VIM configuration file (e.g. ~/.vimrc or ~/.config/nvim/init.vim when using Neovim):

Plug 'phpactor/phpactor', {'for': 'php', 'do': 'composer install'}

Then update your plugins:

:PlugInstall

If you need to install the dependencies manually, then:

$ cd ~/.vim/plugged/phpactor
$ composer install
Make a Pull Request to improve this installation procedure!

Now open a PHP file and issue the following command :call phpactor#Status():

Support
-------
[✔] Composer detected - faster class location and more features!
[✔] Git detected - enables faster refactorings in your repository scope!
[✔] XDebug is disabled. XDebug has a negative effect on performance.

Config files
------------
[✔] /home/daniel/www/phpactor/phpactor/.phpactor.yml
[✔] /home/daniel/.config/phpactor/phpactor.yml
[✘] /etc/xdg/phpactor/phpactor.yml

Phpactor works best with Composer - but much functionality including auto-completion can still work (sometimes slowly depending on project size).

Troubleshooting

E117: Unknown function: phpactor#Status:

Vim-plug and most other package managers for Vim will lazy-load Phpactor when it's needed, i.e. when opening a PHP file. If you get this error, open a PHP file and run the command again.

Composer not found or Git not detected:

The Git and Composer checks are referring to the current "workspace" (i.e. where you started Vim from). If you've already setup Git and Composer for your project, ensure you are starting Vim from the project directory to enable detection.

Updating

Updating Phpactor from VIM is easy:

:call phpactor#Update()
Note that if the update included changes to the VIM plugin you will currently need to either re-source (`:source ~/path/to/phpactor/plugin/phpactor.vim`) the plugin or reload VIM (pull requests are open!).

If you are feeling dangerous, you may choose to track the develop branch, by specifying a branch name in your VIM configuration file:

let g:phpactorBranch = "develop"

Keyboard Mappings

The Phpactor plugin will not automatically assume any shortcuts, copy the following configuration into your .vimrc:

" Include use statement
nmap <Leader>u :call phpactor#UseAdd()<CR>

" Invoke the context menu
nmap <Leader>mm :call phpactor#ContextMenu()<CR>

" Invoke the navigation menu
nmap <Leader>nn :call phpactor#Navigate()<CR>

" Goto definition of class or class member under the cursor
nmap <Leader>o :call phpactor#GotoDefinition()<CR>

" Show brief information about the symbol under the cursor
nmap <Leader>K :call phpactor#Hover()<CR>

" Transform the classes in the current file
nmap <Leader>tt :call phpactor#Transform()<CR>

" Generate a new class (replacing the current file)
nmap <Leader>cc :call phpactor#ClassNew()<CR>

" Extract expression (normal mode)
nmap <silent><Leader>ee :call phpactor#ExtractExpression(v:false)<CR>

" Extract expression from selection
vmap <silent><Leader>ee :<C-U>call phpactor#ExtractExpression(v:true)<CR>

" Extract method from selection
vmap <silent><Leader>em :<C-U>call phpactor#ExtractMethod()<CR>

See the Refactorings chapter for more functions you can map shortcuts to.

Phpactor requires at least PHP 7.0. If you use a different version of PHP locally, you may need to target a new version of PHP - add the following to your .vimrc to change the PHP binary:

let g:phpactorPhpBin = "/usr/bin/local/php6.0"

Configuration

The plugin has some configuration options:

let g:phpactorPhpBin = 'php'
let g:phpactorBranch = 'master'
let g:phpactorOmniAutoClassImport = v:true
  • g:phpactorPhpBin: PHP executable to use.
  • g:phpactorBranch: Phpactor branch (default is master, use develop for bleeding edge).
  • g:phpactorOmniAutoClassImport: Automatically import classes when completing class names with OmniComplete.

Extensions

You can manage your Phpactor extensions from with VIM:

call phpactor#ExtensionList()
call phpactor#ExtensionInstall()
call phpactor#ExtensionRemove()

Note that these commands are not very verbose. For increased verbosity execute the commands from the command line (as detailed here.

Completion

Omni-completion

Omni-completion (Screenshot) is VIM's built-in auto-completion mechanism.

Add the following to your .vimrc in order to use Phpactor for omni-completion (for PHP files):

autocmd FileType php setlocal omnifunc=phpactor#Complete

To invoke omni complete in insert mode <C-x><C-o> (ctrl-x then ctrl-o). See :help compl-omni.

For case sensitive searching, set

let g:phpactorCompletionIgnoreCase = 0

Omni complete can also provide feedback when something fails to complete, this can be useful, enable it with:

let g:phpactorOmniError = v:true

Completion plugins

Completion plugins provide a significantly better completion experience.

Neovim Completion Manager (NCM)

deprecated, use NCM2 below

The Neovim Completion Manager add this to your (e.g. ~/.config/nvim/init.vim) (NCM) is a very fast completion manager for Neovim, install using the Plug plugin manager:

Plug 'roxma/nvim-completion-manager'
Plug 'phpactor/ncm-phpactor'

NCM2

The NCM2 is the successor to NCM.

See the README file for instructions on installing NCM2 and the Phpactor plugin.

Deoplete

deoplete.nvim is a completion plugin for both standard VIM Neovim, install it and the Phpactor integration as follows:

Plug 'Shougo/deoplete.nvim'
Plug 'kristijanhusak/deoplete-phpactor'

Context Menu

The context menu is the main point of contact with Phpactor. Invoke it on any class, member, variable, method call, or anything really.

If you move over a method and invoke the context menu with :call phpactor#ContextMenu() (or with <Leader>mm as per the configuration above) you should see something like the following:

Method "execute":
[r]eplace_references, (f)ind_references, (g)enerate_method, g(o)to_definition: