Thursday, October 25, 2018

Re: Paste into a :term window?

On 25/10/2018 17:32, Kelvin Lawrence wrote:
> I'm enjoying the new :term feature in 8.1
>
> I have my code on the left and a job running on the right. The job is a console environment for Groovy. Is there an easy way to copy from the code on the left and paste into the console I have running on the right? I know I cannot turn modifiable on but is there any way to send a paste command to the :term job?

I use code similar to this:

nnoremap <silent> <leader>x :<c-u>call TermSend([getline('.')])<cr>
vnoremap <silent> <leader>x :<c-u>call TermSend(GetSelection())<cr>

fun! TermSend(lines)
if empty(get(b:, 'bound_terminal', '')) ||
\ !bufexists(b:bound_terminal)
let b:bound_terminal = str2nr(input('Terminal buffer: '))
endif
for l:line in a:lines
call term_sendkeys(b:bound_terminal, l:line . "\r")
endfor
call cursor(line('.') + 1, 1) " Move to the next line
endf

fun! GetSelection()
if getpos("'>") != [0, 0, 0, 0]
let [lnum1, col1] = getpos("'<")[1:2]
let [lnum2, col2] = getpos("'>")[1:2]
let l:lines = getline(lnum1, lnum2)
let l:lines[-1] = lines[-1][:col2-(&selection=='inclusive'?1:2)]
let l:lines[0] = l:lines[0][col1 - 1:]
return l:lines
else
return []
end
endf

Then typing \x will send the current line or the current selection to
a terminal buffer (the first time, you are prompted to choose the
buffer's number). The function sends one line at a time: it is slower
than sending the whole text in one swoop, but I have found it to be more
reliable.

Now, if only there was a simpler way to get the currently selected text…

Enjoy,
Life.

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: