从 shell 交互编辑某些文本的方法

从 shell 交互编辑某些文本的方法

太;博士 问题

有没有一种很好的方法可以从 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

[进行一些编辑以更改foobar并按 Return]

% echo $x
bar

相关内容