Можно ли определить текстовый объект в vim, который будет действовать в прямоугольной области?
Например, предположим, что у меня есть вертикально выровненные столбцы текста, например:
column 1 co column 2 col
lumn 1 colu umn 2 column
mn 1 column 2 column 2 c
1 column 1 olumn 2 colu
Можно ли было бы определить текстовый объект c
для столбцов, такой, который dac
бы удалял столбец, yac
выдергал его, cac
изменил бы его и т. Д.?
(Я знаю о Control-V для выбора прямоугольной области, и я знаю, что вы можете затем использовать d
и y
т. Д. Для удаления, восстановления и т. Д. Выбранной области. Но мне особенно любопытно, что возможно при использовании текстовых объектов.)
cursor-motions
custom-text-object
Лия Веллеман
источник
источник
Ответы:
Да, это возможно @PeterRincker предлагает плагин textobj-слово-столбец , который определяет четыре текстовых объектов (
ic
,ac
,iC
иaC
) для столбцов на основе слов.Идея этой функции состоит в том, чтобы создать функцию, которая определяет движение на основе столбцов, а затем сопоставить эту функцию соответствующим образом с отображениями режима визуального выбора / выбора и отображениями, ожидающими оператора. Чтобы использовать вышеупомянутый плагин в качестве примера, он создает следующие сопоставления:
Здесь
TextObjWordBasedColumn(...)
определяет движение столбца и отображается как в режим просмотра / выбора с помощью, такxnoremap
и в режим ожидания оператора с помощьюonoremap
. Обратите внимание, что функция немного сложна для обработки неопределенности и для поиска соответствующих границ движения.источник
Является ли это возможным? Абсолютно! Случай и точка: textobj-word-column.vim .
Как сделать свои собственные текстовые объекты
Обычно визуальный режим используется для создания нового текстового объекта. Визуальный режим может быть линейным, символьным (обычно) или визуальным блоком. Вот основы того, что вам нужно:
a{char}
илиi{char}
где{char}
является и описательной и неиспользованной. например,i/
в качестве примера текстового объекта между/
's.T/
t/
v
xnoremap
.onoremap
и:normal
.Теперь для примера нашего простого,
i/
который создает текстовый объект между/
's:Пока вы следуете основным компонентам, вы можете создавать текстовые объекты для всех видов вещей.
Расширенное создание текстовых объектов с помощью vim-textobj-user
ВИМ-textobj пользователь плагин обеспечивает общий способ определения пользовательских текстовых объектов в более декларативной форме. Например, вот текстовый объект тега php:
Для получения дополнительной помощи с ВИМ-textobj пользователю увидеть его помощь документ:
:h textobj-user-introduction
.Для получения дополнительной помощи
А также вики-страница Создание новых текстовых объектов Vim.
источник