비대화형 모드에서 VIM 스크립트를 실행할 수 있습니까?

비대화형 모드에서 VIM 스크립트를 실행할 수 있습니까?

Gnats 버그 추적기에는 $EDITOR에서 티켓을 여는 명령(edit-pr)이 있습니다. 내 $EDITOR는 VIM이며, 이 명령이 $EDITOR에서 티켓을 열 때 추가 키 입력 없이 일부 스크립트 편집을 자동화하고 싶습니다.

이와 같이 비대화식으로 실행할 수 있는 VIM 스크립트를 작성하는 방법이 있습니까?

답변1

귀하의 질문에 대한 답변을 이미 받았더라도 다른 사람들이 이 답변이 유용하다고 생각할 수도 있습니다.

Vim 명령은 다음 옵션을 사용하여 실행되는 파일에 지정할 수도 있습니다 -s:

    vim -s commands.txt file

예:

    echo 'gg=G' > indent.txt
    echo ':wq' >> indent.txt
    vim -s indent.txt file

그러면 Vim을 사용하여 파일 내용을 들여쓰기하고 저장하고 종료합니다.

답변2

프로그램을 실행할 때 다음과 같이 명령줄에서 Vim 명령을 지정할 수 있습니다:

vim file.txt "+:s/foo/bar/g"

"+[cmd]"매개변수를 추가하여 명령을 계속 추가 할 수 있습니다 . 여기서 끝내면 편집기가 열리고, 이 명령을 실행하고 기다리거나, 하나를 추가하여 "+:wq"파일을 저장하고 닫을 수 있습니다.

vimscript 구문을 사용하여 스크립트를 작성하고 파일이 열릴 때 호출되는 함수로 래핑하거나, 위 구문을 사용하여 별도의 스크립트로 가져오고 버퍼에 적용할 수도 있습니다.

답변3

비대화형 모드에서 vim을 실행하려면 +{command}/ -c {command}또는 -s인수를 사용하면 첫 번째 파일을 읽은 후 vim 명령을 실행할 수 있습니다.

아래에서 몇 가지 예를 확인해 보세요.

파이프를 사용한 간단한 표준 입력 및 출력은 다음 명령으로 수행할 수 있습니다.

$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat

한 파일을 편집하고 변경 사항을 다른 파일에 저장하려면:

$ vim -es '+:0,$s/127/128/g' '+:wq! new_file' /etc/hosts
$ cat file1 file2 | vim - -es '+:0,$s/foo/test/g' '+:wq! file3'

-s {scriptin}파일을 제자리에서 편집하려면 읽기 스크립트 파일을 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

$ echo ':0,$s/foo/test/ge' > cmds.txt
$ echo ':wq' >> cmds.txt
$ vim -s cmds.txt -es file

파일을 구문 분석하여 파이프 출력으로 보내려면 다음을 시도할 수 있습니다.

$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+%print' '+:q!' /dev/stdin | cat

또는:

$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+:wq! /dev/stdout' /dev/stdin | cat

더보기:비대화형(예: 파이프라인에서)으로 파일을 편집하려면 어떻게 해야 합니까?Vim SE에서

답변4

edit-pr저는 모기를 사용해본 적이 없어서 정확히 어떻게 해야 할지 말씀드리기 어렵습니다 . 하지만 귀하가 제공한 정보를 기반으로 EDITOR 환경 변수를 사용자 정의 쉘 스크립트, 어쩌면 Python 스크립트 등으로 변경해 볼 수 있습니다.

EDITOR=/path/to/script.(sh|py) edit-pr <args>

하지만 앞서 말했듯이 어떤 편집을 원하는지, 에디터에서는 어떤 작업을 해야 하는지 모르겠습니다. 자동화하고 싶은 작업의 예를 들어주실 수 있나요?

관련 정보