使用Readline注释掉bash中的命令行

情况

我正在写一个非常长的命令,并最终意识到我忘记了满足这个命令的先决条件。 我想在某个地方存储这个命令,执行所有的要求,恢复命令并执行它。

注意:我想让命令留在屏幕上

这里是一个例子:

$ 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 绑定函数 ,但它不适用于我,因为它只能在一个方向上工作。 我也想取消注释使用相同的快捷方式行。

替代:

  1. 在长行结束处按Ctrl + u
  2. mkdir some_path
  3. Ctrl + y并继续工作。