31 lines
1.1 KiB
VimL
31 lines
1.1 KiB
VimL
|
def g:SendRangeToTerminal(start_line: number, end_line: number)
|
||
|
const terms = term_list()
|
||
|
if terms->empty()
|
||
|
echomsg "No Terminal windows found"
|
||
|
return
|
||
|
endif
|
||
|
var line_num = start_line
|
||
|
for line in getline(start_line, end_line)
|
||
|
line_num += 1
|
||
|
const spl_cmd = line->matchlist('\vVIMST (sleep|ctrl) ([0-9]+|[a-z])')
|
||
|
if !spl_cmd->empty()
|
||
|
const [_, cmd, arg1; _] = spl_cmd
|
||
|
if cmd == "sleep"
|
||
|
timer_start(str2nr(arg1), (_) => g:SendRangeToTerminal(line_num, end_line))
|
||
|
return
|
||
|
elseif cmd == "ctrl"
|
||
|
terms[0]->term_sendkeys(nr2char(char2nr(arg1) - 96))
|
||
|
continue
|
||
|
endif
|
||
|
endif
|
||
|
terms[0]->term_sendkeys(line .. "\<CR>")
|
||
|
endfor
|
||
|
enddef
|
||
|
|
||
|
command -range -bar SendToTerm :call g:SendRangeToTerminal(<line1>, <line2>)
|
||
|
vnoremap <silent><leader>s :SendToTerm<CR>
|
||
|
nnoremap <silent><leader>s :SendToTerm<CR>
|
||
|
|
||
|
autocmd BufNewFile,BufRead cheat.sh nnoremap <buffer> <CR> :SendToTerm \| norm j<CR>
|
||
|
autocmd BufNewFile,BufRead cheat.sh nnoremap <buffer> <silent><2-LeftMouse> :SendToTerm<CR>
|