vim을 사용하여 로그 파일을 자동으로 작성하는 방법은 무엇입니까?

vim을 사용하여 로그 파일을 자동으로 작성하는 방법은 무엇입니까?

저는 Fedora 34 워크스테이션에서 Vim을 기본 텍스트 편집기로 사용합니다. 완료된 시간과 작업을 추적할 수 있도록 내 강좌 중 하나에 대한 로그 파일을 생성하고 유지관리해야 합니다. 다음과 같아야 합니다.

John Doe
Log for XYZ 1101, Fall 2021

***** IN:  Thu Aug 26 08:13:11 PM EDT 2021

Enter my log notes here

***** OUT: Thu Aug 26 09:22:13 PM EDT 2021

노트:IN: 뒤에 공백 2개, OUT: 뒤에 공백 1개


나는 이 문서를 열 때마다(가능하지 않다면 주어진 명령에 따라) ***** IN: date인쇄되고 커서가 아래 두 번째 줄의 시작 부분에 놓이도록 이 프로세스를 자동화하고 싶습니다. 또한 문서를 닫을 때마다(또는 주어진 명령을 실행할 때마다) ***** OUT: date(그리고 그 뒤에 빈 줄이 생길 때마다) 마지막 텍스트 항목 아래에 두 줄이 인쇄되어야 합니다. 이렇게 하면 주어진 두 항목 사이, 그리고 내 메모와 항목 날짜 사이에 항상 빈 줄이 있게 됩니다.

누구든지 내가 이 작업을 수행하도록 도와주거나 적어도 안내해 줄 수 있나요? 나는 스크립트를 작성하거나 고급 vim 설정을 망친 적이 없습니다.


편집하다:@muru님의 댓글을 이용해서 사용법을 찾아본 결과 autocmd다음과 같은 결론을 얻었습니다.

autocmd VimEnter ~/test.log $pu=strftime('***** IN:  %c')
autocmd ExitPre  ~/test.log $pu=strftime('***** OUT: %c')

효과가있다,하지만 완벽하진 않아. 문제는 다음과 같습니다

  1. 텍스트 사이에 여분의 빈 줄을 두지 않습니다. 2개의 줄바꿈을 추가하고 싶습니다. Vims put 명령을 사용하여 이를 수행하려면 어떻게 해야 합니까? 아니면 다른 방법이 있나요?

  2. ExitPre명령은 나에게 작동하는 유일한 명령입니다. 하지만 내가 이 일을 할 때마다 :w그리고 :q/ :x또는나가날짜가 기록되고 프로그램이 종료되지 않습니다. 대신 다시 저장하고 강제 종료해야 합니다 :q!. 나는 실제로 이 우아한 옵션을 고려하지 않습니다. 한 번만 종료하고 볼 수 있도록 이 작업이 백그라운드에서 발생하도록 하고 싶습니다.나가문서가 열리는 다음 날짜입니다. 다른 명령 VimLeave(예: Vim을 종료하기 전, viminfo 파일을 작성한 후)은 전혀 효과가 없습니다.

어떤 도움이라도 대단히 감사하겠습니다!

답변1

현재 문제는 오디오 녹음을 사용하여 녹음할 수 있습니다.

autocmd VimEnter ~/test.log $pu=strftime(\"***** IN:  %c\n\n\n\")
autocmd ExitPre  ~/test.log $pu=strftime('***** OUT: %c') | w
  • \n큰따옴표로 확장하세요. 하지만 사용할 때는 따옴표를 이스케이프 처리해야 합니다 =. call append("$", [strftime("***** IN: %c"), "", ""])또는 대신 | norm G2o.
  • |w를 사용하여 방금 변경한 내용을 작성합니다 $pu. $pu저장되지 않은 수정 사항이 발생 하여 처음에 종료에 실패했습니다 .

관련 정보