Existe-t-il un plugin vim qui implémente la fonction de sortie à chaud à partir du texte sublime

11

La sortie à chaud est l'une des principales fonctionnalités de l'éditeur de texte sublime. Il permet de fermer l'éditeur à tout moment sans se soucier des modifications des fichiers ouverts - il se ferme sans aucune question. Lors du nouveau lancement de ST, tous les fichiers ouverts et modifiés seront dans le même état qu'avant la fermeture.

Je me demande s'il y a un moyen de faire la même chose dans vim?

LazyS
la source
: xa quitter tout (enregistrer toutes les modifications et fermer Vim)
Sim
Cela écrit les fichiers, mais n'enregistre rien d'autre. Je pense que l'OP veut quelque chose qui à la fois enregistre les fichiers sans les écrire et enregistre l'état de tous les onglets ou tampons ouverts
EvergreenTree
Oui, je l'ai compris plus tard à partir de ses commentaires.
Sim

Réponses:

6

Vim peut le faire, même si cela peut être un peu maladroit et nécessiter une certaine configuration.

romainl vous aide à mi-chemin session. Les bits manquants sont les fichiers d'échange :preserveet le &drapeau de cpoptions.

Les fichiers d'échange sont destinés à la récupération en cas de panne de Vim ou de votre système. Ils vous permettent de récupérer toutes les modifications non enregistrées (avec certaines limitations, voir :he swap-file). Cependant, lorsque Vim se ferme normalement, il supprime tous les fichiers d'échange qu'il utilisait, même si le tampon avait des modifications non enregistrées.

C'est là :preserveet cpoptions« s &entrent en jeu . :preserveForces vim pour écrire tous les tampons à leurs fichiers d'échange immédiatement (par opposition à la norme après 4 secondes ou 200 caractères, ou quels que soient vos options ont mis à). Faire :set cpoptions+=&indique à Vim de ne pas supprimer les fichiers d'échange échangés avec :preservelors de la fermeture normale.

Malheureusement, Vim ne nettoie pas automatiquement les fichiers d'échange lors de leur récupération, vous pouvez donc bientôt vous retrouver avec un répertoire ressemblant à ceci:

.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt

Vous pouvez supprimer les plus anciens manuellement, mais Vim ne proposera automatiquement de récupérer que s'il y a un *.swpfichier où il mettra son nouveau fichier d'échange. La :recovercommande forcera Vim à rechercher les fichiers d'échange à récupérer.

En utilisant les autocommandes, vous pouvez automatiser la conservation (probablement avec l' QuitPreévénement) et la récupération (probablement avec BufReadou BufReadPost). Recover.vim est un plugin qui pourrait fonctionner comme une alternative plus conviviale pour gérer la récupération. Il semble également gérer le nettoyage des fichiers d'échange. Je ne sais pas comment il gérerait un répertoire avec un fichier .swomais pas .swp. Vous devrez peut-être encore utiliser :recoverpour ce cas.

vim-obsession est un autre plugin qui prétend faciliter la gestion des sessions.

8bittree
la source
1

Oui. Cela s'appelle "session" et vous pouvez tout lire à ce sujet dans:

:help session
romainl
la source
1
Je connais les sessions. Mais il semble que ce ne soit pas la même chose - il enregistre tous les tampons et onglets ouverts (et les paramètres) mais si vous avez des modifications dans l'un des tampons, vous devez les écrire sur le disque avant de quitter. Dans le texte sublime, vous n'avez pas besoin d'enregistrer le fichier ouvert à la sortie - sublime enregistre toutes les modifications dans un endroit séparé et les restaure à la réouverture. Le fichier d'origine est donc intact sur le disque mais les modifications ne sont pas perdues aussi
LazyS
Oui, ce serait la principale différence. Aucune idée si cela peut être réalisé de quelque manière que ce soit sans recourir à tmux / screen / detach.
romainl