Как получить список файлов, которые в настоящее время различаются в VIM

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

  •  21-09-2019
  •  | 
  •  

Вопрос

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

Можно ли сделать это.

Этот вопрос фактически связан с вопросом как сделать определение поставки поставки Window-in-VimАнкет В этом вопросе я пытался получить позицию окна, чтобы определить, какой из дифференциаций является правым, а какая. А решение Я получил, чтобы использовать Winnr ()

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

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

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

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

Это было полезно?

Решение

  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top