有相当多的命令需要子命令(例如,git
、 或task
来自taskwarrior)。有时,我有一个终端窗口完全用于使用不同的子命令运行此命令。我希望我不必总是需要键入主命令。让我用taskwarrior(“待办事项列表管理器”)的一个例子来解释这一点:
$ task add proj:job +hard Refactor the API -- Add task to project 'job' tagged 'hard'
$ task proj:job +easy add prio:H Fix typo in README -- Tag is 'easy', priority 'high'
$ task proj:job next -- List tasks in project 'job', ordered by 'urgency'
正如您所看到的,子命令(例如或)的放置task
位置非常灵活。现在,如果我正在从事某个项目(比如“工作”),那么我想深入研究。就像是:add
next
$ CONTEXT="task proj:job"
[task proj:job] $ add +hard Refactor the API
[task proj:job] $ +easy add prio:H Fix typo in README
[task proj:job] $ next
这个问题的标题非常宽泛(建议你可能希望在执行命令之前运行 sed 脚本)。不过,我会很高兴看到以下之一:
- 我可以设置一些变量(如
CONTEXT
示例中所示),在运行之前,将其值添加到每个命令之前。 CONTEXT
或者,甚至更好的是,可以在开始输入命令之前在命令行中填写的值。这样,我偶尔可以按退格键,或者Ctrl-U
如果我想在上下文之外运行命令。
问。是否有一个 shell(最好是类似 bash 的,例如
zsh
)具有所描述的功能?
答案1
解决您的工作流程而不是提出的精确问题,我会在这种情况下使用一个函数:
t() { task proj:job "$@"; }
t add +hard Refactor the API
t +easy add prio:H Fix typo in README
t next
函数相对于别名的优点是占位符可以放在命令模板中的任何位置,而不仅仅是放在行尾。
从你关于想要避免领先的开销的命令来看t
,我想你可以尝试这样的事情:
add() { task proj:job add "$@"; }
next() { task proj:job next; }
add +hard Refactor the API
add +easy prio:H Fix typo in README
next