打开文件时重复使用现有作业

打开文件时重复使用现有作业

这个问题最好通过例子来解释:

vim example.txt #Opens Vim on new or existing file

Ctrl+Z

vim someother.txt

Ctrl+Z

vim example.txt #Auto-runs `fg 1` since example.txt is already open

这可能吗?

答案1

不可以。vim(或者任何其他应用程序)无法与 bash 沟通,告知它应该采取其他行动。

答案2

您可能需要考虑使用 vim 缓冲区来编辑多个文件。

编辑两个文件:vim example.txt someother.txt然后使用 在它们之间切换:buffer <filename>

另请参阅更简单的缓冲液切换技巧Vim 缓冲区常见问题解答

答案3

示例解决方案在 bash 下运行(需要 paste、grep、sed)。它特定于 Vim,但可以适用于其他编辑器。

jim ()  { 
  paste <(jobs) <(jobs -p | xargs -n1 ps o cmd= -p) |
  grep "$1$" > ~/tmp/jm && fg $(cat ~/tmp/jm | sed -r 's/^\[([0-9]+).*/\1/')
  [[ $? == 1 ]] && vim $1
}

享受!

答案4

我不认为存在这样一种通用的方法来重用工作。

对于您的编辑工作流程,您可能希望切换到 emacs。您无需按 ctrl-z 返回 shell,而是可以使用 或 在 emacs 缓冲区中运行子 shell,M-x ansi-termM-x shell在 shell 和编辑缓冲区之间来回切换,甚至可以拆分视图以同时显示两者。Emacs 会跟踪 shell 的工作目录,因此如果您在文件系统中导航并决定要打开文件,则无需键入emacs somefile,只需告诉 emacs 使用 打开它C-x C-f somefile<RET>,它将在另一个缓冲区中打开文件并切换到它。

您还可以启动 emacs 服务器并运行emacsclient somefile以告诉现有 emacs 会话打开某个文件。如果已经打开了该文件,则只需切换到现有缓冲区即可。

相关内容