Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vimで編集中のファイルのGitホスティングサービス上のURLを取得する

$
0
0

障害発生時や実装時など、手元のエディタで開いているファイルのGitホスティングサービス上のURLを、Slackで共有したい時があるかもしれません。

私の場合、Vimを使っていてBitbucketのURLを共有したいというケースがありました。
それに対し、Vim scriptで GitUrlというコマンドを追加し、 .git/configの設定を元にURLを出力するようにしました。

以下にそのscriptと、補足を記載します。

追加したVim script

function! GitUrl()letl:TEMPLATE ='https://example.com/projects/__PROJECT__/repos/__REPOSITORY__/browse/__PATH__'letl:project    = system('git remote get-url origin | sed "s/\// /g" | awk ''{print $(NF-1)}'' | tr -d "\n"')letl:repository = system('git remote get-url origin | sed "s/\// /g" | awk ''{print $(NF)}'' | sed "s/.git$//" | tr -d "\n"')letl:path       = system('git rev-parse --show-prefix | tr -d "\n"'). expand('%')letl:remote_url = substitute(substitute(substitute(l:TEMPLATE,'__PROJECT__',l:project,''),'__REPOSITORY__',l:repository,''),'__PATH__',l:path,'')

    echo l:remote_url
  endfunction
  command! GitUrl call GitUrl()

例えば railstutorialプロジェクトの hello_appリポジトリの app/controllers/application_controller.rbを開いている場合、 :GitUrlを実行すると、以下のURLを出力します。

https://example.com/projects/railstutorial/repos/hello_app/browse/app/controllers/application_controller.rb

scriptの補足

  • Bitbucketはプロジェクトの下にリポジトリが所属する構成を期待しています。
  • git remote get-url originで取得するURLは、SSH URLを期待しています。URLからプロジェクト名とリポジトリ名を取得します。
    • 上記例では ssh://git@example.com/railstutorial/hello_app.git
  • git rev-parse --show-prefixでルートディレクトリからの相対パスを取得し、 expand('%')で編集中のファイルの名前を追加し、パスを作成します。

GitHub以外のGitホスティングサービスを利用する場合、エディタ上でURLを取得するプラグインやエクステンションが探しづらいかもしれません。そういう場合に10行程度のVim scriptでしのげるのがよいと思いました。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>