尽管我正在尝试在选择了可视行的情况下调用命令,我不断收到“ No Range Allowed”错误。我缺少明显的东西吗?
function! s:get_visual_selection()
" Why is this not a built-in Vim script function?!
let [lnum1, col1] = getpos("'<")[1:2]
let [lnum2, col2] = getpos("'>")[1:2]
let lines = getline(lnum1, lnum2)
let lines[-1] = lines[-1][: col2 - (&selection == 'inclusive' ? 1 : 2)]
let lines[0] = lines[0][col1 - 1:]
return join(lines, "\n")
endfunction
augroup Terminal
au!
au TermOpen * let g:last_terminal_job_id = b:terminal_job_id
augroup END
function! REPLSend(lines)
call jobsend(g:last_terminal_job_id, lines[0])
call jobsend(g:last_terminal_job_id, "\r") " needed for the way REPL handles the input
endfunction
command! REPLSendLine call REPLSend([s:get_visual_selection()])
vnoremap <silent> <leader>l :REPLSendLine<cr>
" leader is <Space>
#1 楼
我不确定,但是我认为当您按<leader>l
调用:REPLSendLine
时,Vim会自动插入可视范围'<,'>
,并且由于您的命令未使用属性-range
进行定义,因此会引发错误。 >在外观映射中,您可能应该添加键码<C-U>
来删除可视范围(它不会影响标记'<
和'>
,它们在s:get_visual_selection()
内仍然有效): /> 此外,也许您可以尝试删除内嵌注释
" needed for the way REPL handles the input
并将其放在单独的专用行中。
评论
谢谢。 “:
– 6D65
16年4月2日在17:09