Как получить список файлов, которые в настоящее время различаются в VIM
-
21-09-2019 - |
Вопрос
Я пишу плагин VIM, в котором мне нужно определить все эти файлы, которые в настоящее время различаются. Это те, для которых diff
установлен. Я прошел через руководство, но не мог найти много.
Можно ли сделать это.
Этот вопрос фактически связан с вопросом как сделать определение поставки поставки Window-in-VimАнкет В этом вопросе я пытался получить позицию окна, чтобы определить, какой из дифференциаций является правым, а какая. А решение Я получил, чтобы использовать Winnr ()
Это решение может работать только в том случае, если есть только 2 окна (те, которые имеют разное). Я хочу сделать его общим, так что даже если в VIM открывается несколько окон, я могу определить, какой из них слева, а какой из них прав. Это то, что я думал решить проблему
- Получите список всех перечисленных буферов
- Для каждого из этих буферов определяют,
diff
является1
для этого - Если
diff
является1
использоватьbufwinnr()
получить номер окна. - Из номеров окна определяют, какой из них остается, а какой - правый. оставленный, у него будет меньший номер окна
- А затем определите, является ли текущий буфер (в котором
alt-left
`alt-right нажат) влево или справа с использованием Winnr тока буфера.
Теперь отсутствующие кусочки, составляют 1 и 2. Для 1 LS можно использовать, но мне нужно проанализировать его выход. Есть ли прямой способ получить список всех перечисленных буферов. А потом есть ли способ проверить, если для этого буфера diff
1 или нет.
Любые предложения для более простого решения также оценены.
Решение
- Циклически через все возможные числа буферов из
0
кbufnr('$')
и проверьте, существует ли этот буфер с помощьюbufexists(nr)
. - Сохранить текущий номер буфера с помощью
let curbuf=bufnr('%')
. - Для каждого существующего буфера
execute "buffer ".bufnumber
и проверить&diff
переменная. Помните два числа, но не проверяйтеbufwinnr()
. - Делать
execute "buffer ".curbuf
. - Наконец позвони
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