VimL: Как отправлять строки в буфер обмена? - PullRequest
1 голос
/ 10 апреля 2020

Я новичок ie для сценариев vim. Я уже искал страницы справки, но не мог найти правильное ключевое слово.

Я написал небольшую функцию для получения двух определенных номеров строк:

let l:pattern  = '^#%%'
let l:start    = search(l:pattern, 'Wb')
let l:end      = search(l:pattern,'W')
if l:end == 0
    let l:end = line('$')
end
let lines = getline(start,end)

Я хочу написать строки в диапазоне [начало, конец] до буфера обмена. Как это сделать?

1 Ответ

2 голосов
/ 10 апреля 2020

Если ваш Vim создан с поддержкой буфера обмена (:echo has('clipboard') возвращает 1), то вы можете поместить текст в регистр * (выбор / щелчок правой кнопкой мыши) или в регистр + (Ctrl + C / Ctrl) + V) с:

let @+ = 'foo'
let @* = 'foo'

В настройках vimscript лучше использовать :help setreg(), так как это дает вам больший контроль над тем, что в действительности происходит в регистре и как его можно использовать. В вашем случае следующая команда:

call setreg('+', lines, 'l')

должна заполнить регистр буфера обмена содержимым lines и пометить его как «linewise».

Или вы можете сделать менее элегантный но гораздо проще рассуждать о:

execute l:start . ',' . l:end . 'y +'

См. :help :yank и :help :range.

Если у вас нет поддержки буфера обмена, вам придется передать эти строки в внешний инструмент, такой как xclip на Linux или pbcopy на MacOS:

execute l:start . ',' . l:end . 'w !pbcopy'

См. :help :w_c.

...