![편집기에서 입력 받기(vim/nano/emacs/textmate?)](https://linux55.com/image/21807/%ED%8E%B8%EC%A7%91%EA%B8%B0%EC%97%90%EC%84%9C%20%EC%9E%85%EB%A0%A5%20%EB%B0%9B%EA%B8%B0(vim%2Fnano%2Femacs%2Ftextmate%3F).png)
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
영역에서 사용하는 경우 현재 버퍼에 표시된 명령이 출력으로 대체됩니다.