WinEnter, BufEnter, BufRead, Syntax, FileType 이벤트의 순서는 무엇입니까?


16

나는 autocmd.txt도움을 받았고, 이것에 관한 정보는 흩어져 있고 항상 존재하지는 않습니다 (예 :와 함께 BufRead).

이것을 잘 아는 사람이 이러한 사건의 순서를 열거 할 수 있습니까?

WinEnter   
BufEnter (if this window is for a different buffer than the current)

쉽게 참조 할 수 있도록?

참고 사항 (아래 내 자신의 의견에서 복사) : 나는 그들에 대한 개별 설명에 대해 이야기하는 것이 아니라 서로 상호 작용하는 방식과 발생 순서에 대해 이야기하고 있습니다. 예를 들어 WinEnter"Vim은 WinEnter 자동 명령 이후에 BufEnter 자동 명령을 실행합니다" TabEnter라고 말하고 "WinEnter를 트리거 한 후 BufEnter 이벤트를 트리거하기 전에"이렇게 여러 곳에 흩어져 있습니다. 그리고 때로는 전혀 언급되지 않습니다 (예를 들어 BufReadBufEnter 이후 또는 이전에 실행되는지 언급하지 않습니다 . 전문가가 다른 정보에서 정보를 추론 할 수는 있지만
그렇게 할 수는 없습니다. 비전문가가 신속하게 조회 할 수있는 이러한 이벤트 순서에 대한 단일의 간단한 참조를 작성합니다.autocmd 이벤트 사양.


나는 대부분의 설명이 괜찮다고 생각합니다. 이해할 수없는 것들의 목록을 줄 수 있습니까?
nobe4

@ Nobe4 나는 그들에 대한 개별 설명에 대해 이야기하는 것이 아니라 실제로 상호 작용하는 방식과 발생 순서에 대해 이야기하고 있습니다. 예를 들어 WinEnter"Vim은 WinEnter 자동 명령 이후에 BufEnter 자동 명령을 실행합니다" TabEnter라고 말하고 "WinEnter를 트리거 한 후 BufEnter 이벤트를 트리거하기 전에"이렇게 여러 곳에 흩어져 있습니다. 때로는 언급되지 않는 경우도 있습니다 (예 : BufReadBufEnter 이후 또는 이전에 실행되는지 언급하지 않음) – 전문가가 다른 정보를 통해이를 유추 할 수는 있지만 실제로는 그렇지 않습니다.
sundar-Reinstate Monica

따라서 여기서는 autocmd이벤트 사양을 보다 정확하게하기 위해 비전문가가 신속하게 조회 할 수있는 이러한 이벤트 순서에 대한 단일의 간단한 참조를 작성하고자합니다 .
sundar-복 직원 모니카

나는 그 질문을 이해하지 못했다. 당신은 모든 이벤트를 기록하려고 시도하고 모양의 순서를 볼 수 있습니다 (원하는 경우 답변을 할 수 있습니다)
nobe4

당신의 의도는 실제로 누군가 자신을 만들지 않고 간단한 참조를 제공하는 것에 대해 묻는 것입니다.)
VanLaser

답변:


11

@sundar 답변을 완료하려면 다음을 수행하십시오.

로깅 기능을 사용하여 이벤트 순서를 간단히 기록 할 수 있습니다.

augroup EventLoggin
  autocmd!
  autocmd BufNewFile * call s:Log('BufNewFile')
  autocmd BufReadPre * call s:Log('BufReadPre')
  ...
  autocmd User * call s:Log('User')
augroup END

function! s:Log(eventName) abort
  silent execute '!echo '.a:eventName.' >> log'
endfunction

전체 파일보기 : https://gist.github.com/nobe4/aa8313fe98ca8821afad

그런 다음 tail -f log실시간 자동 명령 이벤트 활동을 얻을 수 있습니다 .


3
이를 위해 간단한 플러그인을 만들었습니다 . 여기를 참조 하십시오 .
Karl Yngve Lervåg

6
@ KarlYngveLervåg는 플러그인을 다른 경로 로 옮겼습니다 . Karl 감사합니다!
Luc Hermitte

