Ánh xạ một lệnh trong Chế độ trực quan dẫn đến lỗi E481: Không có phạm vi nào được nhắc đến


9

Tôi đang cố gắng tạo một ràng buộc bàn phím trong Neovim để gửi một khối được chọn đến thiết bị đầu cuối Neovim đã mở. Tôi đã sử dụng những câu trả lời này làm hướng dẫn https://vi.stackexchange.com/a/3390/3405 https://stackoverflow.com/a/6271254/859391

Mặc dù khi tôi đang cố gắng gọi lệnh bằng Visual Line đã chọn, tôi vẫn tiếp tục gặp lỗi Không có phạm vi cho phép. Tôi có thiếu một cái gì đó rõ ràng?

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>

Câu trả lời:


9

Tôi không chắc chắn, nhưng tôi nghĩ rằng khi bạn nhấn <leader>lđể gọi :REPLSendLine, Vim sẽ tự động chèn phạm vi hình ảnh '<,'>và vì lệnh của bạn không được xác định với thuộc tính -range, nó sẽ gây ra lỗi.

Trong ánh xạ trực quan của bạn, có lẽ bạn nên thêm mã khóa <C-U>để xóa phạm vi hình ảnh (nó sẽ không ảnh hưởng đến các dấu '<'>chúng sẽ vẫn còn hiệu lực bên trong s:get_visual_selection()):

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

Ngoài ra, có lẽ bạn có thể thử xóa nhận xét nội tuyến " needed for the way REPL handles the inputvà đặt nó trên một dòng riêng và dành riêng.


Cảm ơn bạn. ": <CU>" đã thực hiện thủ thuật. Ngoài ra, nhận xét tôi chỉ thêm nó cho câu hỏi này, để làm rõ hơn những gì tôi sẽ làm.
6D65
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.