Växla mellan Controller och Spec i Vim när du använder PhpSpec

PhpSpec kommer bli det jag använder under 2015 (och förmodligen en lång tid framåt) för att testa min kod på lite lägre nivåer än vad Codeception gör. Det som är fint med PhpSpec är att kod genereras åt dig medan du skriver och kör dina tester. Perfekt för att få en så smal kod som möjligt och spara lite tid.

Eftersom jag sitter och kodar på en ganska liten skärm och gärna inte kör med split screens i varken Vim eller Tmux så växlar jag mycket mellan mina php-filer och spec-filer. Därför tyckte jag det vore skönt med en function i Vim som gör detta på ett smidigt sätt.

Med det i bakhuvudet tryckte jag in följande i min .vimrc:

" switch between controller and spec file "
map <leader>sw :SwitchBetweenControllerAndSpec

command! SwitchBetweenControllerAndSpec call SwitchBetweenControllerAndSpec()

function! SwitchBetweenControllerAndSpec()
    let path = expand('%:p')
    let srcpath = './src'
    let specpath = './spec'
    " are we in a spec file? "
    let matches = matchlist(path, printf('^%s\(.\+\)Spec\.php$', fnamemodify(specpath, ':p')))
    if len(matches) > 0
      let file = fnamemodify(printf('%s/%s.php', srcpath, matches[1]), ':p')
      if bufexists(file)
        execute(printf('buffer %s', file))
        return
      endif
      execute(printf('edit %s', file))
    endif
    " are we in a php file? "
    let matches = matchlist(path, printf('^%s\(.\+\)\.php$', fnamemodify(srcpath, ':p')))
    if len(matches) > 0
      let file = fnamemodify(printf('%s/%sSpec.php', specpath, matches[1]), ':p')
      if bufexists(file)
        execute(printf('buffer %s', file))
        return
      endif
      execute(printf('edit %s', file))
    endif
    echo 'Current file is not a spec nor php file.'
endfunction

Detta är skrivet för att passa min Symfony2 setup men du kan enkelt bestämma vart din mapp för src och spec är genom att ändra värdet på srcpath och specpath. Om jag minns rätt så använder Laravel ./app och inte ./src och då skulle du kunna ändra srcpath till ./app för att allt ska rulla på igen.

Något jag ska göra framöver är att göra exakt samma sak fast för Behat och alla de olika filerna du vill växla mellan. Självklart kan du applicera detta på vilka filer som helst genom att bara ändra ändelserna i koden.

Tips på förbättringar? Skriv en kommentar!

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *