WinEnter, BufEnter, BufRead, Sözdizimi, FileType olaylarının sırası nedir?


16

Yardımdan geçtim autocmd.txt, ancak bu konudaki bilgiler dağınık ve her zaman mevcut değil (örn. İle BufRead).

Bunu iyi anlayan biri, bu olayların sırasını listeleyebilir - belki de parantezlerde belirtilen koşullar gibi,

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

ve benzeri, kolay başvuru için?

Not (aşağıdaki kendi yorumumdan kopyalandı) : Bunların bireysel açıklamalarından, tamam olanlardan değil, birbirleriyle nasıl etkileştiklerinden ve hangi sırada olduklarından bahsediyorum. Örneğin, WinEnter"Vim, WinEnter otomatik komutlarından sonra BufEnter otomatik komutlarını yürütür" TabEnterdiyor, "WinEnter'ı tetikledikten sonra ve BufEnter olayını tetiklemeden önce", bunun gibi birçok yere dağılmıştır. . Ve bazen örneğin tüm (en sözü değil BufReaddaha önce BufEnter sonra ishal veya olmadığını bahsetmeyen - belki bir uzman var bilgi diğer bazı parçasından bunu anlayabilirsiniz, ama yapamam.
So, benim niyet burada etmektir uzman olmayan kişiler tarafından çabucak aranabilen bu olayların sıralaması için tek ve basit bir referans oluşturmak,autocmd olay özellikleri.


Bence açıklamaların çoğu iyi, anlayamadıklarınızın bir listesini verebilir misiniz?
nobe4

@ Nobe4 Bunların bireysel açıklamalarından bahsetmiyorum, ki bu gerçekten sorun değil, birbirleriyle nasıl etkileştikleri ve hangi sırada gerçekleştikleri hakkında. Örneğin, WinEnter"Vim, WinEnter otomatik komutlarından sonra BufEnter otomatik komutlarını yürütür" TabEnterdiyor, "WinEnter'ı tetikledikten sonra ve BufEnter olayını tetiklemeden önce", bunun gibi birçok yere dağılmıştır. Ve bazen hiç söz edilmiyor (örneğin BufRead, BufEnter'den sonra mı yoksa daha önce mi çalıştığından bahsetmiyor - belki bir uzman orada başka bir bilgi parçasından çıkarım yapabilir, ama yapamam.
sundar - Reinstate Monica

Bu nedenle, burada amacım, autocmdetkinlik spesifikasyonlarımızda daha kesin olmak için uzman olmayanlar tarafından hızlı bir şekilde aranabilen bu olayların sırası için tek ve basit bir referans oluşturmaktır .
sundar - Monica'yı geri

Tamam, soruyu anlamadım. Her olayı günlüğe kaydedebilir ve görünüm sırasını görebilirsiniz (isterseniz bir cevap verebilirim)
nobe4

Amacınız aslında birisini kendiniz oluşturmak değil, böyle basit bir referans sağlayan birine sormaktır;)
VanLaser

Yanıtlar:


11

@ Sundar cevabını tamamlamak için:

Olayların sırasını bir günlük kaydı işleviyle kaydedebilirsiniz:

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

Tam dosyaya buradan bakın: https://gist.github.com/nobe4/aa8313fe98ca8821afad

Daha sonra tail -f loggerçek zamanlı otomatik komuta olayları aktivitesi alabilirsiniz.


3
Bunun için basit bir eklenti yaptım, buraya bakın .
Karl Yngve Lervåg

6
@ KarlYngveLervåg eklentisini başka bir yola taşımıştır . Teşekkürler Karl!
Luc Hermitte

Fark ettiğiniz ve yorum yaptığınız için teşekkürler Luc! (Not: Ölü bağlantıyı düzeltmek için
yorumumu

10

Bunun için farklı anahtar kelime kümeleriyle googling yapmayı denedim ve bu sonuçla bir denemede altın aldım: http://www.ibm.com/developerworks/library/l-vim-script-5/

Özellikle, bu bölüm mevcut soru ile ilgilidir:

Örneğin, Vim'i başlatırsanız, demo.txt adlı bir dosyayı düzenleyin, Ekle moduna değiştirin, bir metin yazın, dosyayı kaydedin ve sonra çıkın, Vim oturumunuz Liste 1'de gösterilenler gibi bir dizi olay alır.

Liste 1. Basit bir Vim düzenleme oturumunda olay sırası

> vim

  1. BufWinEnter (varsayılan pencere oluştur)
  2. BufEnter (varsayılan bir arabellek oluştur)
  3. VimEnter (Vim oturumunu başlat) : demo.txt dosyasını düzenle
  4. BufNew (demo.txt içeren yeni bir tampon oluşturun)
  5. BufAdd (bu yeni arabelleği oturumun tampon listesine ekleyin)
  6. BufLeave (varsayılan tampondan çık)
  7. BufWinLeave (varsayılan pencereden çık)
  8. BufUnload (varsayılan arabelleği arabellek listesinden kaldır)
  9. BufDelete (varsayılan arabelleği serbest bırak)
  10. BufReadCmd (demo.txt içeriğini yeni arabelleğe okuyun)
  11. BufEnter (yeni arabelleği etkinleştir)
  12. BufWinEnter (yeni arabellek penceresini etkinleştir) i
  13. InsertEnter (Ekle moduna geçer)

Hala tamamen kapsamlı değil (örneğin, BufReadaka'dan bahsetmiyorum BufReadPost, ama sonra geleceğini varsayıyorum BufReadCmd), ama mükemmel bir başlangıç.

Önemli bir eksik bilgi parçası da, FileTypeve Syntaxautocmd olaylarının bununla nasıl etkileşime girdiğidir (varsa filetypeve syntaxzaten açıktır ve dosya türü ve sözdizimi Vim tarafından bilinen yeni bir dosya açılır).


7
Bu yalnızca tek bir dosyayı düzenlerken geçerlidir. Genel kanının aksine, uygulanış sırası autocmdbirden fazla dosya üzerinde s edilir değil iyi tanımlanmış. Ve tek bir dosyayla bile, sipariş Vim sürümü ile birkaç kez değişti. Bunun eklentiler için yaratabileceği (ve yapabileceği) sorunlar vim_dev'de ölümle tartışıldı ve genel tasarım öngörülebilir gelecekte değişmeyecek. Kapsamlı bir anlayış elde etmek apply_autocmdsiçin, Vim 7.4.827 kaynaklarında 139 olay vardır . Bunda iyi şanslar.
Sato Katsura

@SatoKatsura Aradığım uzman görüşü bu, teşekkürler! Bununla ilgili daha fazla bilgi edinmek için önerebileceğiniz bazı referanslar var mı (Vim'in kaynaklarına dalmak dışında)? Ayrıca, bu tamamen ilgi alanınızın dışında olabilir, ancak 'Neovim' topraklarında işlerin daha iyi tanımlanıp tanımlanmadığı hakkında bir fikriniz var mı?
sundar - Monica'yı geri

Korkarım kesin bir referans bilmiyorum. autocmdVim'de bir karmaşa var, birkaç basit durum dışında kesin bir referans yazmanın gerçekten mümkün olduğunu sanmıyorum . Sanırım herkes "genellikle işe yarıyor" ve o zaman omuz silkiyor. Neovim'e gelince, şahsen proje hakkında karışık hislerim var. Son zamanlarda koda bakmadım; Sanırım onların sorun izleyicisine bir cevap alabilirsiniz.
Sato Katsura

Ayrıca "olay" terimi çok sabit bir emir fikrini bozmalıdır.
VanLaser
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.