Comment obtenir la liste des fichiers qui sont en cours dans vim mis au format
-
21-09-2019 - |
Question
Je suis en train d'écrire un plugin vim dans lequel je dois déterminer tous les fichiers qui sont actuellement mis au format. C'est ceux pour lesquels diff
est réglé. Je vais le manuel mais ne pouvait pas trouver beaucoup.
Est-il possible de le faire.
Cette question est en fait lié à la question comment-to détecter la position-de-fenêtre-in-vim . Dans cette question, je tentais d'obtenir la position de la fenêtre, de manière à détecter dont l'un des diffs est la bonne et qui est de gauche. La je suis arrivé était de utiliser winnr ()
Cette solution ne peut fonctionner que s'il n'y a que deux fenêtres (ceux étant différenciés). Je veux qu'il soit générique de sorte que même si plusieurs fenêtres sont ouvertes dans vim, je peux déterminer lequel est à gauche et que l'on a raison. Voilà ce que je pensais à résoudre le problème
- Obtenir une liste de tous les tampons énumérés
- Pour chacun de ces tampons est de déterminer si
diff
1
pour que - Si
diff
est1
utilisationbufwinnr()
à l'obtient le numéro de fenêtre. - les numéros de fenêtre déterminer lequel est à gauche et que l'on a raison. à gauche on aura le numéro de fenêtre plus petite
- Et puis déterminer si le tampon courant (dans lequel
alt-left
`alt-right` est pressé) est à gauche ou à droite en utilisant winnr du tampon courant.
Maintenant, les pièces qui manquent sont 1 et 2. Pour 1 ls peuvent être utilisés mais j'ai besoin pour analyser sa sortie. Est-il un moyen straightfwd pour obtenir la liste de tous les tampons énumérés. Et est alors il un moyen de vérifier si, pour cette diff
tampon est 1 ou non.
Toutes les suggestions pour un sont également apprécié la solution plus simple.
La solution
- Cycle par tous les numéros de tampons possibles de
0
àbufnr('$')
et vérifier, si ce tampon existe en utilisantbufexists(nr)
. - Enregistrer le numéro de tampon courant en utilisant
let curbuf=bufnr('%')
. - Pour chaque tampon existant ne
execute "buffer ".bufnumber
et vérifiez variable&diff
. Rappelez-vous deux chiffres, mais ne pas vérifierbufwinnr()
. - Avez-
execute "buffer ".curbuf
. - Enfin appeler
bufwinnr(nr)
deux numéros trouvés à l'étape 3.
UPD: une autre 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