Есть ли текстовый объект для текущей строки?

Ответы:

13

Вот грубая «строчка» текстовых объектов:

xnoremap il g_o0
onoremap il :normal vil<CR>
xnoremap al $o0
onoremap al :normal val<CR>

И грубый «буферный» текст-объект:

xnoremap i% GoggV
onoremap i% :normal vi%<CR>

---РЕДАКТИРОВАТЬ---

«Оператор» является командой , которая ничего не делает сам по себе: d, yи т.д.

Нажатие этих клавиш переводит вас в «режим ожидания оператора», где Vim ждет, пока вы не скажете ему, над чем вы хотите работать… с «движением в ожидании оператора».

Вы можете использовать :omapили :onoremapдля определения пользовательских движений, ожидающих оператора. Техника, используемая здесь, вдохновлена :help omap-info:

  1. вы определяете отображение визуального режима, которое охватывает желаемую область,
  2. Вы используете это отображение в отображении, ожидающем оператора.

Обратите внимание, что я использовал, :onoremapпотому что il, alи i%еще не существует. При переопределении существующего движения или текстовом объекта - скажем , ip- вы должны использовать рекурсивное отображение: :omap.

:help :map-operator описывает немного более продвинутый метод.

См :help v_oдля oв визуальном режиме.

romainl
источник
Прохладно. Не могли бы вы объяснить несколько моментов? Что такое o(режим ожидания оператора) в onoremap? Что делает oв визуальном режиме? Я бы предположил, что это «другая сторона», потому что она, кажется, переходит на другую сторону выбора ... Как я могу найти :hна нем? Я не могу найти это с помощью :h x_oили :h o.
Линд
Объяснение добавлено.
Ромен
1

Я бы предложил дополнительное решение, чтобы использовать ^ вместо 0 (поэтому строка начинается в начале первого символа:

xnoremap il g_o^
onoremap il :normal vil<CR>
xnoremap al $o^
onoremap al :normal val<CR>

Таким образом, если мы сделаем «изменение в строке», это будет учитывать уровень отступа.

Бласко
источник
Существует также плагин, обеспечивающий эту функциональность vim master kana: github.com/kana/vim-textobj-line/blob/master/doc/…
Blasco