All Projects → swekaj → Php Foldexpr.vim

swekaj / Php Foldexpr.vim

Licence: mit
Vim folding for PHP with foldexpr

Labels

Projects that are alternatives of or similar to Php Foldexpr.vim

Vim Stylefmt
Format your stylesheets using stylefmt inside Vim
Stars: ✭ 35 (-12.5%)
Mutual labels:  viml
Snipmate
TextMate-style snippets for Vim
Stars: ✭ 36 (-10%)
Mutual labels:  viml
Csapprox
Make gvim-only colorschemes work transparently in terminal vim
Stars: ✭ 38 (-5%)
Mutual labels:  viml
Vim Iawriter
iA Writer vim colorscheme
Stars: ✭ 35 (-12.5%)
Mutual labels:  viml
Tmux.vim
Tmux vim syntax
Stars: ✭ 36 (-10%)
Mutual labels:  viml
Unite Workflow
unite.vim extentions for convenience similar to alfred-workflow
Stars: ✭ 37 (-7.5%)
Mutual labels:  viml
Davesdots
Stars: ✭ 34 (-15%)
Mutual labels:  viml
Env
Stars: ✭ 39 (-2.5%)
Mutual labels:  viml
Chapa.vim
VIM plugin to move (or visually select) the next/previous class, method or function
Stars: ✭ 36 (-10%)
Mutual labels:  viml
Cobalt2 Vim Theme
Vim port of cobalt2 sublime theme
Stars: ✭ 38 (-5%)
Mutual labels:  viml
Spink
Syntax highlighting for Xterm/gVim/MacVim.
Stars: ✭ 36 (-10%)
Mutual labels:  viml
Vim Fontsize
Adjust Gvim font size via keypresses
Stars: ✭ 36 (-10%)
Mutual labels:  viml
Vim Easytags
Automated tag file generation and syntax highlighting of tags in Vim
Stars: ✭ 990 (+2375%)
Mutual labels:  viml
Objective Vim
Quickly bootstrap vim for Objective-C hacking
Stars: ✭ 35 (-12.5%)
Mutual labels:  viml
Vim Hardy
Arduino IDE intregation for vim.
Stars: ✭ 39 (-2.5%)
Mutual labels:  viml
Vim Blackboard
A port of the Blackboard theme from TextMate to Vim.
Stars: ✭ 34 (-15%)
Mutual labels:  viml
Vim Opengrok
opengrok interface for vim
Stars: ✭ 37 (-7.5%)
Mutual labels:  viml
Slack Memo Vim
Simple memo manager with Vim using Slack.
Stars: ✭ 40 (+0%)
Mutual labels:  viml
Github Commit Comment.vim
Vim Plugin for Commit Comment of GitHub
Stars: ✭ 39 (-2.5%)
Mutual labels:  viml
Minibufexpl.vim
Elegant buffer explorer - takes very little screen space
Stars: ✭ 991 (+2377.5%)
Mutual labels:  viml

php-foldexpr.vim

Vim folding for PHP with foldexpr

Configuration

  • b:phpfold_use = 1 - Fold groups of use statements in the global scope.
  • b:phpfold_group_iftry = 0 - Fold if/elseif/else and try/catch/finally blocks as a group, rather than each part separate.
  • b:phpfold_group_args = 1 - Group function arguments split across multiple lines into their own fold.
  • b:phpfold_group_case = 1 - Fold case and default blocks inside switches.
  • b:phpfold_heredocs = 1 - Fold HEREDOCs and NOWDOCs.
  • b:phpfold_docblocks = 1 - Fold DocBlocks.
  • b:phpfold_doc_with_funcs = 1 - Fold DocBlocks. Overrides b:phpfold_docblocks.
  • b:phpfold_text = 1 - Enable the custom foldtext option.
  • b:phpfold_text_right_lines = 1 - Display the line count on the right instead of the left.
  • b:phpfold_text_percent = 0 - Display the percentage of lines the fold represents.

