Как получить список файлов, которые в настоящее время проверяются в vim - PullRequest
3 голосов
/ 21 марта 2010

Я пишу плагин vim, в котором мне нужно определить все те файлы, которые в настоящее время проверяются.Это те, для которых установлено diff.Я изучал руководство, но не смог найти много.

Возможно ли это сделать?

Этот вопрос на самом деле связан с вопросом как обнаружитьпозиционно-из-окна-в-Vim .В этом вопросе я пытался определить положение окна, чтобы определить, какой из различий является правильным, а какой - левым.Решение , которое я получил, состояло в том, чтобы использовать winnr ()

Это решение может работать, только если есть только 2 окна (те, которые выводятся).Я хочу сделать его общим, чтобы даже если в vim открыто несколько окон, я могу определить, какое из них слева, а какое - справа.Это то, что я думал, чтобы решить проблему

  1. Получить список всех перечисленных буферов
  2. Для каждого из этих буферов определить, является ли diff 1 для этого
  3. Если diff равен 1, используйте bufwinnr(), чтобы получить номер окна.
  4. Из номеров окон определите, какой из них слева, а какой - справа.левый будет иметь меньший номер окна
  5. , а затем определить, будет ли текущий буфер (в котором нажата alt-left `alt-right`) левым или правым, используя winnr текущего буфера.

Теперь недостающие части - 1 и 2. Для 1 лс можно использовать, но мне нужно проанализировать его вывод.Есть прямой способ получить список всех перечисленных буферов.И затем есть способ проверить, для этого буфера diff равен 1 или нет.

Любые предложения для более простого решения также приветствуются.

1 Ответ

3 голосов
/ 21 марта 2010
  1. Просмотрите все возможные номера буферов от 0 до bufnr('$') и проверьте, существует ли этот буфер, используя bufexists(nr).
  2. Сохранить текущий номер буфера, используя let curbuf=bufnr('%').
  3. Для каждого существующего буфера выполните execute "buffer ".bufnumber и проверьте &diff переменную. Запомните два числа, но не проверяйте bufwinnr().
  4. До execute "buffer ".curbuf.
  5. Наконец, позвоните bufwinnr(nr) для двух номеров, найденных в шаге 3.

UPD: другое решение

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
...