Vim BufLeave o comportamento estranho do evento com <cw> <cf>
Como reproduzir
- Execute
vim --cleanem um arquivo que contém outro nome de arquivo. - Agora execute esses comandos
:set number relativenumber
:autocmd BufLeave * set norelativenumber | echoerr "BufLeave triggered"
- 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
'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