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>

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.