vim이 파일의 섹션을 편집했을 때 날짜를 변경하는 방법은 무엇입니까? 사용하고 있습니다. 텍스트의

각 주제에 대한 섹션이있는 일기로 라텍스를 사용하고 있습니다. 텍스트의 각 요소 (섹션, 하위 섹션, 하위 하위 섹션 등)에 작성 및 수정 날짜를 수동으로 추가합니다. 자동으로 만드는 방법이 있습니까?

루아 나 파이썬을 배우고 코딩하고 싶습니다 (현대 C ++ 사용). 어떤 도구를 사용할 수 있으며 어떻게 빨리 만들 수 있는지 잘 모르겠습니다.

내 계획은 이전 텍스트 요소 선언에서 시작하여 다음 요소 선언까지 보이도록 만드는 것입니다. 취소 트리에서 보일 수 있습니다. 변경 사항이 있는지 확인하십시오. 현재 섹션을 선언 한 후 날짜가 변경된 경우 이 날짜를 숨기고 다시 표시하는 것도 좋습니다.



답변

가능하지만 Vim의 스크립팅 언어에 대한 지식이 필요합니다. 해당 섹션을 “이스케이프”하지 않고 현재 섹션 내에서 날짜 위치를 찾은 다음 해당 줄을 변경할 수있는 Vim 함수를 작성해야합니다. 함수가 작성되면 autocmd에 첨부해야합니다.

예를 들어, 함수가 호출 된 경우 다음 TexAutoDate().tex같이 끝나는 파일을 작성할 때마다 자동으로 호출 할 수 있습니다 .

:autocmd BufWritePre *.tex :call TexAutoDate()

불행히도 함수의 실제 본문은 상당히 복잡하며 파일 레이아웃에 대해 더 많이 알지 못하면 크게 도움이 될 수 없습니다. 비슷한 목적으로 작성한 기능이 있지만 섹션 자체로 제한하지는 않습니다. 다음 함수는 Vim 도움말 파일의 “마지막 변경 :”줄을 쓸 때 자동으로 업데이트합니다.

function HelpModifiedUpdate()
    if &filetype != "help"
        return
    endif

    let today=strftime('%Y %b %d')

    " Save current cursor position:
    let lnum = line('.')
    let col  = col('.')

    if search('Last change: ', 'w')
        let line1 = getline('.')
        if line1 =~ today
            " Restore cursor position:
            call cursor(lnum, col)
            return
        endif
        let line2 = substitute(
            \line1,
            \'Last change: .*',
            \'Last change: ' . today,
            \''
        \)
        call setline('.', line2)
    endif

    " Restore cursor position:
    call cursor(lnum, col)
endfunction

만나다:

:help :autocmd
:help :function
:help eval.txt

마지막은 광범위하며 전체 파일을 읽을 필요는 없지만 Vim 스크립트를 아직 모른다면 필요한 내용이 많이 포함되어 있습니다.


답변

아마도 가장 쉬운 방법은 스 니펫 플러그인을 설치하는 것입니다. ultisnips 가 훨씬 강력하기 때문에 ultisnips를 선호 하지만 snipmate 도 매우 인기가 있습니다.

ultisnips를 사용하면 tex.snippets파일 에서 이와 같은 스 니펫을 정의 합니다.

snippet sec "section" b
\section{`!v strftime("%Y-%m-%d")`: ${1:section label}}

$0
endsnippet

이제 sec줄의 시작 부분에 입력 하고 <tab>키를 누르면 스 니펫이 확장되어 현재 날짜를 삽입하고 ( strftime 함수 사용) 섹션 레이블을 입력하라는 메시지를 표시합니다.


답변