在Vim中,打开一个与当前文件同名但在另一个目录中的文件

时间:2011-02-26 22:31:05

标签: 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等自定义命令,从而导致保存当前文件并打开disaster-stories/apple-pie.txt。我怎么能这样做?

4 个答案:

答案 0 :(得分:4)

您可以通过在vim命令行中使用竖线字符分隔命令来链接命令。

:w | e disaster-stories/apple-pie.txt

Vim会在命令行命令中将%扩展为当前编辑的文件名。您可以添加一些修饰符以不同方式操作文件名(请参阅手册中的filename modifiers)。例如,%:t是文件名的尾部(最后一个组件);如果%提供recipes/apple-pie.txt,则%:tapple-pie.txt

:w | e disaster-stories/%:t

通常当我想做这种事情时,我不打扰自定义键绑定。如果你最近使用过这样的命令,你可以输入它的前缀(:w |)并使用向上箭头键从历史记录中方便地调用它。

答案 1 :(得分:3)

把它放在你的vimrc上:

command! -bar Dsstr w|exec 'edit '.expand('%:p:h:h').'/disaster-stories/'.expand('%:t')

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

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

EDIT 现在是一个简短的描述,指向Vim的帮助以获取更多细节:

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

答案 2 :(得分:1)

编辑:好的,我有一个解决方案。我不确定如何在vim中编写函数,但是你可以编写一个shell脚本来为你工作。我尝试编写一个脚本来保存当前文件,退出,而不是切换到新文件,但是遇到了一些错误。但是这样你就可以输入:

 :w | ! scriptName

!告诉vim运行“cd”或“ls”等命令。

制作shell脚本的步骤:
-CD
-mkdir bin(如果bin中还没有bin) -cd bin< - 你想在〜/ bin中创建脚本,以便linux可以找到它 -vim nameOfScript(这是你要输入的命令来运行命令。例如,如果你将其命名为“vimScript”,它会运行你键入的“vimScript”。理想情况下你会想要使用像“vc”这样简短的东西(vim)改变)

- 输入以下文字:
 #!/斌/庆典
 vim -c e {)

注意:第一行#!/ bin / bash告诉Unix / Linux这是一个脚本。 vim -c e pathToFile让它运行命令“vim -c e pathToFile” -save和quit
-chmod + x nameOfscript< -This使脚本可执行
-请享用!您现在可以通过键入以下内容保存文件并移至下一个文件:

 :w | ! nameOfScript  

注意事项:这只适用于一种方式。您需要编写两个单独的命令,一个用于切换到一个文件,一个用于切换到另一个,或者在脚本上添加更多命令。添加更多内容将是最好的方法,因为它可以让您以后更轻松地添加更多文件。

另外,我建议备份这两个文件,以防万一你在创建脚本时出错。

如果您有任何疑问,请询问!下面还有一些链接:

以下是编写shell脚本的一些链接:
http://linuxcommand.org/wss0010.php
http://linuxcommand.org/writing_shell_scripts.php
http://www.freeos.com/guides/lsst/

此外,这两个链接在未来可能会有所帮助:

http://vimhelp.appspot.com/vim_faq.txt.html
http://vim.wikia.com/wiki/Vim_Tips_Wiki

答案 3 :(得分:0)

我想你想了解vim中的缓冲区管理。将两个文件作为缓冲区加载后,您可以使用:b appl<tab>在它们之间切换。当然,如果您同时编辑10个Makefile,则不能很好地扩展。