Vim BufLeave Ereignis seltsames Verhalten mit <cw> <cf>
Wie zu reproduzieren
- Führen Sie
vim --cleaneine Datei aus, die einen anderen Dateinamen enthält. - Führen Sie nun diese Befehle aus
:set number relativenumber
:autocmd BufLeave * set norelativenumber | echoerr "BufLeave triggered"
- Verwenden Sie nun
<C-w><C-f>den Dateinamen, um ihn in einem neuen Fenster zu öffnen.
Erwartetes Verhalten
Ich erwarte, dass dieser Befehl set norelativenumberim ursprünglichen Puffer ausgeführt wird, wenn die andere Datei in einem anderen Fenster geöffnet wird. Genau wie es ist, wenn Sie sich in Ihren Fenstern bewegen, die verschiedene Puffer mit enthalten <C-w><C-w>.
Was geschieht
Das Ereignis wird ausgelöst, aber set norelativenumbernicht im linken Puffer ausgeführt.
Es sieht für mich wie ein Fehler aus, vermisse ich etwas?
Ich verwende übrigens Vim Version 8.2.1821.
Antworten
'relativenumber'ist eine fensterlokale Option, keine pufferlokale, daher ist es sinnvoller, sie WinLeaveanstelle von zu verwenden BufLeave. Während meiner begrenzten Tests schien es Ihr Problem zu beheben. Das 'relativenumber'wurde zurückgesetzt, wenn ein Fenster nach dem Drücken <c-w><c-f>auf einen Dateipfad verlassen wurde:
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
Weitere Informationen finden Sie unter : help 'rnu' :
'relativenumber' 'rnu' boolean (default off)
local to window