Das Zuordnen eines Befehls im visuellen Modus führt zu Fehler E481: Kein Bereich zulässig

9

Ich versuche, in Neovim eine Tastaturbindung herzustellen, die einen ausgewählten Block an das geöffnete Neovim-Terminal sendet. Ich habe diese Antworten als Richtlinien verwendet. Https://vi.stackexchange.com/a/3390/3405 https://stackoverflow.com/a/6271254/859391

Wenn ich jedoch versuche, den Befehl mit einer ausgewählten visuellen Linie aufzurufen, wird immer wieder der Fehler "Kein Bereich zulässig" angezeigt. Vermisse ich etwas Offensichtliches?

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>
6D65
quelle

Antworten:

9

Ich bin mir nicht sicher, aber ich denke, wenn Sie <leader>lzum Anrufen :REPLSendLinedrücken, fügt Vim automatisch den visuellen Bereich ein '<,'>. Da Ihr Befehl nicht mit dem Attribut definiert ist -range, wird ein Fehler ausgelöst.

In Ihrer visuellen Zuordnung sollten Sie wahrscheinlich den Schlüsselcode hinzufügen <C-U>, um den visuellen Bereich zu entfernen (dies wirkt sich nicht auf die Markierungen aus '<und '>sie sind im Inneren weiterhin gültig s:get_visual_selection()):

vnoremap <silent> <leader>l :<C-U>REPLSendLine<cr>

Vielleicht können Sie auch versuchen, den Inline-Kommentar zu entfernen " needed for the way REPL handles the inputund ihn in eine separate und dedizierte Zeile zu setzen.

user9433424
quelle
Vielen Dank. ": <CU>" hat es geschafft. Außerdem habe ich den Kommentar nur für diese Frage hinzugefügt, um klarer zu machen, was ich wollte.
6D65