Récemment, il y avait un add-on à NeoVim qui permet d'ouvrir le terminal dans un tampon vim. Cela offre des possibilités intéressantes pour envoyer du texte d'une fenêtre vim à une autre en répliquant, par exemple, un comportement de type REPL.
Dans le passé, j'utilisais tmux pour ce type de configuration. Mais maintenant, je voudrais l'essayer en utilisant uniquement NeoVim.
Ma question est - comment puis-je envoyer un bloc de texte d'un split vim à un autre? Ou peut-être plutôt - comment puis-je automatiser la séquence de sélection de texte, de tirage, de changement de fractionnement puis de collage?
la source
p
dans un tampon de terminal n'entre pas en mode Terminal, donc ce qui suit<C-\><C-N>
ne devrait pas être nécessaire. (Cela dit, c'est aussi totalement inoffensif.)Les tampons de terminal Neovim ont toujours un identifiant de travail associé, donc une façon consiste à utiliser l'API de contrôle des travaux pour envoyer le texte. Ajoutez ceci à votre vimrc:
Ce qui enregistrera l'ID de travail du dernier terminal créé dans la
g:last_terminal_job_id
variable. Ensuite, vous pouvez créer des fonctions / commandes / mappages qui enverront les données à l'aide de lajobsend
fonction, voici un exemple:Ce qui précède enverrait la ligne actuelle, mais vous pouvez l'étendre pour envoyer une sélection visuelle.
la source
Neoterm est un plugin pour neovim développé à cet effet. Il implémente une nouvelle commande
:TREPLSend
qui prendra la ligne courante et l'enverra dans une fenêtre de terminal. Fonctionne bien pour bash basique et toute langue qui a un mode REPL.la source
En plus des réponses ici, j'ai implémenté un plugin à cet effet: vim-sendtowindow .
Il fournit un opérateur d' envoi vers la fenêtre qui peut être combiné avec n'importe quel mouvement vim afin de sélectionner le texte à envoyer à la fenêtre adjacente. De plus, il positionne commodément le curseur après le texte envoyé et est répétable par points.
Un petit exemple ci-dessous:
la source