Хотя вы можете вообще избежать блочного визуального режима (захватывая диапазон строк с помощью :help getline()
, а затем фильтруя нужные столбцы с помощью matchstr()
и :help /\%v
атом), я думаю, вам лучше продолжать использовать визуальный режим.
Для автоматизации извлечения текста вы можете использовать либо макрос , либо функцию Vimscript . В обоих случаях вы будете использовать те же команды в обычном и визуальном режимах, что и во время интерактивного использования (это очень приятное свойство Vim: существует почти плавный переход от одноразовых макросов к макросам многократного использования к пользовательским функциям).
:execute "normal! g`a\<C-v>g`b\"ay"
Сохраняет блок, разделенный метками a
и b
, в регистр a
. Превращая это в функцию (которая принимает метки и регистрируется как аргументы):
function! CopyRectangle(upperLeftMark, lowerRightMark, targetRegister)
execute printf("normal! g`%s\<C-v>g`%s\"%sy",
\ a:upperLeftMark, a:lowerRightMark, a:targetRegister)
endfunction
call CopyRectangle('a', 'b', 'a')
Я надеюсь, вы можете взять его отсюда ...