Comment obtenir la liste des fichiers qui sont en cours dans vim mis au format

StackOverflow https://stackoverflow.com/questions/2486420

  •  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

  1. Obtenir une liste de tous les tampons énumérés
  2. Pour chacun de ces tampons est de déterminer si diff 1 pour que
  3. Si diff est 1 utilisation bufwinnr() à l'obtient le numéro de fenêtre.
  4. 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
  5. 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.

Était-ce utile?

La solution

  1. Cycle par tous les numéros de tampons possibles de 0 à bufnr('$') et vérifier, si ce tampon existe en utilisant bufexists(nr).
  2. Enregistrer le numéro de tampon courant en utilisant let curbuf=bufnr('%').
  3. Pour chaque tampon existant ne execute "buffer ".bufnumber et vérifiez variable &diff. Rappelez-vous deux chiffres, mais ne pas vérifier bufwinnr().
  4. Avez-execute "buffer ".curbuf.
  5. 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top