유닉스 파이프 라인에서 vim을 어떻게 사용하나요?

Aug 20 2020

다음 호출을 사용하여 파일을 grep하기 위해 vim / ex를 사용할 수 있습니다.

ex -c'g/foo/p' -cq -s afile.txt

비슷한 명령을 사용하여 stdin에서 일부 텍스트를 grep하고 싶습니다. 다음 명령이 작동해야한다고 생각했지만 출력이 생성되지 않습니다.

cat afile.txt | ex -c'g/foo/p' -cq -s -

vim -e대신 사용하면 똑같은 일이 발생합니다 ex.

cat test.md | vim -e -c'g/foo/p' -cq -s -

ex가 stdin에서 초기 버퍼를 읽고 출력을 stdout으로 인쇄하여 Unix 파이프 라인 내에서 사용할 수 있도록 강제 할 수있는 방법이 있습니까?

답변

4 user938271 Aug 21 2020 at 02:34

특수 파일 이름 --e다음으로 이동하십시오 .

cat test.md | vim -e -c'g/foo/p' -cq -s -
                                        ^
                                        ✘

cat test.md | vim - -e -c'g/foo/p' -cq -s
                  ^
                  ✔

전에 -e, -문자 텍스트로 읽습니다. 후 -e, -전직 명령으로 읽습니다.


Vim: Reading from stdin...경고 를 표시하지 않으려면 --not-a-term인수를 vim(1)명령에 전달하십시오 .

cat test.md | vim - -e -c'g/foo/p' -cq -s --not-a-term
                                          ^----------^

Vim을 종료하려면 다음 :qa!대신 실행하십시오 :q.

cat test.md | vim - -e -c'g/foo/p' +'qa!' -s --not-a-term
                                     ^-^

당신은 가입 할 수 있습니다 -e그리고 -s, 당신은 대체 할 수 -c와 함께 +:

cat test.md | vim - -es +'g/foo/p' +'qa!' --not-a-term
                      ^ ^

이제 Vim의 출력을 다른 셸 유틸리티로 전달할 수 있습니다. 예 wc(1):

cat test.md | vim - -es +'g/foo/p' +'qa!' --not-a-term | wc -l
                                                       ^-----^

또한보십시오:

  • vims
  • 파이프 라인 필터링을위한 Vim
  • Vim의 사회 생활
  • 내 노트