터미널 입력을 파일에 쓰는 것의 대안은 무엇입니까?

터미널 입력을 파일에 쓰는 것의 대안은 무엇입니까?

cat > something.txtQuick 및 Ctrl+ close를 사용하는 것은 터미널에 붙여넣거나 수동으로 입력한 파일에 빠르게 무언가를 쓰고 싶을 때 D좋은 단축키입니다 . 그러나 이는 물론 명백한 오류가 있는 경우 커서를 이동할 수 없으므로 텍스트 편집기(예: vim 또는 nano)를 열 수 없습니다. 그러나 이는 터미널 멀티플렉서를 사용하지 않는 한 화면을 차지하며 내 사용 사례에는 약간 불편하거나 과도합니다. 커서를 움직이는 고양이에 대한 대안이 있습니까? 화면을 차지하지 않고 Ctrl+ 하기 전까지는 실제로 텍스트 버퍼일 뿐인 작은 편집기가 있습니까 D?

hel SomeScript나의 더 큰 사용 사례는 터미널에 입력 할 수 있도록 작은 도우미 스크립트를 만드는 것입니다. 그러면 ~/bin경로에 해당 이름의 스크립트가 자동으로 생성되고 상단에 shebang이 추가된 다음 chmod+x작업이 완료됩니다. 일단 cat > ~/bin/$1시작해서 실수가 너무 많다고 판단하고 nano로 전환했지만 화면을 잡아서 뒤로 스크롤하지 않고 터미널에서 이전에 무엇을 했는지 볼 수 없었고 vim 키를 사용하려고 했습니다. 저는 편집장이에요, 하하.

답변1

"빠른" 접근 방식을 고수하고 교육을 배우고 싶지 않은 경우 다음을 사용할 수 있습니다.

cat > test <<'EOF'
...
EOF

물론 이것은 완전한 편집기는 아니지만 입력 중인 줄을 편집할 수 있습니다(Enter 키를 누르기 전).

답변2

rlwrap으로

rlwrap cat

(을 통해) readline을 올바르게 구성하면 ~/.inputrcrlwrap은 readline을 사용하는 bash 및 기타 프로그램과 동일한 키 바인딩을 사용합니다.

그리고vi

만약에모달 vi 키 바인딩과 편집기의 "개방 모드"( 또는 과 같은 부적절한 복제가 아닌 vi실제 ) 에 익숙해집니다 .vivimnvi

그리고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에 게시하겠습니다.

관련 정보