我正在尝试在Neovim中进行键盘绑定,以将选定的块发送到打开的Neovim终端。我已将这些答案用作准则https://vi.stackexchange.com/a/3390/3405 https://stackoverflow.com/a/6271254/859391

尽管我正在尝试在选择了可视行的情况下调用命令,我不断收到“ 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