" ----- Emulate 'gf' but recognize :line format ----- function! GotoFile(w) let curword = expand("") if (strlen(curword) == 0) return endif let matchstart = match(curword, ':\d\+$') if matchstart > 0 let pos = '+' . strpart(curword, matchstart+1) let fname = strpart(curword, 0, matchstart) else let pos = "" let fname = curword endif " check exists file. if filereadable(fname) let fullname = fname else " try find file with prefix by working directory let fullname = getcwd() . '/' . fname if ! filereadable(fullname) " the last try, using current directory based on file opened. let fullname = expand('%:h') . '/' . fname endif endif " Open new window if requested if a:w == "new" new endif " Use 'find' so path is searched like 'gf' would execute 'find ' . pos . ' ' . fname endfunction set isfname+=: " include colon in filenames " Override vim commands 'gf', '^Wf', '^W^F' nnoremap gf :call GotoFile("") nnoremap f :call GotoFile("new") nnoremap :call GotoFile("new")