Vim BufLeave comportamiento extraño del evento con <cw> <cf>

Oct 11 2020

Como reproducir

  1. Ejecutar vim --cleanen un archivo que contenga otro nombre de archivo.
  2. Ahora ejecuta estos comandos
:set number relativenumber
:autocmd BufLeave * set norelativenumber | echoerr "BufLeave triggered"
  1. Ahora use <C-w><C-f>el nombre del archivo para abrirlo en una nueva ventana.

Comportamiento esperado

Espero que este comando funcione set norelativenumberen el búfer original al abrir el otro archivo en otra ventana. Al igual que cuando te mueves por las ventanas que contienen diferentes búferes con <C-w><C-w>.

Lo que pasa

El evento se activa, pero set norelativenumberno se ejecuta en el búfer izquierdo.

Me parece un error, ¿me falta algo?

Por cierto, estoy ejecutando Vim versión 8.2.1821.

Respuestas

1 user938271 Oct 11 2020 at 04:24

'relativenumber'es una opción local de ventana, no local de búfer, por lo que tiene más sentido usarla en WinLeavelugar de BufLeave. Durante mis pruebas limitadas, pareció solucionar su problema. Eso 'relativenumber'se restableció al salir de una ventana después de presionar <c-w><c-f>en una ruta de archivo:

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 obtener más información, consulte : ayuda 'rnu' :

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