알리고 의견을 보내 주셔서 감사합니다, Luc! (참고 : 죽은 링크를 수정하기 위해 내 의견을 업데이트 할 수 없습니다. 죄송합니다!)
Karl Yngve Lervåg

10

나는 다른 키워드 세트로 이것에 대해 인터넷 검색을 시도하고 다음과 같은 시도로 금을 쳤다 : http://www.ibm.com/developerworks/library/l-vim-script-5/

특히이 부분은 현재 질문과 관련이 있습니다.

예를 들어, Vim을 시작하고 demo.txt라는 파일을 편집하고 삽입 모드로 바꾸고 일부 텍스트를 입력 한 후 파일을 저장 한 다음 Vim 세션은 Listing 1과 같은 일련의 이벤트를 받는다.

Listing 1. 간단한 Vim 편집 세션의 이벤트 순서

> vim

  1. BufWinEnter (기본 창 만들기)
  2. BufEnter (기본 버퍼 생성)
  3. VimEnter (Vim 세션 시작) : edit demo.txt
  4. BufNew (demo.txt를 포함 할 새 버퍼 만들기)
  5. BufAdd (새 버퍼를 세션의 버퍼 목록에 추가)
  6. BufLeave (기본 버퍼 종료)
  7. BufWinLeave (기본 창 종료)
  8. BufUnload (버퍼 목록에서 기본 버퍼 제거)
  9. BufDelete (기본 버퍼 할당 해제)
  10. BufReadCmd (demo.txt의 컨텍스트를 새 버퍼로 읽음)
  11. BufEnter (새 버퍼 활성화)
  12. BufWinEnter (새 버퍼 창 활성화) i
  13. InsertEnter (삽입 모드로 교체)

여전히 완전히 포괄적 인 것은 아니지만 (예 : BufReadaka에 대한 언급은 BufReadPost없지만 이후에 나올 것이라고 가정합니다 BufReadCmd) 훌륭한 출발입니다.

하지만 정보의 한 중요한 누락 된 부분은 어떻게 FileType하고 Syntax이와 상호 작용 autocmd 이벤트 (가정 filetypesyntax에 이미 새 파일은 그 파일 형식 및 구문 빔에 알려진 열립니다).


7
단일 파일을 편집 할 때만 적용됩니다. 일반적인 생각과 달리 autocmd여러 파일 에을 적용하는 순서는 명확 하지 않습니다 . 단일 파일을 사용하더라도 Vim 버전에서는 순서가 몇 차례 변경되었습니다. 이로 인해 플러그인에 발생할 수있는 문제점 (vim_dev)에 대해 논의되었으며, 전체 디자인은 예측 가능한 미래에 변경되지 않을 것입니다. 포괄적 인 이해 를 얻는 것에 관해서는 , apply_autocmdsVim 7.4.827의 출처에서 139 건의 발생이 있습니다. 좋은 성과 있길 바래요.
사토 카츠라

@SatoKatsura 이것은 내가 찾던 일종의 전문가 의견입니다. 감사합니다! Vim의 소스로 다이빙하는 것 외에 이것에 대해 더 배울 것을 제안 할 수있는 참고 자료가 있습니까? 또한 이것은 귀하의 관심 영역에서 완전히 벗어 났을 수도 있지만, 'Neovim'- 랜드에서 상황이 더 잘 정의되어 있는지 알고 있습니까?
sundar-복원 모니카

나는 확실한 참조를 모르고 있습니다. autocmdVim의 엉망 입니다. 몇 가지 간단한 경우를 제외하고 실제로 확실한 참조를 작성하는 것이 가능 하다고 생각하지 않습니다 . 나는 모든 사람들이 단지 "보통 작품"에 정착하고 그렇지 않을 때는 어깨를 으 sup한다고 가정한다. neovim에 관해서는, 나는 개인적으로 프로젝트에 대해 여러 가지 감정을 가지고 있습니다. 최근에 코드를 보지 않았습니다. 문제 추적기에 대한 답변을 얻을 수 있다고 가정합니다.
사토 카츠라

또한 "사건"이라는 용어 자체는 너무 정돈 된 주문이라는 아이디어를 전복시켜야한다.
VanLaser
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.