我正在尝试创建一个映射,以便我可以通过几次击键与svn进行比较
我知道如何手动完成每一步......
:new
打开新缓冲区。:read !svn cat <filename>
将文件的基本版本读入新缓冲区。:diffthis
关于新缓冲区和前一个缓冲区来区分文件。我很想将这一系列事件映射到-scb
之类的映射,但我不确定如何获取文件名(如:e %<cr>
)并将其放入read命令中。如果我使用%
,我也不确定如何有效地获取read命令的输出并将其放入新缓冲区。
答案 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()