vipe
は好きだけど fzf です。
cat people.txt | grep -v "^#" | grep "^.*Fruit.*Folk" | fzf -m | cat
...検索してキーボードでアイテムを切り替えることができる素敵なリストが表示され、作業が完了すると完全に消えます。
moreutils には vipe
があります 、通常のテキスト エディター (vi など) をパイプラインの一部として実行するだけです。削除しない行は、stdout に書き戻されます。 (ただし、一般的には、一時ファイルにリダイレクトしてそのファイルを編集しても同じ結果が得られます。)
gvim
も使用できます (そして vim
) このため。 gvim /dev/stdin
を挿入 パイプに入れ、 :wq! /dev/stdout
を実行して書き込みます 編集が終わったら
次のように gvim を呼び出すと、 ZZ
でより自然に記述して閉じることができます :
gvim +'nmap ZZ :wq!<cr> | r /dev/stdin | 1d | file /dev/stdout'
そのエイリアスまたは関数を作成できます:
gvimp() {
gvim +'
nmap ZZ :wq!<cr>
r /dev/stdin
1d
file /dev/stdout
'
}
これは、4 行目から 7 行目を削除し、ZZ
を実行して終了した例です。 通常モード:
$ seq 1 10 | gvimp | sed -r 's/^|$/=/g'
=1=
=2=
=3=
=8=
=9=
=10=
編集:通常の vim は、キーボード入力に stdin を使用し、ユーザー インターフェイスの描画に stdout を使用するため、もう少し注意が必要です。ただし、プロセスを追加することで引き続き使用できます。 vim の std* を端末にリダイレクトし、親プロセスの std* をデータ パイプに使用します。
vimp() {
bash -c '
terminal="/dev/$(ps -o tty= $$)"
tmp_out="$(mktemp)"
trap "rm \$tmp_out" EXIT
vim <(cat) < "$terminal" &> "$terminal" +"
file $tmp_out
set noreadonly
nmap ZZ :wq!<cr>
"
cat "$tmp_out"
'
}
一時ファイルが必要です。そうしないと、パイプ出力が vim のユーザー インターフェイスと混ざり、vim の終了時に一緒に消えてしまう可能性があるからです。
不正なバックアップ/復元後の Linux ext4 復元ファイルとディレクトリのアクセス権
PATH にあるプログラムに対して Bash が No such file or directory を与えるのはなぜですか?