回答:
:Gedit
/ :Gsplit
/ :Gvsplit
/ ...をフォームで使用できます{revision}:{filename}
:Gedit branch:/foo/bar.c
注:ファイルが現在のファイルと同じ場合、次のようにコマンドを短縮できます:Gsplit branch:%
。
多くの場合、現在のファイルの差分が、別のブランチでファイルを開くよりも優先されることがよくあります。これはを介して実行できます:Gdiff {branch}
。
詳細については、以下を参照してください。
:h fugitive-:Gedit
:h fugitive-revision
:h fugitive-:Gdiff
:h c_%
Fugitive SeriesのVimcastsエピソードもご覧ください。
[RO]
ステータス行にあることに気付くでしょう)。
fugitive
リポジトリのルートからのパスが必要です。答えはすでにこれをカバーしていますが、レポジトリの特定のサブディレクトリにいるときに逃亡者が理解できると誤って仮定しました。
これは、OPが要求したものよりも少し広範ですが、プラグインやその他のリビジョン管理システムを使用したくない人のために、この小さなスニペットはかなりうまく機能する傾向があります。
:new
:r! git show branch:file
:1d
新しいウィンドウを作成し、指定されたコマンドの出力を新しいバッファーに読み込むことにより、そこにファイルを表示します。もちろん、これはgitだけでなく、あらゆる外部コマンドで機能します。
bzrの例(REV構文はブランチを指定できます):
:new
:r! bzr cat -r REV file
:1d
hgの例(hgのブランチについてはわかりません。十分に使用しないでください)
:new
:r! hg cat -r REV file
:1d
svnの例(
:new
:r! svn cat file@REV
:1d
おそらく、SOの投稿のように構文の強調表示を取得するためにファイルタイプを設定したいでしょうが、少なくともパイピングを台無しにする必要はありません。
開いたら、:w filename
または:saveas filename
で新しい名前で保存できます。Vimにはまだファイル名がないためです。編集できないようにする場合は、:setlocal readonly
および/またはをスローすることもできます:setlocal nomodifiable
。
もう少し作業が必要ですが、Vimにファイルタイプを推測させることができます。
:filetype detect
しかし、Vimにはまだ名前がないため、これは必ずしもうまく機能しません(たとえば、Cコードをいくつか読み込んで推測しました)filtype=conf
。
保存することで名前を付けることはできますが、既存のファイルを上書きしたくありません。ファイル名を設定することもできます(@PeterRinckerに感謝します!)ブランチ名とファイル名の両方であるファイルが存在する可能性は低いため、任意のセパレータでそれらを連結します
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
どこ"file"
が実際のファイル名と"branch"
ブランチ名に置き換えられます
もちろん、この時点でプラグインをほぼ作成しています;-)
それをすべてまとめると、vimrcにドロップできるgit固有の関数としてここにあります:
function! GitFile(branch,file)
new
exe "silent r! git show " . a:branch . ":" . a:file
1d
exe "silent file " . a:branch . "-" . a:file
filetype detect
setlocal readonly "don't allow saving
setlocal nomodified "allow easy quitting without saving
setlocal nomodifiable "don't allow modification
endfunction
これをコマンドでラップしたり、直接呼び出したりできますcall GitFile("whateverBranch","myfile.c")
。という名前のバッファを持つ新しいウィンドウが表示されますwhateverBranch-myfile.c
:file
一時ファイルを使用する代わりに、ファイルの名前の使用を検討することをお勧めします。参照:h :file