Во многих редакторах (но не в google-docs почему-то) есть режим замены, который обычно включается клавишей Insert. При этом введенный символ замещает тот, что справа от курсора (если он есть). В Вим такой режим тоже имеется, но у него есть любопытные особенности и небесполезный малоизвестный вариант. О них и речь.
Режим можно переключить из режима вставки (и обратно) той же клавишей <Ins>. А также прямо войти в режим замены из нормального режима командой R. Далее всё так, как и везде: текст замещается новым, так что длина строки не увеличивается, пока справа от курсора есть текст. После этого строка просто растет вправо, как и в режиме вставки.
Однако: при нажатии клавиши ввода символ справа от курсора не удаляется! Просто вставляется символ новой строки.
Если в тексте стоит табуляция, она будет замещена новым символом, но строка визуально сдвинется. Это важно при редактировании текстовых данных, если столбцы разделены табами. Подробнее об этом далее. Обратное тоже верно: табуляция, при заданной expandtab, заменит один символ несколькими пробелами.
Приятное отличие вимовского режима замены от классического в том, что замещаемый текст не удаляется насовсем. Дело не в том, что можно сделать отмену, это-то само собой. Но если вы заменили некий текст другим, а потом удалили его посредством <BS>, <C-W> или <C-U> (см. предыдущую заметку про режим вставки), то будет восстановлен старый текст. Пример:
I love you, Jane!
Курсор на букве J. Вы входите в режим замены и печатаете "Maria!". Получаете
I love you, Maria!
Теперь, не выходя из режима замены, вы передумали и нажимаете <BS> шесть раз.
Восстанавливается, посимвольно, предыдущий текст! Если вы ввели символ табуляции и он раскрылся в серию пробелов, то отменяться будут пробелы по одному, а после последнего вернется бывший на этом месте символ. Логично.
Всё, что сказано про спецклавиши в режиме вставки, верно и в режиме замены.
Режим виртуальной замены
Есть такой вариант. Включается из нормального режима посредством команды gR. В целом похож на режим замены, но:
символы правее курсора не смещаются, и строки ниже (и выше) тоже. Это касается, прежде всего, табуляции, потому что если ее заменить другим символом, строка станет короче. А здесь — не станет.
Это касается клавиши ввода: теперь остаток строки будет уничтожен, а курсор перейдет на начало следующей строки. Строки ниже и выше не сдвинутся с места. Новая строка не появится, если вы не в самом конце файла.
Команды для управления отступами, <C-T> и <C-D>, работают соответствующе. Первая, создавая отступ, удаляет символы в начале строки, а вторая, отменяя отступ, их возвращает.
Этот режим полезен при редактировании текстовых данных, особенно разделенных табуляциями. Особенно, если клавиша <Tab> переопределена. Можно редактировать столбец, не трогая не столбцы справа, ни слева, и ни данные ниже, ни выше. Главное, не влезть физически в следующий столбец!
Удачи, коллеги!