Vim - 将当前缓冲区的文件名引用到新缓冲区中的命令行进程的内容

时间:2014-05-16 16:17:09

标签: svn vim

我正在尝试创建一个映射,以便我可以通过几次击键与svn进行比较

我知道如何手动完成每一步......

  1. :new打开新缓冲区。
  2. :read !svn cat <filename>将文件的基本版本读入新缓冲区。
  3. :diffthis关于新缓冲区和前一个缓冲区来区分文件。
  4. 我很想将这一系列事件映射到-scb之类的映射,但我不确定如何获取文件名(如:e %<cr>)并将其放入read命令中。如果我使用%,我也不确定如何有效地获取read命令的输出并将其放入新缓冲区。

1 个答案:

答案 0 :(得分:3)

正如评论中所述,SuperUser已经提出并回答了这个特殊问题:https://superuser.com/questions/370125/getting-output-from-command-in-a-vim-buffer

为了普通的vim教育,请继续阅读。

至少有三种方法可以访问当前文件名。在命令行上,

:e! %

将重新加载当前文件,尽管仅使用:e!更简单。如果您当前正在编辑foo.h,则使用文件名修饰符的一个更有用的示例是编辑foo.c

:sp %:r.h

第二种方法是使用@%寄存器,它是一个String变量,带有当前文件的名称(相对于当前目录)。

:let myfile = @%
:let mypath = fnamemodify(@%, ':p')

第三种方法是使用expand()

:let myfile = expand("%")
:let mypath = expand("%:p")

fnamemodify()expand()之间存在一些差异。

:help cmdline-special
:help @%
:help @#
:help fnamemodify()
:help expand()