저는 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')
효과가있다,하지만 완벽하진 않아. 문제는 다음과 같습니다
텍스트 사이에 여분의 빈 줄을 두지 않습니다. 2개의 줄바꿈을 추가하고 싶습니다. Vims put 명령을 사용하여 이를 수행하려면 어떻게 해야 합니까? 아니면 다른 방법이 있나요?
이
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
저장되지 않은 수정 사항이 발생 하여 처음에 종료에 실패했습니다 .