【发布时间】:2019-02-01 22:06:24
【问题描述】:
我知道在 vim 中我可以输入
:terminal <command> %
对当前编辑缓冲区中的文件运行命令。例如,为了简化我想做的事情,让我们使用一个简单的 ls 命令:
:terminal ls %
这将拆分窗口,运行命令并退出 shell,同时将输出留在屏幕上。这不是我想要的。我希望它运行命令,但将我留在 shell 中,这样我就可以运行更多可能与当前文件/操作相关的 bash 命令,然后在我完成后手动退出。
如果我只是输入
:terminal
它把我带到了一个 bash shell,它允许我输入任意数量的命令,这很棒。但是我失去了使用 % 扩展工具的能力,以及从我正在编辑的文件中生成终端的便利性。 IE。我失去了从原始文件/缓冲区产生的上下文的自动化,这意味着我必须手动输入当前文件名,包括可能的长路径,或者滚动以前的 bash 历史记录以重新运行原始命令.这是对击键的浪费。
基本上,我正在尝试找到一种方法来创建一个 vim 映射,该映射允许我通过 :term 在 bash 命令中使用 % 文件名扩展,而不在命令运行后结束作业(我更喜欢留在在 shell 中提示继续会话!)
我实际上不在乎解决方案是否只是启动 :term shell 并在 bash 提示符下使用 % 文件名扩展来回显我的命令而不输入它。这将允许我在执行命令后仍留在 bash由我手动回车。
我不确定我想做的事情是否可行?请注意,我不打算暂停当前的编辑会话并返回 fg,因为它会占用当前的编辑会话。我不确定 tmux - vim 集成是否可以提供一种方法来做我想做的事,尽管我更喜欢直接使用:term 找到解决方案,因为它是一个内置功能,除了我的功能外,它运行良好我正在努力实现:)
【问题讨论】:
-
I don't think this is possible with
:term, although might be possible manually starting the terminal withterm_start()and a handler for a proper option (see help forjob-options).不过,我必须说,整个情况并不是特别简单。您希望在不打开终端的情况下从不断打开的终端(历史记录、滚动查看以前的命令)中获取功能。我不明白每次运行命令后保持一个新的打开会更实用。 -
感谢您的回复。基本上我希望终端在 vim 拆分中,以便我可以保留上下文。可以说,我不想使用 % 在我当前编辑的文件上运行 ls,而是想实际运行 %,因为它是一个 python 脚本文件。在从 vim
:term第一次运行脚本(没有 args 的香草运行)后,有时我喜欢重新运行脚本,但然后从命令行输入 不同 args。有时这些 args 是文件,我可以使用 bash 选项卡完成将它们添加到脚本命令行,或者我可以运行 find 或其他 bash 命令来查找要指定为 args 的文件。 -
cont'd.. 如果该术语在运行我的 % 脚本文件后退出,那么我将无法使用不同的参数等从命令行继续使用它。保留文件很好编辑上下文打开 b/c 最终我将回到文件并编辑/更改它。当然,我可以直接打开
:term,我有一个完整的外壳,可以得到我想要的 90%。但是如果 vim 不在我编辑的文件的目录中,我必须找到我当前正在编辑的文件。没有上下文。如果可以将 % 传递给 shell 并且 shell 不会退出它,那就更容易了。有意义吗?