Vim 없이 쉘 스크립트에서 텍스트를 바꾸고 인코딩을 변경하는 방법은 무엇입니까?

Vim 없이 쉘 스크립트에서 텍스트를 바꾸고 인코딩을 변경하는 방법은 무엇입니까?

다음과 같은 쉘 스크립트가 있습니다.

vim file.xml -c "s/\r/\r/g" -c "set fileencoding=utf8" -c "wq"

(macOS) 터미널에서는 잘 실행되지만 다른 프로그램(AppleScript를 실행하는 FileMaker)에서 실행하면 작동이 멈춥니다. 내 생각엔 Vim이 실제로 시작되고 있고(터미널에서 깜박이는 것을 보았지만) FileMaker나 AppleScript가 실패하기 때문인 것 같습니다.

인터페이스가 있는 애플리케이션을 시작하지 않고 명령줄 도구만 사용하여 위와 동일한 작업을 수행하려면 어떻게 해야 합니까?

답변1

ex스크립팅을 담당하는 사람은 Vim입니다.

Vim과 동일한 명령을 사용하지만 터미널(tty) 없이 실행할 수 있습니다. "음소거" 플래그 를 전달할 수 있습니다 -s.

바라보다:help -s-ex:

-s: 자동 또는 일괄 모드. [...] Vim을 사용하여 파일에서 Ex 명령을 실행할 때 사용됩니다.터미널 대신. [...]

(이렇게 하면 -s진단 및 오류 메시지가 표시되지 않으며 추가적인 부작용이 있을 수 있습니다. 자세한 내용은 전체 도움말을 참조하십시오. 귀하의 경우에는 필요하지 않을 수도 있지만 아마도 필요할 것입니다.)

다음과 같이 명령을 실행할 수 있습니다.

ex -s file.xml -c "s/\r/\r/g" -c "set fileencoding=utf8" -c "wq"

"ex-mode"도 -e이 플래그와 함께 사용할 수 있으므로 이 플래그도 작동합니다.

vim -e -s file.xml -c "s/\r/\r/g" -c "set fileencoding=utf8" -c "wq"

답변2

sedvim이지만 스크립트용입니다. 이를 통해 데이터를 전송하거나 하나 이상의 파일을 처리하는 데 사용할 수 있습니다. vi, ed와 동일한 코드를 기반으로 합니다. 비대화형이므로 창이 없습니다.

vim그런데, 자체 창이 없는 것 같아요 . 어쩌면 뭔가(래퍼)가 창에서 시작하고 있을 수도 있습니다.

답변3

이것이 문제인 경우 체크아웃된 (선택한) 파일에 대해 UTF16을 사용하고 체크인/아웃 시 UTF8 간에 변환하도록 git구성할 수 있습니다(세부 정보 gitattributes(5), 일반적으로 .gitattibutes저장소 루트의 파일에 있음) . UTF8은 working-tree-encoding내부적으로 git사용됩니다 (예: diff검색, 콘텐츠 표시 등).

조심하세요: 네이티브가 아닌 Git은 이를 이해하지 못하고 슬픔을 유발할 수 있습니다.

관련 정보