Вставить один символ в Vim?


25

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

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


1
Возможный дубликат кросс-сайта: stackoverflow.com/questions/1557893/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Смотрите vim.wikia.com/wiki/Insert_a_single_character для комплексного решения.
Максим Суслов

Ответы:


6

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

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

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

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


8

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

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

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

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

nnoremap <C-i> i_<Esc>r

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

nnoremap <Space> i_<Esc>r

1
Это самый краткий и простой ответ.
Dylanthepiguy

4

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

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


3
Вот команда для отображения Ctrl-I для вставки одного символа: ": nmap <Ci> i_ <esc> r"
Джонни

2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.