医者も 質問
シェルで文字列を対話的に編集し、編集した値を変数に保存する良い方法はありますか?
デフォルトでは同じです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はありません。
これは「私はポニーが欲しい」というタイプの質問ですが、一般的な状況では役に立つと思います。
コンテキスト
Stack Exchangeはコンテキストが好きなので、具体的なユースケースは次のとおりです。
いいね扱いにくいライン編集。私はそれを使う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
考慮された代替
!!
私が望むことを達成するには、シェルのコマンドラインエディタと履歴()を使用してください。
使用ライン echo hello | zenity --entry-text -entry
< - 私はXを使うのがあまり好きではありません。
答え1
vared
zsh組み込みのようなものを説明しています。変数の現在の値をZLEに入れて編集を終了すると、編集された行が変数の新しい値になります。
% x=foo
% vared x
foo
foo
[変更する部分を編集しbar
てReturnキーを押してください]
% echo $x
bar