shell - 运行命令但留在 shell vs exit
问题描述
我知道在 vim 中我可以输入
:terminal <command> %
对当前编辑缓冲区中的文件运行命令。例如,为了简化我想做的事情,让我们使用一个简单的 ls 命令:
:terminal ls %
这将拆分窗口,运行命令并退出 shell,同时将输出留在屏幕上。那不是我想要的。我希望它运行命令,但将我留在 shell 中, 以便我可以运行更多可能与当前文件/操作相关的 bash 命令,然后在完成后手动退出。
如果我只是输入
:terminal
它把我带到了一个 bash shell,它允许我输入任意数量的命令,这很棒。但是我失去了使用 % 扩展工具的能力,以及从我正在编辑的文件中生成终端的便利性。IE。我失去了从原始文件/缓冲区产生的上下文的自动化,这意味着我必须手动输入当前文件名,包括可能的长路径和/或滚动以前的 bash 历史记录以重新运行原始命令。这是对击键的浪费。
基本上,我正在尝试找到一种方法来创建一个 vim 映射,该映射允许我在 bash 命令中使用 % 文件名扩展,而:term
无需在命令运行后结束作业(我更喜欢留在 shell 的提示符处继续会议!)
我实际上并不关心解决方案是否只是启动:term
shell 并在 bash 提示符下使用 % 文件名扩展来回显我的命令而不输入它。这将允许我在我使用手动托架执行命令后仍留在 bash 中返回。
我不确定我想做的事情是否可行?请注意,我不打算暂停当前的编辑会话并返回 fg,因为它会占用当前的编辑会话。我不确定 tmux - vim 集成是否可以提供一种方法来做我想做的事,尽管我更喜欢直接使用解决方案,:term
因为它是一个内置功能,并且除了我想要的之外运行良好达到 :)
解决方案
您可以使用命令“put”将变量放在光标之后。例如:
let filename=expand(%)
term
put='ls '.filename
推荐阅读
- dart - Flutter Copy & Past Popup 从视口溢出
- c# - 发送 sendgrid 旧版模板
- symfony4 - Symfony 4 和 LexikJWTAuthenticationBundle 令牌的存储是什么?
- sequelize.js - 如何在sequelize中实现自定义的多态关联?活动子类可以切换的地方
- maven - 如何使用 SBT 导入 Maven 依赖项
- c# - 在 WPF 核心 Windows 应用程序中使用SignalR
- bash - 我可以通过 bash 参数扩展将 bash 脚本变量设置为命令的输出和所有小写字母吗?
- javascript - 在反应js中独立改变颜色
- c - 从 va_list 中分离不同类型的参数
- android - Kotlin:类型不匹配(RecyclerView.Adapter
)