web-dev-qa-db-fra.com

Actualisez tous les fichiers du tampon à partir du disque dans vim

La commande pour actualiser un fichier à partir de la version sur disque est :e!

Comment puis-je faire de même pour tous les fichiers du tampon?

Contexte: J'en ai besoin parce que j'utilise git avec plusieurs branches avec un vim ouvert qui contient un tampon. Lorsque je passe une commande dans une succursale, j'aimerais avoir une actualisation de vim.

120
odwl

Lisez la documentation de bufdo, il devrait faire ce que vous voulez.

84
pmf

La commande :checkt[ime] Est conçue à cet effet.

Il vous invitera à recharger tous les tampons qui ont changé; si vous souhaitez ignorer l'invite, vous pouvez faire :set autoread au préalable (vous obtiendrez toujours une invite sur les tampons avec les modifications locales non enregistrées).

Cela évite également le problème de mise en évidence de la syntaxe mentionné par Steven Lu sur la réponse acceptée; :bufdo Désactive la coloration syntaxique par conception .

Trouvé via: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

116
Paul Fenney

Voici ce que j'ai fini par mettre dans mon .vimrc:

fun! PullAndRefresh()
  set noconfirm
  !git pull
  bufdo e!
  set confirm
endfun

nmap <leader>gr call PullAndRefresh()
18
Ivan

De :help autoread:

Lorsqu'un fichier a été détecté comme ayant été modifié en dehors de Vim et qu'il n'a pas été modifié à l'intérieur de Vim, relisez-le automatiquement. Lorsque le fichier a été supprimé, cela n'est pas fait.

Si, comme moi, vous voulez juste toujours passivement recharger les tampons périmés mais non modifiés, cela semble devoir faire le travail.

Cependant, le détail final est lorsque vim remarque le tampon périmé. Cela peut être forcé avec checktime. Si vous avez événements de focus configurés , alors nous pouvons exécuter checktime chaque fois que nous obtenons le focus comme ceci:

set autoread
autocmd FocusGained * checktime

Cette réponse a également quelques détails intéressants.

7
phs

Comme @Matthew S l'a mentionné ici https://vi.stackexchange.com/a/462 , vous pouvez utiliser:

:set noconfirm
:bufdo !e
:set confirm
0
MOHRE