Coder Social home page Coder Social logo

vim-php-namespace's Introduction

Goal

vim-php-namespace is a vim plugin for inserting "use" statements automatically.

Features

Import classes, functions, traits, or enums (add use statements)

Imports the symbol under the cursor by adding the corresponding use statement.

To use this feature, add the following mappings in ~/.vimrc:

function! IPhpInsertUse()
    call PhpInsertUse()
    call feedkeys('a',  'n')
endfunction
autocmd FileType php inoremap <Leader>u <Esc>:call IPhpInsertUse()<CR>
autocmd FileType php noremap <Leader>u :call PhpInsertUse()<CR>

Then, typing \u in normal or insert mode will import the symbol under the cursor.

<?php
new Response<-- cursor here or on the name; hit \u now to insert the use statement

Make symbol fully qualified

Expands the symbol under the cursor to its fully qualified name.

To use this feature, add the following mappings in ~/.vimrc:

function! IPhpExpandClass()
    call PhpExpandClass()
    call feedkeys('a', 'n')
endfunction
autocmd FileType php inoremap <Leader>e <Esc>:call IPhpExpandClass()<CR>
autocmd FileType php noremap <Leader>e :call PhpExpandClass()<CR>

Then, typing \e in normal or insert mode will expand the symbol to its fully qualified name.

<?php
$this->getMock('RouterInterface<-- cursor here or on the name; type \e now to expand the class name'

Sort existing use statements alphabetically

To use this feature, add the following mappings in ~/.vimrc:

autocmd FileType php inoremap <Leader>s <Esc>:call PhpSortUse()<CR>
autocmd FileType php noremap <Leader>s :call PhpSortUse()<CR>

Then, hitting \s in normal or insert mode will sort use statements.

It is also possible to sort statements automatically after a PhpInsertUse() by defining the following variable:

let g:php_namespace_sort_after_insert = 1

Installation:

Using pathogen

git clone git://github.com/arnaud-lb/vim-php-namespace.git ~/.vim/bundle/vim-php-namespace

Using vim-plug

Add to vimrc:

Plug 'arnaud-lb/vim-php-namespace'

Run command in vim:

:PlugInstall

Using vundle

Add to vimrc:

Bundle 'arnaud-lb/vim-php-namespace'

Run command in vim:

:BundleInstall

Manual installation

Download and copy plugin/phpns.vim to ~/.vim/plugin/

Post installation

Generate a tag file

The plugin makes use of tag files. If you don't already use a tag file you may create one with the following command; after having installed the ctags package:

ctags -R --PHP-kinds=cfi

Traits

[universal-ctags] supports traits natively (with --php-kinds=cfit).

If you can't use universal-ctags, the --regex-php argument allows to extract traits:

ctags -R --PHP-kinds=cfi --regex-php="/^[ \t]*trait[ \t]+([a-z0_9_]+)/\1/t,traits/i"

You can also create a ~/.ctags file with the following contents:

--regex-php=/^[ \t]*trait[ \t]+([a-z0_9_]+)/\1/t,traits/i

Note that using --regex-php= is 10x slower than using universal-ctags.

Enums

The --regex-php argument can be used to extract enums:

ctags -R --PHP-kinds=cfi --regex-php="/^[ \t]*enum[ \t]+([a-z0_9_]+)/\1/e,enum/i"

You can also create a ~/.ctags file with the following contents:

--regex-php=/^[ \t]*enum[ \t]+([a-z0_9_]+)/\1/e,enum/i

Automatically updating tags

The AutoTags plugin can update the tags file every time a file is created or modified under vim.

To keep updates fast, AutoTags won't operate if the tags file exceeds 7MB. To avoid exceeding this limit on projects with many dependencies, use a separate tags file for dependencies:

# dependencies tags file (index only the vendor directory, and save tags in ./tags.vendors)
ctags -R --PHP-kinds=cfi -f tags.vendors vendor

# project tags file (index only src, and save tags in ./tags; AutoTags will update this one)
ctags -R --PHP-kinds=cfi src

Do not forget to load both files in vim:

" ~/.vimrc
set tags+=tags,tags.vendors

Key mappings

See Features section for adding key mappings.

The <Leader> key usually is \.

Credits:

This was originally based on a similar script for java packages found at http://vim.wikia.com/wiki/Add_Java_import_statements_automatically (in comments).

vim-php-namespace's People

Contributors

arnaud-lb avatar greg0ire avatar jdeniau avatar docteurklein avatar conradkleinespel avatar storyn26383 avatar usox avatar hlissner avatar jrean avatar jfortunato avatar mikedfunk avatar phillaf avatar ornicar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.