zea*_*oas 10 linux bash command-line
vim
您可以在 Bash 中的 $EDITOR (在我的例子中)中键入复杂的命令,这非常方便。Ctrl XE
但是,在我看来,如果不立即执行该命令而是将其粘贴到命令行,以便我可以根据以前的命令/输出进行最终调整,那就更好了。有没有一种简单的方法可以实现这一目标?
Kam*_*ski 13
我不知道你是否会认为这很简单。这是一个快速而肮脏的概念证明:
# in Bash
_edit_wo_executing() {
local editor="${EDITOR:-nano}"
tmpf="$(mktemp)"
printf '%s\n' "$READLINE_LINE" > "$tmpf"
"$editor" "$tmpf"
READLINE_LINE="$(<"$tmpf")"
READLINE_POINT="${#READLINE_LINE}"
rm -f "$tmpf" # -f for those who have alias rm='rm -i'
}
bind -x '"\C-x\C-e":_edit_wo_executing'
Run Code Online (Sandbox Code Playgroud)
现在应该做你想做的事。Ctrl xe
笔记:
我只使用基本逻辑来设置editor
;根据您的需要进行调整。
READLINE_POINT="${#READLINE_LINE}"
应该将光标放在最后。Bash 5 想要字符长度,上面的代码可以工作;但 Bash 4 需要字节。要在 Bash 4 中处理非 ASCII 文本,请使用
READLINE_POINT="$(printf '%s' "$READLINE_LINE" | wc -c)"
Run Code Online (Sandbox Code Playgroud)
(我从这个答案中了解到)。
按下按键后,该函数将在您当前的 shell 中执行,因此(与脚本中不同)您的别名将起作用。该-f
inrm -f
是由一位使用 的用户建议的alias rm='rm -i'
。一般来说,您可能希望运行 unaliasedrm
。
归档时间: |
|
查看次数: |
2228 次 |
最近记录: |