Installation

  • Manual installation:
    • Copy the files to your .vim directory (_vimfiles on Windows).
  • Pathogen
    • cd ~/.vim/bundle && git clone git://github.com/swekaj/php-foldexpr.vim
  • Vundle
    1. Add Bundle 'swekaj/php-foldexpr.vim' to .vimrc
    2. Run :BundleInstall
  • NeoBundle
    1. Add NeoBundle 'swekaj/php-foldexpr.vim' to .vimrc
    2. Run :NeoBundleInstall
  • vim-plug
    1. Add Plug 'swekaj/php-foldexpr.vim' to .vimrc
    2. Run :PlugInstall

Option Effects

There are two options for customizing how the fold text displays: b:phpfold_text_right_lines and b:phpfold_text_percent.

When b:phpfold_text_right_lines is true, the number of lines folded along with the dashes that indicate the fold level are aligned on the right side of the screen. b:phpfold_text_right_lines = 0:

class ClassName
{
+--  4 lines: public foo() {...}-------------------------------------------
+--  6 lines: public bar() {...}-------------------------------------------
+-- 12 lines: public baz() {...}-------------------------------------------
}

b:phpfold_text_right_lines = 1:

class ClassName
{
    public foo() {...}----------------------------------------  4 lines +--
    public bar() {...}----------------------------------------  6 lines +--
    public baz() {...}---------------------------------------- 12 lines +--
}

When b:phpfold_text_percent is true, the percentage of the total lines the fold represents is displayed alongside the line count: b:phpfold_text_right_lines = 0:

class ClassName
{
+--  2 lines [ 8%]: public foo() {...}-------------------------------------
+--  8 lines [32%]: public bar() {...}-------------------------------------
+-- 12 lines [48%]: public baz() {...}-------------------------------------
}

b:phpfold_text_right_lines = 1:

class ClassName
{
    public foo() {...}----------------------------------  2 lines [ 8%] +--
    public bar() {...}----------------------------------  8 lines [32%] +--
    public baz() {...}---------------------------------- 12 lines [48%] +--
}

Folding Examples

Namespaces alias and imports

When b:phpfold_use is enabled, consecutive use statements become folded.

Given:

use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

With the default fold text:

+--  3 lines: use FooInterface;---

With the plugin's fold text:

+- 3 lines: use FooInterface, Bar, BazClass---

Classes

Classes are folded from the class keyword to the closing }.

Given:

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}

With the default fold text:

+--  7 lines: class ClassName extends ParentClass implements---

With the plugin's fold text:

+- 7 lines: class ClassName extends ParentClass implements \ArrayAccess, \Countable, \Serializable {...}---

Methods

When b:phpfold_doc_with_funcs is false, methods are folded from the function keyword to the method's closing }.

Given:

class ClassName
{
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {
        // method body
    }
}

With the default fold text:

class ClassName
{
+---  4 lines: public function fooBarBaz($arg1, &$arg2, $arg3 = [])---
}

With the plugin's fold text:

class ClassName
{
+-- 4 lines: public fooBarBaz() {...}---
}

See [DocBlocks] for how b:phpfold_doc_with_funcs works when true.

Method Arguments

When method arguments are listed on multiple lines and b:phpfold_group_args is true, the argument list is folded an additional level.

Given:

class ClassName
{
    public function aVeryLongMethodName(
        ClassTypeHint $arg1,
        &$arg2,
        array $arg3 = []
) {
        // method body
}

With the default fold text:

class ClassName
{
    public function aVeryLongMethodName(
+----  3 lines: ClassTypeHint $arg1,------
    ) {
        // method body
    }
}

With the plugin's fold text:

class ClassName
{
    public function aVeryLongMethodName(
+--- 3 lines: ClassTypeHint $arg1, &$arg2, array $arg3 = []---
    ) {
        // method body
    }
}

Method and Function Calls

When arguments passed to a method or functionc all are listed on multiple lines, the list is folded from the method name to the closing ).

Given:

$foo->bar(
    $longArgument,
    $longerArgument,
    $muchLongerArgument
);

With the default fold text:

