情况
我正在写一个非常长的命令,并最终意识到我忘记了满足这个命令的先决条件。 我想在某个地方存储这个命令,执行所有的要求,恢复命令并执行它。
注意:我想让命令留在屏幕上
这里是一个例子:
$ a very long command --path some_path and more arguments
所以假设这个命令要求some_path是一个现有的目录。 但是,在编写命令时,我意识到我还没有创build该目录,所以在执行命令之前,我必须mkdir some_path
。
要求
我想能够做的是以下几点:
$ a very long command --path some_path and more arguments [keystroke -> comment] $ mkdir some_path $ [up] [up] [keystroke -> uncomment]
要么…
$ a very long command --path some_path and more arguments [keystroke -> comment] $ mkdir some_path $ [keystroke -> bring back, uncomment]
我的解决scheme
为了解决这个问题,我使用了Readline绑定工具,并以如下方式将Control-P
字符映射到自定义脚本:
function postpone { if [[ ${#READLINE_LINE} -gt 0 ]] then if [[ "${READLINE_LINE::1}" == "#" ]] then READLINE_LINE="${READLINE_LINE:1}" else READLINE_LINE="#$READLINE_LINE" fi else HIST_SIZE=`history | wc -l | tr -s ' ' | cut -d \ -f 2` for i in $(seq 1 $HIST_SIZE) do LINE=`history | sort -r | head -n $i | tail -n 1 | tr -s ' ' | cut -d \ -f 3-` if [[ "${LINE::1}" == "#" ]] then READLINE_LINE="${LINE:1}" break fi done fi } bind -x '"\Cb": postpone' bind '"\Cp":"\Cb\n"'
最后…问题
你可以build议一个更好的解决scheme,我可以去一个单一的映射? 主要的重点是消除第二个映射。
笔记
我了解了insert-comment
绑定函数 ,但它不适用于我,因为它只能在一个方向上工作。 我也想取消注释使用相同的快捷方式行。
替代:
mkdir some_path