Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion autoload/godot.vim
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,14 @@ endfunc

" Return project path
func! s:project_path() abort
return fnamemodify(findfile("project.godot", ".;"), ":h")
" Search from multiple locations so we work even from res:// paths
let dirs = ['.', expand("#:p:h")]
for d in dirs
let root = findfile("project.godot", d ..";")
if filereadable(root)
return fnamemodify(root, ":h")
endif
endfor
endfunc


Expand Down Expand Up @@ -142,3 +149,32 @@ func! godot#fzf_run_scene(...)
\}, 0))

endfunc

func! godot#convert_res_to_file_path(res_path) abort
let fpath = a:res_path

" Can't use root in substitute because if it contains backslash directory
" separators, they'll be treated as escapes.
let trimmed = substitute(fpath, "^res:/", "", "")

let g:test_david = ["godot#convert_res_to_file_path", fpath, trimmed, s:project_path()]
if len(trimmed) < len(fpath)
let fpath = s:project_path() .. trimmed
if filereadable(fpath)
return fpath
endif
endif

return a:res_path
endfunc


func! godot#edit_res_path(res_path) abort
let fpath = godot#convert_res_to_file_path(a:res_path)
if filereadable(fpath)
exec "keepalt edit" fpath
else
exec "noautocmd edit" a:res_path
endif
endfunc

3 changes: 3 additions & 0 deletions ftplugin/gdscript.vim
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ let s:keepcpo = &cpo
set cpo&vim

let b:undo_ftplugin = 'setlocal cinkeys<'
\ . '|setlocal includeexpr<'
\ . '|setlocal indentkeys<'
\ . '|setlocal commentstring<'
\ . '|setlocal suffixesadd<'
Expand Down Expand Up @@ -59,6 +60,8 @@ nnoremap <silent><buffer> [[ :<c-u>call <sid>section_start(1, v:count1)<CR>
xmap <silent><buffer><expr> ]] "\<esc>".v:count1.']]m>gv'
xmap <silent><buffer><expr> [[ "\<esc>".v:count1.'[[m>gv'

setlocal includeexpr=godot#convert_res_to_file_path(v:fname)


let &cpo = s:keepcpo
unlet s:keepcpo
4 changes: 4 additions & 0 deletions plugin/godot.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
augroup godot
au! *
autocmd BufReadCmd res://* ++nested call godot#edit_res_path(expand("<amatch>"))
augroup END