Найти тему
Блокнот математика

Рубрика "Секреты Вим". Перемещение по строке

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

Традиционный способ смещения на один символ влево и вправо стрелками работает. Альтернатива: вимовские команды h и l. Для свернутой строки стрелки вверх и вниз перемещают курсор на предыдущую/последующую сроку, а не часть этой же строки. Это поведение присуще командам g+стрелка или gk и gj. Для несвернутых строк эти команды работают как обычные стрелки, поэтому имеет смысл переопределить j на gj и k на gk.

В основном режиме <BS> тоже действует как стрелка влево. Я переопределил ее на удаление символа слева.
Аналогично и пробел работает как стрелка вправо, но у меня это вставка пробела.

Теперь более изощренные средства. Команды 0 и $ — это начало и конец строки, а I и A — вставка в начале и в конце строки. g0 — начало экранной строки (части свернутой длинной строки), g$ — конец.

Очень удобна ^ — прыгает на первый непробельный символ строки. Сочетание 0d^ удаляет пробелы-табуляции в начале строки. Парная команда g_ прыгает на последний непробельный символ. Есть g^ — первый непробельный символ экранной строки.

Команды w, e, W, E прыгают по словам (начало и конец), понимая под словом разные вещи. А b и B — прыгают назад. Есть традиционные версии этих команд: <S-→>, <S-←>, <C-→>, <C-←>. Есть ещё ge, gE, которые прыгают назад на конец слова.

Заглавные версии (W, E, B, gE) понимают под словом нечто, ограниченное пробелами, а строчные (w, e, b, ge) — обычное понятие слова как последовательность "символов слова" \w, куда входят буквы, цифры и еще кое-что вроде подчерка. Можно переопределить класс словных символов, задав их в переменной iskeyword. Пустая строка считается за слово!

Поиск символа в строке: f и t — вперед, F и T — назад. Разница в том, что f включает символ, а t — нет. Это важно при удалении: df) удалит все до скобки включительно, а dt) — до скобки, оставив ее на месте.

Команда ; повторяет предыдущую команду семейства tfTF (в том же направлении), а команда , — в обратном.

Удалить один символ позволяет x, а удалить и включить режим вставки — s. Команда x работает как Del в режиме вставки, но может принимать повторитель: 42x. Есть команда X, которая стирает символ слева от курсора, и тоже принимает повторитель. Она аналогична <BS>.

Также полезна команда r, позволяющая заменить символ под курсором, не сдвигая курсор. Кстати, очень удобно с ее помощью стирать или занулять блоки: выделяте <C-V> прямоугольный блок и нажимаете r0 — весь блок станет заполнен нулями.

Наконец, n| прыгает на символ номер n в строке. Есть еще gm, которая прыгает на середину экрана (или как можно ближе).

Потрясающий однострочник на Перле. Не мой, конечно. Двигаться по таким строкам при отладке нужно очень много...
Потрясающий однострочник на Перле. Не мой, конечно. Двигаться по таким строкам при отладке нужно очень много...