问题
I am writing a vim plugin in which i need to determine all those files which are currently being diffed. That is the ones for which diff
is set. I have been going through the manual but could not find much.
Is it possible to do this.
This question is actually related to question how-to-detect-the-position-of-window-in-vim. In that question i was trying to get the position of window, so as to detect which one of the diffs is the right one and which is left one. The solution i got was to use winnr()
That solution can work only if there are only 2 windows(the ones being diffed). I want to make it generic so that even if multiple windows are open in vim, i can determine which one is on left and which one is right. This is what i was thinking to solve the problem
- Get a list of all listed buffers
- For each of this buffers determine if
diff
is1
for that - If
diff
is1
usebufwinnr()
to gets it window number. - From the window numbers determine which one is left and which one is right. left one will have smaller window number
- And then determine if current buffer(in which
alt-left
`alt-right` is pressed) is left or right using winnr of current buffer.
Now the pieces that are missing are 1 and 2. For 1 ls can be used but i need to parse its output. Is there a straightfwd way to get list of all listed buffers. And then is there a way to check if for that buffer diff
is 1 or not.
Any suggestions for a simpler solution are also appreciated.
回答1:
- Cycle through all possible buffer numbers from
0
tobufnr('$')
and check, whether this buffer exists usingbufexists(nr)
. - Save current buffer number using
let curbuf=bufnr('%')
. - For each existing buffer do
execute "buffer ".bufnumber
and check&diff
variable. Remember two numbers, but do not checkbufwinnr()
. - Do
execute "buffer ".curbuf
. - Finally call
bufwinnr(nr)
for two numbers found in step 3.
UPD: another solution
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
来源:https://stackoverflow.com/questions/2486420/how-to-get-list-of-files-which-are-currently-being-diffed-in-vim