How to get list of files which are currently being diffed in vim
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开发者_JS百科-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
diffis1for that - If
diffis1usebufwinnr()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.
- Cycle through all possible buffer numbers from
0tobufnr('$')and check, whether this buffer exists usingbufexists(nr). - Save current buffer number using
let curbuf=bufnr('%'). - For each existing buffer do
execute "buffer ".bufnumberand check&diffvariable. 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
加载中,请稍侯......
精彩评论