cat > something.txt
QuickとCtrl+ closeを使用することは、端末に貼り付けるか、手動で入力したファイルにすばやく何かを書きたいときにD便利なショートカットです。ただし、もちろん、明らかなエラーがある場合はカーソルを移動できないため、テキストエディタ(vimやnanoなど)を開くことはできません。しかし、これは端末マルチプレクサを使用しない限り画面を占有し、私のユースケースには少し不便または過度です。カーソルを動かす猫に代わるものはありますか?画面を占有せずにCtrl+するまでは、実際にはテキストバッファにすぎない小さなエディタがありますかD?
hel SomeScript
私のより大きなユースケースは、端末に入力できるように小さなヘルパースクリプトを作成することです。これにより、~/bin
パスにその名前のスクリプトが自動的に作成され、上部にシェブangが追加され、次のchmod+x
操作が完了します。一度cat > ~/bin/$1
始めて間違いが多すぎると判断してnanoに切り替えましたが、画面をキャッチして後ろにスクロールせずにターミナルで以前に何をしたかを見ることができず、vimキーを使用しようとしました。私は編集長です、ハハ。
答え1
「高速」アプローチに固執し、教育を学びたくない場合は、次のことを使用できます。
cat > test <<'EOF'
...
EOF
もちろん、これは完全なエディタではありませんが、入力している行を編集できます(Enterキーを押す前)。
答え2
rlwrapによる
rlwrap cat
(経由で)readlineを正しく設定すると、~/.inputrc
rlwrapはreadlineを使用するbashや他のプログラムと同じキーバインディングを使用します。
そしてvi
もしモーダルviキーバインディングとエディタの「オープンモード」(またはなどの不適切な複製ではなくvi
実際)に慣れています。vi
vim
nvi
そしてzsh
zshコマンドライン編集インターフェースを使用すると、全画面を占有することなく複数行編集が可能です。
vared
以下は、zshの組み込み機能(変数編集が目的)を使用するクイックエディタの「実装」です。
# in .zshrc
bindkey -N for-qe emacs
bindkey -M for-qe \
"^M" self-insert-unmeta \
"^J" self-insert-unmeta \
"^X" accept-line
qe(){
local e=$(cat $1; echo x); e=${e%x}
vared -M for-qe e && printf %s $e > $1
}
# usage
% qe some_file
# Enter, ^M, ^J = insert a newline
# ^X = save & exit
# ^C = abort editing
答え3
Pythonを使用すると、同様のことができます。prompt_toolkit
図書館。以下は短いスクリプトです。
#! /usr/bin/env python3
import sys
from prompt_toolkit import PromptSession
from prompt_toolkit.output import create_output
from prompt_toolkit.key_binding import KeyBindings
bindings = KeyBindings()
@bindings.add('c-d')
def _(event):
event.app.current_buffer.validate_and_handle()
# This will allow it to work when re-directing stdout, by using stderr instead.
output = create_output(always_prefer_tty=True)
session = PromptSession(output=output)
text = session.prompt(
message='', # No prompt.
multiline=True,
key_bindings=bindings,
enable_history_search=False,
vi_mode=True, # Change to False, if you prefer emacs-style editing shortcuts.
)
sys.stdout.write(text)
sys.stdout.flush()
誰もが適切な名前を提案できる場合は、喜んでパッケージ化してPyPIに公開します。