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

  1. Obtenha uma lista de todos os buffers listados
  2. Para cada um desses buffers, determine se diff é 1 por isso
  3. Se diff é 1 usar bufwinnr() para obter o número da janela.
  4. A partir dos números da janela, determine qual é a esquerda e qual é a certa. Esquerda um terá um número de janela menor
  5. 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.

Foi útil?

Solução

  1. Percorrer todos os números possíveis de buffer de 0 para bufnr('$') e verifique se esse buffer existe usando bufexists(nr).
  2. Salvar o número do buffer atual usando let curbuf=bufnr('%').
  3. Para cada buffer existente, faça execute "buffer ".bufnumber e verifique &diff variável. Lembre -se de dois números, mas não verifique bufwinnr().
  4. Fazer execute "buffer ".curbuf.
  5. 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top