#python-3.x #vim
Вопрос:
Я использую следующую функцию, чтобы получить выбранный тест
let s:drawscript = "somerandom.py"
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
normal gv
return result
endfunc
vnoremap <tab><tab> :<c-u>call Box(GetSelectedText())<CR>
func! Box(text)
let s:b = '"' . a:text . '"'
echom s:b
" exec boxcmd
"echom 'hi'
let c = ["python3", s:drawscript, s:b]
execute ":.!".join(c, " ")
endfunc
Я пытаюсь передать выбранный текст в свой файл python, это работает, когда я выбираю только 1 строку, но когда я выбираю несколько строк, в выбранном тексте есть символы»^@», которые вызвали автоматическое выполнение, что приводит к ошибке. Я просто хочу передать выбранный мной текст в файл .py.
Комментарии:
1. Вам нужно будет заменить любой нежелательный символ чем-то более удобным. Видеть
:help substitute()
. Также обратите внимание, что:.!
работает на всей текущей линии. Похоже, вы подходите к своей проблеме с неправильной точки зрения.
Ответ №1:
Это вопрос экранирования специальных символов для оболочки. Хотя вы правильно подумали о цитировании текста, вы пропустили, чтобы избежать разделителя строк. Есть функция shellescape()
, которая заботится об этом и многом другом, так что вы можете заменить
let s:b = '"' . a:text . '"'
Автор:
let s:b = shellescape(a:text, 1)