편집기에서 입력 받기(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 쉘 사용). 그러나 시작된 프로세스는 여전히 표준 입력에서 입력을 받습니다. 표준 입력은 반대편에 emacs가 있는 의사 터미널일 뿐입니다.

답변4

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

예를 들어, Emacs 버퍼의 내용이 이고 ls이를 영역으로 표시한 다음( 을 사용하여 C-SPC), 실행하고 shell-command-on-region( M-|) 명령을 입력하면 bash(전체 조합: M-| command RET) ls해당 버퍼에서 실행되고 bash출력은 다음과 같습니다. 새로운 버퍼 영역이 열립니다.

C-u M-| command RET영역에서 사용하는 경우 현재 버퍼에 표시된 명령이 출력으로 대체됩니다.

관련 정보