Skip to content

Instantly share code, notes, and snippets.

@marcelbeumer
Last active December 23, 2015 06:08
Show Gist options
  • Save marcelbeumer/6591578 to your computer and use it in GitHub Desktop.
Save marcelbeumer/6591578 to your computer and use it in GitHub Desktop.
Work in progress VIM GotoFile enhancer
function! EditIncludeOnLine()
let line = getline('.')
if exists("b:edit_include_line_parser")
let GrabFn = function(b:edit_include_line_parser)
let line = call(GrabFn, [line])
endif
let path = line
if exists("b:edit_include_path_resolver")
let ResolveFn = function(b:edit_include_path_resolver)
let path = call(ResolveFn, [line])
endif
let path = findfile(path)
exec 'e ' . path
endfunction
function! EditIncludeBufferSetup(pathResolver, lineParser)
let lineParser = 'DefaultIncludeLineParser'
if strlen(a:lineParser) > 0
let lineParser = a:lineParser
endif
exec 'let b:edit_include_line_parser=''' . lineParser . ''''
if strlen(a:pathResolver) > 0
exec 'let b:edit_include_path_resolver=''' . a:pathResolver . ''''
exec 'setlocal includeexpr=' . a:pathResolver . '(v:fname)'
endif
endfunction
function! DefaultIncludeLineParser(line)
return substitute(a:line, '.\{-}[''"]\(.\{-}\)[''"].*', '\1', 'g')
endfunction
function! PHPEditIncludeLineParser(line)
let line = substitute(a:line, '.\{-}use\s\+\(\S*\);.*', '\1', 'g')
return DefaultIncludeLineParser(line)
endfunction
function! PHPEditIncludePathResolver(fname)
let fname = a:fname
let fname = TwigEditIncludePathResolver(fname)
return substitute(fname, '\', '/', 'g')
endfunction
function! TwigEditIncludePathResolver(fname)
let fname = a:fname
let fname = substitute(fname, ':', '/', 'g')
let fname = substitute(fname, '^InterNations\(.\{-}\)Bundle', '\1Bundle/Resources/views/', 'g')
return fname
endfunction
function! PHPSettings()
call EditIncludeBufferSetup('PHPEditIncludePathResolver', 'PHPEditIncludeLineParser')
setlocal suffixesadd+=.php
setlocal path+=app-new/src/**
setlocal path+=vendor/sensio/**
setlocal path+=vendor/twig/**
setlocal path+=vendor/symfony/**
setlocal path+=vendor/doctrine/**
setlocal tags=tags.php,tags.vendor.php
endfunction
function! HTMLTwigSettings()
call EditIncludeBufferSetup('TwigEditIncludePathResolver', '')
setlocal path+=app-new/src/**
endfunction
function! JavaScriptSettings()
call EditIncludeBufferSetup('', '')
setlocal suffixesadd+=.js
setlocal path+=app-new/src/**
setlocal tags=tags.js,tags.vendor.js
endfunction
autocmd FileType php call PHPSettings()
autocmd FileType javascript call JavaScriptSettings()
autocmd FileType html.twig call HTMLTwigSettings()
map <leader>g :call EditIncludeOnLine()<CR>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment