VIM: Отправить визуальный блок для внешней команды

Как отправить визуальный блок внешней команде?

Я выбираю свой блок, используя Ctrl-q, а затем нажмите! program_name, но vim отправляет целые строки, а не выбранные текстовые блоки.

Я использую gvim в Windows 10.

vim,

3

Ответов: 2


2

Vim всегда посылает всю строку на внешние команды, но вы можете сделать это, используя функцию ответа romainl в этом вопросе:

Отправка визуального выделения во внешнюю программу без влияния на буфер

Передача нелинейного выбора во внешнюю программу выполняется следующим образом:

  • резервное копирование содержимого регистра
  • выберите выбор в этом регистре
  • передать содержимое этого регистра в system () и вывести результат
  • восстановить регистр

Вот он, в функции:

function! VisualCountWords() range
    let n = @n
    silent! normal gv"ny
    echo "Word count:" . system("echo '" . @n . "' | wc -w")
    let @n = n
    " bonus: restores the visual selection
    normal! gv 
endfunction

которые вы можете использовать в сопоставлении следующим образом:

xnoremap <F6> :call VisualCountWords()<CR>


2

Команды Ex основаны на линиях, тогда как в блочном визуальном режиме это расширение Vim. Это объясняет несоответствие функции.

Vis.vim плагин дает :Bкоманду , которая позволяет передавать фактический выбранный блок команды Ex. Он также работает :!, поэтому вы можете делать такие вещи:

:'<,'>B !tr 'a-z' 'A-Z'
ВИМ,