情况
我在bash中编写了一个很长的命令,最终意识到我忘记满足该命令的先决条件。我想把这个命令存储在某个地方,执行所有的要求,恢复命令并执行它。
- 注意:我希望命令停留在屏幕上 *
下面是一个示例:
$ a very long command --path some_path and more arguments
字符串
因此,假设此命令要求some_path是一个现有目录。然而,在编写命令时,我意识到我没有创建该目录,因此在执行命令之前,我必须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]
型
我的解决方案
为了解决这个问题,我使用了Readline bind工具,并通过以下方式将Control-P
字符Map到自定义脚本:
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 '"\C-b": postpone'
bind '"\C-p":"\C-b\n"'
型
最后...问题
你能建议一个更好的解决方案,我可以去一个单一的Map?主要焦点是消除第二Map。
注意事项
我学习了insert-comment
绑定函数,但它对我不起作用,因为它只在一个方向上工作。我还想使用相同的快捷方式取消对该行的注解。
2条答案
按热度按时间dwthyt8l1#
另一种选择:
1.在长行的末尾按Ctrl+u。
1.第一个月
1.按Ctrl+Y并继续您的工作。
wwodge7n2#
您需要的是向
insert-comment
传递一个数值参数。如果insert-command
接收到一个数字参数(任何数字,值并不重要),则该命令充当切换:#
。#
。举例来说:
M-3 M-#
(Alt-3 Alt-#
)