Vim BufLeave événement étrange comportement avec <cw> <cf>
Comment reproduire
- Exécuter
vim --cleansur un fichier contenant un autre nom de fichier. - Maintenant, exécutez ces commandes
:set number relativenumber
:autocmd BufLeave * set norelativenumber | echoerr "BufLeave triggered"
- Maintenant, utilisez
<C-w><C-f>le nom de fichier pour l'ouvrir dans une nouvelle fenêtre.
Comportement attendu
Je m'attends à ce que cette commande fasse set norelativenumbersur le tampon d'origine lors de l'ouverture de l'autre fichier sur une autre fenêtre. Tout comme c'est le cas lorsque vous vous déplacez simplement dans vos fenêtres contenant différents tampons avec <C-w><C-w>.
Ce qui se produit
L'événement est déclenché, mais set norelativenumbern'est pas exécuté sur le tampon gauche.
Cela me semble être un bug, est-ce que je manque quelque chose?
J'utilise la version 8.2.1821 de Vim au fait.
Réponses
'relativenumber'est une option locale à la fenêtre, pas une option locale à la mémoire tampon, il est donc plus logique de l'utiliser à la WinLeaveplace de BufLeave. Au cours de mes tests limités, cela a semblé résoudre votre problème. Cela a 'relativenumber'été réinitialisé en quittant une fenêtre après avoir appuyé <c-w><c-f>sur un chemin de fichier:
vim9script
set number relativenumber
autocmd WinLeave * set norelativenumber
mkdir('/tmp/test_nornu', 'p')
writefile(['hello, I am file1'], '/tmp/test_nornu/file1')
var lines =<< trim END
some text line
/tmp/test_nornu/file1
another text line
END
writefile(lines, '/tmp/test_nornu/file2')
e /tmp/test_nornu/file2
norm! 2G
winnr()->getwinvar('&rnu', -1)->assert_equal(1)
exe "wincmd \<c-f>"
winnr('#')->getwinvar('&rnu', -1)->assert_equal(0)
echom v:errors
Pour plus d'informations, voir : help 'rnu' :
'relativenumber' 'rnu' boolean (default off)
local to window