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