太;博士 问题
有没有一种很好的方法可以从 shell 交互地编辑字符串,将编辑后的值存储在变量中。
基本上一模一样a=$(cat "hello world" > /tmp/command && vim /tmp/command </dev/tty >/dev/tty && cat /tmp/command)
,但在编辑时不会清除屏幕(这样我就不会失去我的位置,并且仍然可以读取以前命令的输出)。
我真的想要完全一样的行为IMV或者ICP,但我只想取回字符串,而不是移动或复制文件。
或者类似a=$(echo "hello world" | zenity --entry-text "$(cat)" --entry)
但没有 X。
这是一个“我想要一匹小马”类型的问题,但在一般情况下感觉很有用。
语境
堆栈交换喜欢上下文,所以这是我的具体用例:
我爱桀骜行编辑。我用它来zsh 小部件将历史记录中的部分命令添加到当前行,如下所示:
strace <M-l h>
->
<LIST of history commands>
->
SELECT COMMAND
->
POP UP EDITOR
->
TWEAK COMMAND
->
strace command with lots of arguments some of which I want to edit
考虑的替代方案
利用 shell 的命令行编辑器和历史记录 ( !!
) 来完成我想要的操作。
使用禅宗 echo hello | zenity --entry-text -entry
<- 我不太喜欢使用 X
答案1
您正在描述类似 zshvared
内置的东西。它将变量的当前值放入 ZLE,当您完成编辑时,编辑的行将成为变量的新值。
% x=foo
% vared x
foo
[进行一些编辑以更改foo
为bar
并按 Return]
% echo $x
bar