편집기에서 입력 받기(vim/nano/emacs/textmate?)

편집기에서 입력 받기(vim/nano/emacs/textmate?)

vim, nano, emacs 또는 명령줄이 아닌 편집기(MacVim/TextMate) 등에서 StdIn입력 을 받는 방법이 있는지 궁금합니다 . $EDITOR옵션/해결 방법/모범 사례는 무엇입니까?

heredoc기본적으로 나는 $editor와 같은 작업 흐름을 원합니다 .

$ sort -nr << FOO | uniq -c 
pipe heredoc> foo 
pipe heredoc> bar
pipe heredoc> baz
pipe heredoc> foo
pipe heredoc> FOO
   2 foo
   1 baz
   1 bar

답변1

vipe패키지의 명령더 많은 유틸리티파이프라인 중간에 $EDITOR를 시작할 수 있습니다.
다음과 같이 원하는 동작을 얻을 수 있습니다.

$ </dev/null vipe |sort -nr | uniq -c 

답변2

어떤 종류의 편집기에서든 작동하게 할 수 있는 유일한 기회는 임시 파일을 사용하는 것입니다.

FILE=$(mktemp); $EDITOR "$FILE"; <"$FILE" …command… ; rm "$FILE"

(단, 완전한 입력이 제공되기 전에는 명령을 시작할 수 없습니다.)

또한 echo "# please insert your input bellow" >"$FILE"호출 전에 를 사용하여 $EDITOR편집기 내부에 표시될 주석을 삽입할 수도 있습니다. 명령의 동작에 영향을 주지 않는지 확인하십시오(또는 사용자에게 명시적으로 제거하도록 요청하십시오).

답변3

Emacs는 버퍼 중 하나에서 쉘을 실행할 수 있습니다(MX 쉘 사용). 그러나 시작된 프로세스는 여전히 stdin에서 입력을 받고, 해당 stdin은 단순히 의사 터미널일 뿐이며 다른 쪽 끝은 emacs입니다.

답변4

Emacs에서는 어떤 명령이든 실행할 수 있고 Emacs 버퍼(정확히는 선택된 영역) 중 하나의 내용을 표준 입력으로 응용 프로그램에 제공할 수 있습니다.

예를 들어 Emacs 버퍼의 내용이 이고 ls이를 영역으로 표시한 다음 ( )을 C-SPC실행 하고 명령을 입력 (전체 조합: )하면 에서 실행 되고 출력이 새 버퍼로 열립니다.shell-command-on-regionM-|bashM-| command RETlsbash

on 지역을 사용하면 C-u M-| command RET현재 버퍼에 표시된 명령이 출력으로 대체됩니다.

관련 정보