Подтвердить что ты не робот

Что такое правильное использование, чтобы обойти vim missing "вставить одну команду char"?

Это, возможно, не очень хороший вопрос для SO, но он прослушивал меня в течение многих лет, и Google не знал, поэтому дайте ему шанс, так как это влияет на мою работу по программированию еженедельно:

Я часто оказываюсь в ситуации, когда отсутствует один char, например "=" вместо "==", недостающее пространство, окружающее что-то с помощью кавычек/скобок и т.д.

Итак, почему vim не имеет правильной команды для вставки одного символа? Я имею в виду, что поддерживает подсчет и повторение с помощью ..

В чем обоснование, и какова правильная модель использования, которую я пропускаю, что делает эту функцию ненужной? Кажется, мне все время нужно, поэтому должна быть какая-то причина, по которой он не был добавлен в оригинальный vi уже.

Я знаю, что добавление простого базового keybinding, такого как :nmap <Space> i_<Esc>r, достаточно просто, но при выполнении простое редактирование в новой среде это довольно неудобно, и эта простая версия не работает должным образом.

PS. Если на самом деле это привязка по умолчанию, чтобы вставить только один char с общим количеством двух нажатий клавиш и оставаться в командном режиме, аналогично r, чтобы заменить один char двумя нажатиями клавиш, я обещаю щедрость 100 к первому ответу который говорит мне, что это такое.

4b9b3361

Ответ 1

Нет. Для этого нет привязки по умолчанию (do :viusage для полного списка команд нормального режима).

Если вы хотите знать, почему, вам, наверное, придется спросить Брэма Муленара или Билла Джой.

Но вот идея: r и s работают над символом под курсором. То, что они делают, довольно ограничено и одномерно, но как ваша команда будет работать?

Будет ли он работать как i, вставив этот единственный символ перед текущим символом или он будет работать как a, вставив этот единственный символ после текущего символа?

Поскольку "вставка текста" может произойти до или после текущего символа, у нас есть i и a и, скорее, нам нужны две команды для быстрой вставки одного символа.

Это делает проблему немного более сложной.

Какие ключи мы должны использовать, поскольку все алфавитные клавиши уже приняты? <C-something>? <C-i>, и также выполняется <C-a>. <C-S-i> и <C-S-a> являются непрактичными и не гарантированно работают повсюду, и что? <M-something>? Это не будет работать везде. Может быть, двухсимвольное отображение? Но какой из них и следуя какой мнемонической логике?

Ответ 2

Для меня i <Char> Esc (3 нажатия клавиш без клавиш-модификаторов) довольно короткий и встроенный. Вы уже обнаружили пользовательские сопоставления, которые уменьшают это до двух нажатий клавиш; Я также начал с вашего и со временем сделал его более продвинутым, чтобы удовлетворить моим потребностям, и добавил варианты отображения, чтобы вставить одно место в позицию или после позиции курсора.

Предположительно, нет встроенной команды, поскольку пространство клавиш (особенно для одиночных неперемещенных ключей) очень ограничено, это не оправдывает такое простое пространство, и любая альтернатива с несколькими ключами (например, Vim, которые начинаются с g) будет бесполезным с точки зрения эффективности.

Ответ 3

Я также боролся с этим вопросом, и я нашел где-то в Интернете (я не могу вспомнить, где) кто-то, кто сделал это:

:nnoremap s :exec "normal i".nr2char(getchar())."\e"<CR>

Это не идеально, потому что он не поддерживает подсчет, но его можно повторить с помощью . Я использую это сейчас, поэтому, возможно, другие пользователи тоже будут этому довольны.

Ответ 4

:nmap <Space> i_<Esc>r

Теперь, когда в обычном режиме просто нажмите пробел, а затем введите то, что вы хотите вставить.

(Повторение вставки с. не работает)

через