Cómo obtener la lista de archivos que están actualmente que están siendo diferenciados en vim

StackOverflow https://stackoverflow.com/questions/2486420

  •  21-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un plugin vim en el que necesito para determinar todos los archivos que están actualmente que están siendo diferenciados. Es decir aquellos para los que se establece diff. He estado yendo a través del manual, pero no pude encontrar mucho.

¿Es posible hacer esto.

Esta pregunta está realmente relacionado con la pregunta de cómo -a- -detectar la posición de la ventana-en-vim . En esa pregunta yo estaba tratando de obtener la posición de la ventana, a fin de detectar cuál de los diferenciales es la correcta y la que se queda uno. La solución href="https://stackoverflow.com/questions/2473678/how-to-detect-the-position-of-window-in-vim/2474745#2474745"> me dieron era utilizar winnr ()

Esta solución sólo puede funcionar si sólo hay 2 ventanas (los que están siendo diferenciados). Quiero que sea genérico de modo que incluso si varias ventanas están abiertas en vim, puedo determinar cuál es la izquierda y cuál es el adecuado. Esto es lo que yo estaba pensando para resolver el problema

  1. Obtener una lista de todos los tampones enumerados
  2. Para cada uno de este amortigua determinar si diff es 1 para que
  3. Si es diff uso 1 bufwinnr() a lo consigue número de la ventana.
  4. A partir de los números de ventana determinar cuál es la izquierda y cuál es el adecuado. la izquierda uno tendrá número ventana más pequeña
  5. y luego determinar si búfer en uso (en la que se presiona alt-left`alt-right`) es izquierda o derecha utilizando winnr de búfer en uso.

Ahora las piezas que faltan son 1 y 2. Para 1 ls se pueden utilizar, pero tengo que analizar su salida. ¿Hay una manera straightfwd obtener la lista de todos los tampones mencionados. Y luego hay una manera de comprobar si para ese diff buffer es 1 o no.

Cualquier sugerencias para una solución más simple también son apreciados.

¿Fue útil?

Solución

  1. Ciclo a través de todos los números posibles de amortiguamiento de 0 a bufnr('$') y comprobar, si existe este buffer usando bufexists(nr).
  2. Guardar el número actual de buffer usando let curbuf=bufnr('%').
  3. Para cada búfer existente hacer execute "buffer ".bufnumber y compruebe la variable &diff. Recuerde dos números, pero no verifica bufwinnr().
  4. Haga execute "buffer ".curbuf.
  5. Finalmente llamar bufwinnr(nr) por dos números que se encuentran en el paso 3.

UPD: otra solución

let g:wlist={"0": [], "1":[]}
windo call add(g:wlist[&diff], bufnr('%'))
let g:diffbuffers=g:wlist.1
" here you have list of buffers with &diff option set in g:diffbuffers
scroll top