You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.9 KiB
47 lines
1.9 KiB
2 weeks ago
|
function! SendVisualToHttp() range
|
||
|
let url = 'https://typograf.ru/webservice/?chr=UTF-8'
|
||
|
" Получаем выделенный текст
|
||
|
let [line_start, column_start] = getpos("'<")[1:2]
|
||
|
let [line_end, column_end] = getpos("'>")[1:2]
|
||
|
let lines = getline(line_start, line_end)
|
||
|
|
||
|
" Корректируем для выделения в пределах строки
|
||
|
if line_start == line_end
|
||
|
let text = lines[0][column_start-1 : column_end-1]
|
||
|
else
|
||
|
if column_start > 1
|
||
|
let lines[0] = lines[0][column_start-1 :]
|
||
|
endif
|
||
|
if column_end < strlen(lines[-1])
|
||
|
let lines[-1] = lines[-1][ : column_end-1]
|
||
|
endif
|
||
|
let text = join(lines, "\n")
|
||
|
endif
|
||
|
|
||
|
" URL-кодируем текст
|
||
|
let encoded_text = substitute(system('python3 -c "import urllib.parse; print(urllib.parse.quote(input()))"', text), '\n', '', 'g')
|
||
|
|
||
|
" Формируем полный URL
|
||
|
let full_url = url . (stridx(url, '?') == -1 ? '?' : '&') . 'text=' . encoded_text
|
||
|
|
||
|
" Отправляем запрос и получаем ответ
|
||
|
let response = system('curl -s -X POST ' . shellescape(full_url))
|
||
|
|
||
|
" Заменяем выделенный текст на ответ
|
||
|
if line_start == line_end
|
||
|
let new_line = lines[0][: column_start-2] . response . lines[0][column_end :]
|
||
|
call setline(line_start, new_line)
|
||
|
else
|
||
|
" Удаляем старые строки
|
||
|
execute line_start . ',' . line_end . 'd'
|
||
|
|
||
|
" Вставляем ответ (разбиваем по строкам если нужно)
|
||
|
let response_lines = split(response, '\n')
|
||
|
call append(line_start-1, response_lines)
|
||
|
endif
|
||
|
|
||
|
echo "Текст заменён ответом от сервера"
|
||
|
endfunction
|
||
|
|
||
|
command! -range -nargs=0 HttpSend <line1>,<line2>call SendVisualToHttp()
|