Como obter a lista de arquivos que estão sendo difundidos no vim
-
21-09-2019 - |
Pergunta
Estou escrevendo um plug -in Vim no qual preciso determinar todos os arquivos que estão sendo difundidos atualmente. Esse é o que diff
está definido. Eu tenho passado pelo manual, mas não consegui encontrar muito.
É possível fazer isso.
Esta pergunta está realmente relacionada à pergunta Como detectar a posição da janela em vim. Nessa pergunta, eu estava tentando obter a posição da janela, de modo a detectar qual das diferenças é a correta e qual é deixada. o solução Eu tenho que usar o winnr ()
Essa solução pode funcionar apenas se houver apenas 2 janelas (as que estão sendo difundidas). Quero torná -lo genérico para que, mesmo que várias janelas estejam abertas no VIM, posso determinar qual está à esquerda e qual é a direita. Isso é o que eu estava pensando para resolver o problema
- Obtenha uma lista de todos os buffers listados
- Para cada um desses buffers, determine se
diff
é1
por isso - Se
diff
é1
usarbufwinnr()
para obter o número da janela. - A partir dos números da janela, determine qual é a esquerda e qual é a certa. Esquerda um terá um número de janela menor
- E então determine se o buffer atual (em que
alt-left
`alt-right` é pressionado) está à esquerda ou à direita usando o Winnr do Buffer atual.
Agora, as peças que estão faltando são 1 e 2. para 1 LS podem ser usadas, mas preciso analisar sua saída. Existe uma maneira direta de obter a lista de todos os buffers listados. E então existe uma maneira de verificar se esse buffer diff
é 1 ou não.
Quaisquer sugestões para uma solução mais simples também são apreciadas.
Solução
- Percorrer todos os números possíveis de buffer de
0
parabufnr('$')
e verifique se esse buffer existe usandobufexists(nr)
. - Salvar o número do buffer atual usando
let curbuf=bufnr('%')
. - Para cada buffer existente, faça
execute "buffer ".bufnumber
e verifique&diff
variável. Lembre -se de dois números, mas não verifiquebufwinnr()
. - Fazer
execute "buffer ".curbuf
. - Finalmente ligue
bufwinnr(nr)
Para dois números encontrados na etapa 3.
Up: outra solução
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