VIM 함수는 헤더에 파일 이름과 타임스탬프가 포함된 새 파일을 만드는 데 사용됩니다.

VIM 함수는 헤더에 파일 이름과 타임스탬프가 포함된 새 파일을 만드는 데 사용됩니다.

전달된 인수와 내가 설정한 일부 zsh 변수를 기반으로 새 파일을 생성하는 VIM 함수를 만들었습니다.

파일이 생성되자마자 파일에 헤더를 삽입하도록 이 함수를 확장할 수 있습니까? 1번째 줄에 파일 이름을, 2번째 줄에 타임스탬프를, 3번째 줄에 "Instructor:"를 삽입해 보았습니다.

fu! CreateNote(subject, title)
   exe "e! " . fnameescape($NOTES_DIR . "/MS" . g:year . "/" . a:subject
   . "/" . a:title . ".txt")
endfunction

답변1

귀하의 기능은 다음과 같습니다.

function! CreateNote(subject, title)
    exe "e! " . fnameescape($NOTES_DIR . "/MS" . g:year . "/" . a:subject . "/" . a:title . ".txt")

   let l:filename=bufname("%")
   let l:timestap=strftime("%c")
   let l:text="Instructor: "

   put! =l:filename
   put! =l:timestap
   put! =l:text

endfunction

첫 번째 줄은 당신의 것입니다. 그런 다음 3개의 변수를 생성합니다.

  • 첫 번째는 bufname("%")현재 버퍼의 이름을 가져오는 데 사용됩니다(:h bufname()).
  • 두 번째는 이 함수를 사용하여 strftime현재 시간을 가져옵니다. C 함수에 대한 직접 호출이므로 이식 가능하지 않을 수 있습니다. 자세한 내용은 설명서를 참조하세요.:h strftime()(물론 타임스탬프 형식을 변경할 수 있습니다. 문서 참조)
  • 세 번째에는 일부 텍스트만 포함되어 있습니다.

그런 다음 마지막 3줄에서는 이 함수를 사용합니다 put(:h put):

  • !현재 행 앞에 삽입합니다(그렇지 않으면 첫 put번째 행에서 시작하여 현재 행 뒤에 삽입할 때 빈 첫 번째 행을 얻게 됩니다).
  • =변수의 내용을 가져오기 위해 표현식 레지스터를 호출하는 데 사용됩니다 .

보너스목록을 사용하고 반복하여 함수를 더 섹시하게 만들 수 있습니다.

function! CreateNote(subject, title)
    exe "e! " . fnameescape($NOTES_DIR . "/MS" . g:year . "/" . a:subject . "/" . a:title . ".txt")

    let l:header=[ bufname("%"), strftime("%c"), "Instructor: " ]

    for l:line in l:header
        put! =l:line
    endfor
endfunction

관련 정보