Vim BufLeave comportamiento extraño del evento con <cw> <cf>
Como reproducir
- Ejecutar
vim --cleanen un archivo que contenga otro nombre de archivo. - Ahora ejecuta estos comandos
:set number relativenumber
:autocmd BufLeave * set norelativenumber | echoerr "BufLeave triggered"
- 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
'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