Kürzlich gab es ein Add-On zu NeoVim, das das Öffnen des Terminals in einem VIM-Puffer ermöglicht. Dies bietet attraktive Möglichkeiten, Text von einem VIM-Fenster zu einem anderen zu senden, um beispielsweise ein REPL-ähnliches Verhalten zu reproduzieren.
In der Vergangenheit habe ich tmux für diese Art der Konfiguration verwendet. Jetzt möchte ich es jedoch nur mit NeoVim ausprobieren.
Meine Frage ist - wie kann ich einen Textblock von einem Vim Split zu einem anderen senden? Oder vielleicht eher - wie kann ich die Abfolge des Auswählens, Ziehens, Änderns von Teilungen und anschließenden Einfügens von Text automatisieren?
quelle
p
in einem Terminal-Puffer nicht in den Terminal-Modus, so dass Folgendes<C-\><C-N>
nicht erforderlich sein sollte. (Das heißt, es ist auch völlig harmlos.)Neovim-Terminalpuffer haben immer eine zugeordnete Job-ID. Eine Möglichkeit besteht darin, die Jobsteuerungs-API zum Senden des Texts zu verwenden. Fügen Sie dies zu Ihrem vimrc hinzu:
Damit wird die Job-ID des zuletzt erstellten Terminals in der
g:last_terminal_job_id
Variablen gespeichert. Anschließend können Sie einige Funktionen / Befehle / Zuordnungen erstellen, die die Daten mithilfe derjobsend
Funktion senden. Hier ein Beispiel:Das obige würde die aktuelle Zeile senden, aber Sie können sie erweitern, um eine visuelle Auswahl zu senden.
quelle
Neoterm ist ein Plugin für Neovim, das für diesen Zweck entwickelt wurde. Es implementiert einen neuen Befehl,
:TREPLSend
der die aktuelle Zeile aufnimmt und an ein Terminalfenster sendet. Funktioniert gut für Basic Bash und jede Sprache, die einen REPL-Modus hat.quelle
Zusätzlich zu den Antworten hier habe ich ein Plugin für diesen Zweck implementiert: vim-sendtowindow .
Es bietet einen Send-to-Window- Operator, der mit jeder vim-Bewegung kombiniert werden kann, um Text zum Senden an das benachbarte Fenster auszuwählen. Außerdem positioniert es den Cursor bequem hinter dem gesendeten Text und ist punktwiederholbar.
Ein kleines Beispiel unten:
quelle