Чи є текстовий об’єкт для поточного рядка?


Відповіді:


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в візуальному режимі.


Класно. Ви не проти пояснити кілька фрагментів? Що таке o(режим очікування оператора) в режимі onoremap? Що робить oу візуальному режимі? Я б здогадався, що це "інша сторона", тому що вона, схоже, переходить на іншу сторону відбору ... Як я можу знайти :hїї? Я не можу його знайти за допомогою :h x_oабо :h o.
lindhe

Пояснення додано.
romainl

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,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.