link2code crafts direct URLs to source on GitHub
For every file given, it compares local revisions to those upstream. The most recent, common revision is used for the direct link. Line numbers, and ranges, are supported by appending ":start[-end]" to the filepath.
Git submodules are supported. Files in trees that are not git repositories are skipped.
> link2code --help
Usage:
  link2code FILES... [flags]
Examples:
link2code Makefile
link2code Makefile:5-10
link2code repo1/Makefile repo2/cmd/my-tool.go repo3/README.md:25-30
rg 'search term' -n | link2code
Flags:
      --colon-filenames   use this if you have filenames or directories with ':' in them - otherwise parsing will fail
  -h, --help              help for link2code
> link2code README.md link2code/link2code.go:3-16 ../codesearch/cs/main.go
https://github.com/coxley/link2code/tree/e24d3cc/README.md
https://github.com/coxley/link2code/tree/e24d3cc/link2code/link2code.go#L3-L16
https://github.com/coxley/codesearch/tree/c0973ac/cs/main.go
go install github.com/coxley/link2code/link2code@latest
This is great for Vim.
Because of how simple it is, I haven't created an installable plugin. Feel free to copy-paste what I use.
This maps <leader><leader>l copy the GitHub URL to your clipboard, with <leader><leader>b doing the same for blame. The URL is
also printed out. Works for both current line in normal mode and visually
selected regions.
function! LinkToCode(blame = 0) range
    let lineRange = printf("%d", line('.'))
    " If visual selection exists
    if a:lastline - a:firstline > 0
        let lineRange = printf("%d-%d", a:firstline, a:lastline)
    endif
    let filePath = expand("%:p")
    let filePos = printf("%s:%s", filePath, lineRange)
    let cmd = printf("link2code %s 2> /dev/null", filePos)
    if a:blame
        let cmd = printf("link2code --blame %s 2> /dev/null", filePos)
    endif
    let link = system(cmd)[:-2]  " ^@ is printed at the end of system()
    let @+ = link
    redraw
    echom printf("Copied to clipboard: %s", link)
endfunction
nnoremap <leader><leader>l :call LinkToCode()<CR>
vnoremap <leader><leader>l :call LinkToCode()<CR>
nnoremap <leader><leader>b :call LinkToCode(v:true)<CR>
vnoremap <leader><leader>b :call LinkToCode(v:true)<CR>