Skip to content

Instantly share code, notes, and snippets.

@mtyurt
Last active April 20, 2023 01:21
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mtyurt/3529a999af675a0aff00eb14ab1fdde3 to your computer and use it in GitHub Desktop.
Save mtyurt/3529a999af675a0aff00eb14ab1fdde3 to your computer and use it in GitHub Desktop.
With pearofducs/ansible-vim plugin installed, following mapping behaves like `gf`, navigates to role under cursor's tasks/main.yml file. Ideal to be used in playbooks
" vim-plug example
call plug#begin('~/.vim/plugged')
Plug 'pearofducks/ansible-vim'
call plug#end()
let g:ansible_goto_role_paths = './roles,../_common/roles'
function! FindAnsibleRoleUnderCursor()
if exists("g:ansible_goto_role_paths")
let l:role_paths = g:ansible_goto_role_paths
else
let l:role_paths = "./roles"
endif
let l:tasks_main = expand("<cfile>") . "/tasks/main.yml"
let l:found_role_path = findfile(l:tasks_main, l:role_paths)
if l:found_role_path == ""
echo l:tasks_main . " not found"
else
execute "edit " . fnameescape(l:found_role_path)
endif
endfunction
au BufRead,BufNewFile */ansible/*.yml nnoremap <leader>gr :call FindAnsibleRoleUnderCursor()<CR>
au BufRead,BufNewFile */ansible/*.yml vnoremap <leader>gr :call FindAnsibleRoleUnderCursor()<CR>
@mtyurt
Copy link
Author

mtyurt commented May 13, 2020

Showcase:
render1589373214301

@rjshrjndrn
Copy link

rjshrjndrn commented May 16, 2020

Thanks for the snippet. But why are we having 2 au lines at the end. And some people, atleast me, uses yaml as the extention.

    au BufEnter,BufNewFile */ansible/*.y[a]\\\{0,1\}ml nnoremap <silent> <leader>gr :call FindAnsibleRoleUnderCursor()<CR>

I think this will support both yml and yaml
BufEnter will be more efficient than BufRead as we've to process only when we enter the butter.

@mtyurt
Copy link
Author

mtyurt commented Apr 19, 2021

@rjshrjndrn you are welcome!

But why are we having 2 au lines at the end.

First one is for normal mode, hence nnoremap; second one is for visual mode, hence vnoremap.

Thanks for the file extension addition :)

@rjshrjndrn
Copy link

Stupid me.. Didn't notice the V in vnoremap haha.. Thanks though

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment