在Vim中,打开与当前文件同名但位于不同目录中的文件

在Vim中,打开与当前文件同名但位于不同目录中的文件,vim,Vim,我知道这是一个初学者的问题!!假设我们有两个目录: recipes/ apple-pie.txt blueberry-muffin.txt disaster-stories/ apple-pie.txt blueberry-muffin.txt 我们还假设Vim的当前目录设置为recipes/和disaster stories/的父目录 问题: 如果我正在编辑recipes/apple pie.txt,我希望能够输入自定义命令,例如:dsstr,从而保存当前文件并打开灾难故事/

我知道这是一个初学者的问题!!假设我们有两个目录:

recipes/
  apple-pie.txt
  blueberry-muffin.txt
disaster-stories/
  apple-pie.txt
  blueberry-muffin.txt
我们还假设Vim的当前目录设置为
recipes/
disaster stories/
的父目录

问题:


如果我正在编辑
recipes/apple pie.txt
,我希望能够输入自定义命令,例如
:dsstr
,从而保存当前文件并打开
灾难故事/apple pie.txt
。我该怎么做?

编辑:好的,我有一个解决方案给你。我不知道如何在vim中编写函数,但您可以编写一个shell脚本来完成这项工作。我试着编写一个脚本来保存当前文件,退出,然后切换到新文件,但是遇到了一些错误。但这将允许您只需键入:

 :w | ! scriptName
!!告诉vim运行诸如“cd”或“ls”之类的命令

制作shell脚本的步骤:
-cd
-mkdir bin(如果bin在~中不存在)

-cd-binEDIT:好的,我有一个解决方案给你。我不知道如何在vim中编写函数,但您可以编写一个shell脚本来完成这项工作。我试着编写一个脚本来保存当前文件,退出,然后切换到新文件,但是遇到了一些错误。但这将允许您只需键入:

 :w | ! scriptName
!!告诉vim运行诸如“cd”或“ls”之类的命令

制作shell脚本的步骤:
-cd
-mkdir bin(如果bin在~中不存在)

-cd-bin将其放在vimrc上:

命令-bar Dsstr w | exec'edit'。展开('%:p:h:h')。/disaster stories/'.展开('%:t')

然后您可以使用
:Dsstr
更改为该文件

这一点都不灵活,但我不确定你需要什么,所以我不能再进一步了

编辑 现在是一个简短的描述,并指向Vim的帮助以了解更多详细信息:

  • 命令:创建命令并覆盖它(如果存在):帮助:命令
  • -bar
    :允许连接命令:h:命令栏
  • Dsstr
    :用户命令必须以大写字母开头
  • w |
    :写入,然后执行下一个命令:h:酒吧
  • exec
    :将参数作为ex命令执行:h:执行
  • expand()
    :请参阅:h expand()

把这个放在你的vimrc上:

命令-bar Dsstr w | exec'edit'。展开('%:p:h:h')。/disaster stories/'.展开('%:t')

然后您可以使用
:Dsstr
更改为该文件

这一点都不灵活,但我不确定你需要什么,所以我不能再进一步了

编辑 现在是一个简短的描述,并指向Vim的帮助以了解更多详细信息:

  • 命令:创建命令并覆盖它(如果存在):帮助:命令
  • -bar
    :允许连接命令:h:命令栏
  • Dsstr
    :用户命令必须以大写字母开头
  • w |
    :写入,然后执行下一个命令:h:酒吧
  • exec
    :将参数作为ex命令执行:h:执行
  • expand()
    :请参阅:h expand()

您可以通过在vim命令行中用管道字符分隔命令来链接命令

:灾难故事/apple pie.txt

Vim将在命令行命令中将
%
扩展到当前编辑的文件名。您可以添加一些修改器以不同的方式操作文件名(请参见手册中的)。例如,
%:t
是文件名的尾部(最后一个组件);如果
%
给出
recipes/apple pie.txt
,那么
%:t
给出
apple pie.txt

:w|e灾难故事/%:t


通常,当我想做这类事情时,我不需要定制密钥绑定。如果您最近使用过这样的命令,您可以键入它的前缀(
:w |
)并使用向上箭头键方便地从历史记录中调用它。

您可以通过在vim命令行中用管道字符分隔命令来链接命令

:灾难故事/apple pie.txt

Vim将在命令行命令中将
%
扩展到当前编辑的文件名。您可以添加一些修改器以不同的方式操作文件名(请参见手册中的)。例如,
%:t
是文件名的尾部(最后一个组件);如果
%
给出
recipes/apple pie.txt
,那么
%:t
给出
apple pie.txt

:w|e灾难故事/%:t


通常,当我想做这类事情时,我不需要定制密钥绑定。如果您最近使用过这样的命令,您可以键入它的前缀(
:w |
)并使用向上箭头键方便地从历史记录中调用它。

我想您想了解一下vim中的缓冲区管理。一旦这两个文件都作为缓冲区加载,您可能可以使用
:b appl
在它们之间切换。当然,如果同时编辑10个Makefiles,这就不能很好地扩展。

我想您应该去了解vim中的缓冲区管理。一旦两个文件都作为缓冲区加载,您可能可以使用
:b appl
在它们之间切换。当然,如果您同时编辑10个Makefiles,这将无法很好地扩展。

感谢您提供这些链接。您的解决方案是否允许我避免每次键入文件名?感谢您提供这些链接。您的解决方案是否允许我避免每次键入文件名?谢谢!我不想成为一个讨厌的人,但你可以简单地解释一下它是如何工作的?谢谢!我不想成为一个害虫,但你可以简单地解释一下它是如何工作的?+1我不知道
%t
。非常感谢。这似乎是一个非常好的解决方案,不管它是单个命令。+1我不知道
还是