Как скопировать прямоугольные области без визуализации в Vim - PullRequest
0 голосов
/ 08 ноября 2018

В настоящее время я редактирую огромное количество табличных данных в Vim и хотел бы сгладить рабочий процесс, вводя визуальный режим только в случае крайней необходимости. Я знаю, что одним из способов выбора строк и столбцов в табличном блокноте является включение режима визуального блока с помощью комбинации <C-v>. Но это требует от меня выполнения операции по одному блоку за раз. Я бы предпочел пометить верхние левые углы столбцов ma, mc, me и т. Д., А нижние правые углы mb, md, mf и т. Д., И затем скопируйте регионы в регистры с помощью чего-то вроде 'a' ay 'b,' c 'ay' d и т. д. (с галочками, замененными обратными галочками). Однако стандартная копия обрабатывает текст по обычным движениям, пересекающим разрывы строк, а не по прямоугольным движениям, подходящим для блоков таблицы. Есть ли способ ограничить копию прямоугольным блоком?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Если вы хотите повторно выбрать ту же визуальную область, что и в прошлый раз, вы можете просто использовать счетчик для команды Ctrl V .

Например, вы выбралив прошлый раз область 3х3 с помощью Ctrl V и скопировала ее.Теперь вы перемещаете курсор на 10 строк ниже в другую область.Если вы сейчас нажмете, например, 1 Ctrl V Vim создаст новую блочную область, начиная с позиции курсора вниз, с тем же размером, что и в прошлый раз (если вынужна область, которая в два раза больше, используйте счет 2 (например, счет действует как множитель).

0 голосов
/ 08 ноября 2018

Хотя вы можете вообще избежать блочного визуального режима (захватывая диапазон строк с помощью :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')

Я надеюсь, вы можете взять его отсюда ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...