ビジュアルモードでコマンドをマッピングすると、エラーE481が発生する


9

選択したブロックを開いたNeovim端末に送信するキーボードバインディングをNeovimで作成しようとしています。これらの回答をガイドラインとして使用しましたhttps://vi.stackexchange.com/a/3390/3405 https://stackoverflow.com/a/6271254/859391

Visual Lineを選択してコマンドを呼び出そうとすると、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>

回答:


9

よくわかりませんが、を押す<leader>l:REPLSendLine、Vimが自動的に視覚範囲を挿入し、'<,'>コマンドが属性-rangeで定義されていないため、エラーが発生します。

あなたの視覚的なマッピングでは、おそらくキーコードを追加する必要があります<C-U>(それがマークには影響しません視覚的な範囲を削除する'<'>、彼らはまだ有効の内側になり、s:get_visual_selection()):

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

また、インラインコメント" needed for the way REPL handles the inputを削除して、別の専用の行に配置することもできます。


ありがとうございました。":<CU>"がトリックを行いました。また、私が何をしようとしているかをより明確にするために、この質問に対してのみ追加したコメント。
6D65
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.