Ostatnio pojawił się dodatek do NeoVim, który pozwala otwierać terminal w buforze vim. Daje to atrakcyjne możliwości wysyłania tekstu z jednego okna vim do drugiego w celu replikacji, na przykład zachowanie podobne do REPL.
W przeszłości używałem tmux do tego rodzaju konfiguracji. Jednak teraz chciałbym to wypróbować, używając tylko NeoVim.
Moje pytanie brzmi - jak mogę wysłać blok tekstu z jednego vima podzielonego na inny? A może raczej - jak mogę zautomatyzować sekwencję zaznaczania tekstu, szarpania go, zmiany podziałów, a następnie wklejania?
źródło
p
w buforze terminala nie wchodzi w tryb terminala, więc poniższe czynności<C-\><C-N>
nie powinny być konieczne. (To powiedziawszy, jest również całkowicie nieszkodliwe.)Bufory terminali Neovim zawsze mają powiązany identyfikator zadania, więc jednym ze sposobów jest użycie interfejsu API kontroli zadania do wysłania tekstu. Dodaj to do swojego vimrc:
Który zapisze identyfikator zadania ostatnio utworzonego terminala w
g:last_terminal_job_id
zmiennej. Następnie możesz utworzyć niektóre funkcje / polecenia / odwzorowania, które wyślą dane za pomocąjobsend
funkcji, oto przykład:Powyższe spowoduje wysłanie bieżącej linii, ale możesz ją rozszerzyć, aby wysłać zaznaczenie wizualne.
źródło
Neoterm to wtyczka dla neovim, która została opracowana w tym celu. Implementuje nowe polecenie,
:TREPLSend
które pobierze bieżącą linię i wyśle ją do okna terminala. Działa dobrze dla podstawowego bash i dowolnego języka, który ma tryb REPL.źródło
Oprócz odpowiedzi tutaj zaimplementowałem wtyczkę do tego celu: vim-sendtowindow .
Zapewnia operatora wysyłania do okna , który można łączyć z dowolnym ruchem vim, aby wybrać tekst do wysłania do sąsiedniego okna. Ponadto wygodnie ustawia kursor za wysłanym tekstem i jest powtarzalny kropkowo.
Mały przykład poniżej:
źródło