这个问题最好通过例子来解释:
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-term
并M-x shell
在 shell 和编辑缓冲区之间来回切换,甚至可以拆分视图以同时显示两者。Emacs 会跟踪 shell 的工作目录,因此如果您在文件系统中导航并决定要打开文件,则无需键入emacs somefile
,只需告诉 emacs 使用 打开它C-x C-f somefile<RET>
,它将在另一个缓冲区中打开文件并切换到它。
您还可以启动 emacs 服务器并运行emacsclient somefile
以告诉现有 emacs 会话打开某个文件。如果已经打开了该文件,则只需切换到现有缓冲区即可。