Funciones de edición avanzada en Vim para PHP
Cuando inicias en Vim te encuentras con la ardua tarea de comenzar a buscar las equivalencias de aquellas funciones de edición avanzada que tienes en IDE's como PhpStorm, Visual Studio Code, Sublime Text, y otros. En vim como ya sabes todo se hace a través de plugins, el día de hoy verás cómo puedes utilizar algunas de las funciones más complejas mediante el plugin phpactor.
Instalación
Para instalar este plugin debes instalar el repo desde Github. Lo ideal es colocarlo en una carpeta del usuario con el que estés logueado. Puedes utilizar la siguiente serie de comandos para instalar el plugin en tu carpeta home.
DIR=~
cd $DIR
git clone https://github.com/phpactor/phpactor.git
cd phpactor && composer install
Después de esto debes crear un enlace simbólico del comando phpactor hacia la carpeta de binarios del sistema.
cd /usr/local/bin
sudo ln -s $DIR/phpactor/bin/phpactor phpactor
Finalmente podrás agregarlo al bloque de plugins en tu archivo ~/.vimrc. Si utilizar vim-plug deberás agregar la siguiente línea.
Plug 'phpactor/phpactor', {'for': 'php', 'branch': 'master', 'do': 'composer install --no-dev -o'}
Uso
Una vez instalado puedes comenzar a utilizar los comandos personalizados de phpactor. Por ejemplo, si quisieras ir a la definción de una función deberías situarte sobre ella y ejecutar el siguiente comando:
:PhpactorGotoDefinition
Para buscar todas las referencias de una función o método puedes utilizar el comando
:PhpactorFindReferences
Así mismo, para importar una clase te situas en ella y ejecutas el comando
:PhpactorImportClass
Todo esto y mucho más lo puedes encontrar en la documentación oficial de phpactor.
Atajos
Puede parecer un poco engorroso digitar cada uno de los comandos de los que dispone phpactor y realmente lo es. Para mejorar esto puedes crearte unos atajos de teclado tal y como yo lo he hecho. Observa por ejemplo como utilizo las teclas CTRL + B, F2, y F3 para hacer las mismas acciones que los comandos vistos anteriormente.
map <C-b> :PhpactorGotoDefinition<CR>
map <F2> :PhpactorFindReferences<CR>
map <F3> :PhpactorImportClass<CR>