Всем привет, с Вами еженедельная рубрика "Секреты Вим"! Сегодня поговорим о перемещении в пределах строки. Строка может быть короткой, умещающейся на экран, а может быть длинной, уходящей вправо или свернутой в несколько строк на экране.
Традиционный способ смещения на один символ влево и вправо стрелками работает. Альтернатива: вимовские команды 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, которая прыгает на середину экрана (или как можно ближе).