+--  5 lines: $foo->bar(---

With the plugin's fold text:

+- 5 lines:  $foo->bar(...)---

If...Elseif...Else Statements

When b:phpfold_group_iftry is false, if, elseif, and else statements are folded individually.

Given:

if ($expr1) {
    // if body
} elseif ($expr2) {
    // elseif body
} else {
    // else body;
}

With the default fold text:

+--  2 lines: if (expr1) {--------
+--  2 lines: elseif ($expr2) {---
+--  3 lines: else {--------------

With the plugin's fold text:

+- 2 lines: if (expr1) {...}--------
+- 2 lines: elseif ($expr2) {...}---
+- 3 lines: else {...}--------------

When b:phpfold_group_iftry is true, if, elseif, and else statements are folded as a group.

Given:

if ($expr1) {
    // if body
} elseif ($expr2) {
    // elseif body
} else {
    // else body;
}

With the default fold text:

+--  7 lines: if (expr1) {---

With the plugin's fold text:

+- 7 lines: if (expr1) {...}---

Switch Statements

The switch statement is folded as a whole, with each case block in its own fold. Empty case blocks will be folded with the following blocks.

Fold level 0:

Given:

switch ($expr) {
    case 0:
        echo 'First case, with a break';
        break;
    case 0.5:
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}

With the default fold text:

+--  17 lines: switch ($expr) {---

With the plugin's fold text:

+- 17 lines: switch ($expr) {...}---

Fold level 1:

Given:

switch ($expr) {                                    
    case 0:                                         
        echo 'First case, with a break';            
        break;                                      
    case 0.5:                                       
    case 1:                                         
        echo 'Second case, which falls through';    
        // no break                                 
    case 2:                                         
    case 3:                                         
    case 4:                                         
        echo 'Third case, return instead of break'; 
        return;                                     
    default:                                        
        echo 'Default case';                        
        break;                                      
}                                                   

With the default fold text:

switch ($expr) {             
+---  3 lines: case 0: ------
+---  4 lines: case 0.5: ----
+---  5 lines: case 2: ------
+---  3 lines: default: -----
}                            

With the plugin's fold text:

switch ($expr) {
+-- 3 lines: case 0:-------------------
+-- 4 lines: case 0.5: case 1:---------
+-- 5 lines: case 2: case 3: case 4:---
+-- 3 lines: default:------------------
}

While, Do While

Given:

while ($expr) {
    // structure body
}

do {
    // structure body;
} while ($expr);

With the default fold text:

+--  3 lines: while ($expr) {---

+--  3 lines: do {---------------

With the plugin's fold text:

+- 3 lines: while ($expr) {...}-------

+- 3 lines: do {...} while ($expr);---

For

Given:

for ($i = 0; $i < 10; $i++) {
    // for body
}

With the default fold text:

+--  3 lines: for ($i = 0; $i < 10; $i++) {---

With the plugin's fold text:

+- 3 lines: for ($i = 0; $i < 10; $i++) {...}---

Foreach

Given:

foreach ($iterable as $key => $value) {
    // for body
}

With the default fold text:

+--  3 lines: foreach ($iterable as $key => $value) {---

With the plugin's fold text:

+- 3 lines: foreach ($iterable as $key => $value) {...}---

Try, Catch

When b:phpfold_group_iftry is false, try, catch, and finally statements are folded individually.

Given:

try {
    // try body
} catch (FirstExceptionType $e) {
    // catch body
} catch (OtherExceptionType $e) {
    // catch body
} finally {
    // finally body
}

With the default fold text:

+--  2 lines: try { -----------------------------
+--  2 lines: catch (FirstExceptionType $e) { ---
+--  3 lines: catch (OtherExceptionType $e) { ---
+--  3 lines: finally {--------------------------

With the plugin's fold text:

+- 2 lines: try {...}------------------------------
+- 2 lines: catch (FirstExceptionType $e) {...}----
+- 3 lines: catch (OtherExceptionType $e) {...}----
+- 3 lines: finally {...}--------------------------

When b:phpfold_group_iftry is true, try, catch, and finally statements are folded as a group.

Given:

try {
    // try body
} catch (FirstExceptionType $e) {
    // catch body
} catch (OtherExceptionType $e) {
    // catch body
} finally {
    // finally body
}

With the default fold text:

+--  7 lines: try { ---

With the plugin's fold text:

+- 7 lines: try {...} ---

Closures

Closures are folded from the function keyword to the closing }.

Given:

$closureWithNoArgs = function () {
    // body
};

$closureWithArgs = function ($arg1, $arg2) {
    // body
};

$closureWithArgsAndVars = function ($arg1) use ($var1) {
    // body
};

With the default fold text:

+--  3 lines: $closureWithNoArgs = function () {-------------------------

+--  3 lines: $closureWithArgs = function ($arg1, $arg2) {---------------

+--  3 lines: $closureWithArgsAndVars = function ($arg1) use ($var1) {---

With the plugin's fold text:

+- 3 lines: $closureWithNoArgs = function () {...};-------------------------

+- 3 lines: $closureWithArgs = function ($arg1, $arg2) {...};---------------

+- 3 lines: $closureWithArgsAndVars = function ($arg1) use ($var1) {...};---

Closure Arguments and Variables

If b:phpfold_group_args is true, then when argument and variable lists are split across multiple lines they are folded an additional level individually.

Given:

$longArgs_noVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) {
   // body
};

$noArgs_longVars = function () use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // body
};

$longArgs_longVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // body
};

$longArgs_shortVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) use ($var1) {
   // body
};

$shortArgs_longVars = function ($arg) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // body
};

With the default fold text:

+--  7 lines: $longArgss_noVars = function (----------------

+--  7 lines: $lnoArgs_longVars = function () use (---------

+-- 11 lines: $longArgs_longVars = function (---------------

+--  7 lines: $longArgs_shortVars = function (--------------

+--  7 lines: $shortArgs_longVars = function ($arg) use (---

With the plugin's fold text:

+-  7 lines: $longArgs_noVars = function (...) {...};------------------
-
+-  7 lines: $noArgs_longVars = function () use (...) {...};-----------

+- 11 lines: $longArgs_longVars = function (...) use (...) {...};------

+-  7 lines: $longArgs_shortVars = function (...) use ($var1) {...};---

+-  7 lines: $shortArgs_longVars = function ($arg) use (...) {...};----

Arrays

Arrays are folded from the opening array( or [ to the closing ) or ].

Given:

$array = array(
    'item'1,
    'item2'
);

$array = [
    'item1',
    'item2'
];

With the default fold text:

+--  4 lines: $array = array(---

+--  4 lines: $array = [--------

With the plugin's fold text:

+- 4 lines: $array = array(...);---

+- 4 lines: $array = [...]----------

DockBlocks

When b:phpfold_docblocks is enabled and b:phpfold_doc_with_funcs is disabled /** */ comment blocks are folded from the /** to the */.

Given:

/**
 * Summary information.
 */

/**
 * DocBlock Summary that
 * spans multiple lines.
 */

With the default fold text:

+--  3 lines: /**----

+--  4 lines: /**----

With the plugin's fold text:

+- 3 lines: Summary information.--------------------------

+- 4 lines: DocBlock Summary that spans multiple lines.---

If b:phpfold_doc_with_funcs is enabled, the fold begins with /** and ends with the function's }.

Given:

class ClassName
{
    /**
     * Summary information.
     */
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {
        // method body
    }
}

With the default fold text:

class ClassName
{
+--  7 lines: /**----
}

With the plugin's fold text:

class ClassName
{
+- 7 lines: public fooBarBaz() {...} - Summary information.---
}

HEREDOCs and NOWDOCs

HEREDOCs and NOWDOCs are folded from the <<< to the closing keyword.

Given:

$heredoc = <<<EOF
heredoc
text
EOF;

With the default fold text:

+--  4 lines: $heredoc = <<<EOF---

With the plugin's fold text:

+- 4 lines: $heredoc = <<<EOF...---
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].