¿Cómo puedo alterar la ventana a la que saltará ctrl + w, ctrl + p?
Lo que estoy buscando es una forma programática de cambiar a qué ventana Ctrl+ w, Ctrl+ psaltará.
La razón por la que quiero hacer esto es que tengo una autocmd
como la siguiente
autocmd BufEnter SpecialWindow call MyFunction()
dónde
function! MyFunction()
let current_win_id = win_getid()
windo ...
call win_gotoid(current_win_id)
endfunction
por lo tanto, tan pronto como salto a SpecialWindow
desde AnotherWindow
, el significado de Ctrl+ w, Ctrl+ pes tal que no salta a AnotherWindow
( comportamiento deseado ), sino que salta a la ventana inferior derecha, la última visitada por windo
.
Si está interesado en saber por qué hago esta pregunta, consulte esto .
Respuestas
Una opción es que guarde lo que era la ventana anterior antes del windo
comando. Luego, más tarde, salte a esa ventana antes de saltar a su ventana de destino.
¡función! MyFunction () let previous_win_id = win_getid (winnr ('#')) deje current_win_id = win_getid () ventana ... llamar win_gotoid (previous_win_id) llamar win_gotoid (current_win_id) función final
Sin embargo, una mejor solución es usar la win_execute()función en lugar del windo
comando. La win_execute()
función evita los efectos secundarios de ingresar a una ventana mientras se ejecuta un comando en esa ventana, que incluye actualizar la ventana anterior (y también la ventana actual).
Debe utilizar un for
bucle explícito para ejecutar el comando en cada ventana. Puede utilizar gettabinfo()para buscar los identificadores de ventana de las ventanas en la pestaña actual.
¡función! MiFunción () para winid en gettabinfo (tabpagenr ()) [0] ['windows'] llamar win_execute (winid, '...') fin de función final
Si desea iterar sobre cada ventana en cada pestaña, puede usar gettabinfo()
sin argumentos (para obtener información para todas las pestañas) y dos for
bucles anidados (uno para la lista de pestañas, luego otro para las ventanas en esa pestaña. O puede usar getwininfo()
directamente, que devuelve información para todas las ventanas en todas las pestañas en una lista aplanada, por lo que necesita un solo for
bucle.
Si simplemente está intentando establecer una variable u opción en las otras ventanas (por ejemplo, deshabilitar 'relativenumber'
), entonces puede usar setwinvar()para las ventanas en la pestaña actual, o de manera settabwinvar()más general.
Por ejemplo, para deshabilitar 'relativenumber'
en todas las ventanas de todas las pestañas:
¡función! MiFunción () para tabinfo en gettabinfo () let tabnr = tabinfo ['tabnr'] para winid en tabinfo ['windows'] llamar settabwinvar (tabnr, winid, '& numero relativo', 0) fin de fin de función final