19

В Vim (7.2) есть команда нормального режима r для замены одного символа другим. Например, ввод rX заменит один символ под курсором на X а затем вернет вас в обычный режим.

Есть ли команда нормального режима, чтобы вставить один символ и затем вернуться в нормальный режим?

4 ответа4

6

MelBurslan прав, что эта функция изначально не существует, но создание определяемой пользователем команды на самом деле не способ ее создания. Я возился несколько минут и придумал это:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

Который использует некоторую хитрость Vim, включающую "помещение" текста из регистра, в данном случае регистр "выражения". Выражение, включаемое в регистр, - это « nr2char(getchar()) », который вернет строку из одного символа.

Причина, по которой я построил сопоставление таким образом, заключается в том, что получение пользовательского ввода "на полпути" сопоставления сложно и может вести себя непредсказуемо; даже это отображение опустит курсор вниз в область состояния, ожидая, пока пользователь введет символ.

4

Спасибо Джонни за этот потрясающий ответ в комментариях ниже:

":nmap <C-i> i_<Esc>r"

Это сопоставляет Control + i для вставки одного символа, и делает это очень лаконично.

В вашем файле vimrc это будет выглядеть так:

nnoremap <C-i> i_<Esc>r

Я изменил свое отображение, чтобы использовать пробел, и вы можете изменить свой на предпочитаемые ключи:

nnoremap <Space> i_<Esc>r
4

Насколько я знаю, такой функции нет ни в одном широко распространенном воплощении редактора vi, но в vim есть возможность создавать собственные команды. Ранее это обсуждалось здесь: в этой теме

Вы можете создать собственную команду, выполняя то, что вы хотите.

0

Простой способ сделать это - использовать команды Cut x и Put p. Скажите, что * это символ, который вы хотите вставить. Вставьте его, используя i * Esc. Затем нажмите х. Это сократит характер. Теперь вы можете нажать p, чтобы поставить один символ. Если вам нужно вставить этот символ 300 раз, вы можете ввести: 300p .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .