2010-03-21 6 views
3

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

Возможно ли это.

Этот вопрос фактически связан с вопросом how-to-detect-the-position-of-window-in-vim. В этом вопросе я пытался получить положение окна, чтобы определить, какой из различий является правильным и который остается одним. solution я получил использовать winnr()

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

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

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

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

ответ

3
  1. Цикл по всем возможным номерам буфера от 0 до bufnr('$') и проверить, существует ли этот буфер с помощью bufexists(nr).
  2. Сохраните текущий номер буфера, используя let curbuf=bufnr('%').
  3. Для каждого существующего буфера сделайте execute "buffer ".bufnumber и отметьте &diff переменной. Помните два числа, но не проверяйте bufwinnr().
  4. Do 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 

 Смежные вопросы

  • Нет связанных вопросов^_^