我想从当前git存储库中的另一个分支打开文件。我已经看到了这样的问题,但是将其与Vim结合使用的建议比较繁琐(通过管道传递到Vim,打开stdin,手动设置文件类型等)。有没有更简单的方法来保留语法高亮显示,文件类型设置等?
如果有帮助:

我安装了逃犯插件(尽管很少使用)。
我没有不需要修改文件

文件可以是当前打开的缓冲区的文件,也可以是其他文件。

评论

@Andy这个问题本质上与逃犯无关。我碰巧已经安装了它,但是我对使用某些替代插件或根本没有插件的方法感到满意。

公认的答案是关于逃犯的,这就是我标记它的原因。
@AndyLester,如果有人发布了一个不需要逃犯的足够简单的方法,或者出现了一个比逃犯更好的插件,并且用在了答案中,那么我很可能接受那些。

#1 楼

您可以使用:Gedit / :Gsplit / :Gvsplit / ...,格式为{revision}:{filename}

:Gedit branch:/foo/bar.c


注意:如果文件与当前文件相同,则可以缩写命令像这样::Gsplit branch:%

通常情况下,与仅在不同分支上打开文件相比,优先选择当前文件的diff。您可以通过:Gdiff {branch}来执行此操作。

有关更多帮助,请参见:

:h fugitive-:Gedit
:h fugitive-revision
:h fugitive-:Gdiff
:h c_%


您可能还想查看《逃亡系列》中的Vimcasts剧集。

评论


美丽!好奇:如果我修改打开的文件会怎样?

–muru
15年6月28日在2:34

@muru您会注意到该缓冲区在只读缓冲区中打开(可能在状态行中注意到[RO])。

– Peter Rincker
15年6月28日在2:38

是的,它在那里。

–muru
15年6月28日在2:42

逃犯需要从存储库根目录开始的路径。答案已经涵盖了这一点,但是我错误地认为逃犯可以理解我们何时在仓库的特定子目录中。

– Paschalis
16年5月23日在10:52



很棒..第一次使用逃犯..即使我已经安装了很长时间了:)

–alpha_989
18年5月26日在19:07

#2 楼

这比OP要求的要广泛,但是对于不想使用插件以及可能的其他版本控制系统的人来说,此小片段往往效果很好:

:new
:r! git show branch:file
:1d
br />它会创建一个新窗口,并通过将给定命令的输出读取到新缓冲区中来显示文件。当然,这可以与任何外部命令一起使用,而不仅仅是git。

bzr示例(其中REV语法可以指定分支):

:new
:r! bzr cat -r REV file
:1d


hg的示例(不确定hg中的分支;请不要充分使用它) br />
您仍然可能想要设置文件类型来像SO帖子中那样突出显示语法,但是至少不必弄乱管道。可以用:w filename:saveas filename将其保存为新名称,因为Vim尚无文件名。如果不想编辑它,还可以添加:setlocal readonly和/或:setlocal nomodifiable。 br />
-编辑:自动文件类型-

还有更多工作,但是您可以要求Vim使用

:new
:r! hg cat -r REV file
:1d


但是,由于Vim还没有一个名字,所以它并不总是能正常工作(例如,我提取了一些C代码,并猜到了filtype=conf。可以通过保存它来为其命名,但是我们不想覆盖可能存在的文件。我们也可以只设置文件名(谢谢@PeterRincker!),但是同样,我们不想冒冲突的风险。由于不太可能同时存在分支名称和文件名的文件,因此我们将使用任意分隔符将它们连接起来。

:new
:r! svn cat file@REV
:1d
文件名和带有分支名称的"file"

当然,在这一点上,我们几乎要编写一个插件;-)

将它们组合在一起,这里是git特有的您可以放入vimrc中的功能:

:filetype detect


,您可以将其包装在命令中或直接调用,例如"branch"。您将获得一个名为call GitFile("whateverBranch","myfile.c")的缓冲区的新窗口

评论


我可以用这种方法自动检测文件类型,语法等吗?

–muru
15年6月28日在2:44

遗憾的是,还需要更多工作。我更新了帖子

– John O'M。
15年6月28日在2:45

如果可以的话,我建议您使用@PeterRinker帖子中的plugin方法。它应该做很多您想要的好事。我主要想表明一个人不必离开编辑器也不必处理获取数据的管道麻烦,而且我知道有些人讨厌不得不使用插件。

– John O'M。
15年6月28日在2:57

我只是添加了一些能够检测文件类型。您不再需要即时输入内容,而可以轻松添加.vimrc。使用特定的插件可能仍会更好。

– John O'M。
15年6月28日在3:22

您可能要考虑使用:file命名文件,而不要使用临时文件。见:h:文件

– Peter Rincker
15年6月28日在5:06