Vim BufLeave o comportamento estranho do evento com <cw> <cf>

Oct 11 2020

Como reproduzir

  1. Execute vim --cleanem um arquivo que contém outro nome de arquivo.
  2. Agora execute esses comandos
:set number relativenumber
:autocmd BufLeave * set norelativenumber | echoerr "BufLeave triggered"
  1. Agora use <C-w><C-f>no nome do arquivo para abri-lo em uma nova janela.

Comportamento esperado

Espero que este comando seja executado set norelativenumberno buffer original ao abrir o outro arquivo em outra janela. Exatamente como quando você simplesmente se move pelas janelas contendo diferentes buffers com <C-w><C-w>.

O que acontece

O evento é disparado, mas set norelativenumbernão é executado no buffer esquerdo.

Parece-me um bug, estou faltando alguma coisa?

Estou executando o Vim versão 8.2.1821, a propósito.

Respostas

1 user938271 Oct 11 2020 at 04:24

'relativenumber'é uma opção local de janela, não local de buffer, portanto, faz mais sentido usar em WinLeavevez de BufLeave. Durante meus testes limitados, pareceu resolver seu problema. Isso 'relativenumber'foi redefinido ao sair de uma janela após pressionar <c-w><c-f>um caminho de arquivo:

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

Para obter mais informações, consulte : help 'rnu' :

'relativenumber' 'rnu'  boolean (default off)
                        local to window