Есть ли способ повторить символ в режиме вставки Vim? Например, скажем, я хотел бы вставить 80 тире, что-то вроде emacs я бы набрал:
Ctrl+U 8 0 -
Единственный способ, которым я знаю, как это сделать в VIM, - это выйти из обычного режима для аргумента повторения, затем вернуться в режим вставки, чтобы ввести тире, затем выйти, чтобы вставить фактические тире, И затем вернуться в режим вставки, чтобы продолжить набор текста. Последовательность очень длинная:
Esc 8 0 a - Esc a
Было бы неплохо не переключать режимы и не выходить из них.
<C-o>
сокращение отCtrl
+o
.:normal
команда, которая позволяет запускать их из командной строки. Иногда весьма полезно.Escnic Esc Esc.
Например, Esc4iJEsc Escвыведет
JJJJ
.источник
источник
При однократном повторении:
Подробнее об одиночном повторе:
:help .
Выведет 80
-
источник
Вы также можете сделать, Escnihello there EscEsc
где, n - количество повторов.
например, Esc5ihello there EscEsc
источник
Esc
потом надо дважды нажимать . Спасибо @prashantЕсть много других способов, но, НАСКОЛЬКО, тот, который вы описываете, самый короткий. В vim предполагается, что вы в основном проводите время в командном режиме, так что это будет всего 3 нажатия клавиши + количество повторов (80i-).
Однако, если вы обнаружите, что очень часто используете эту повторяющуюся вещь, вы можете создать для этого функцию или макрос; может быть что-то вроде:
источник
Вы сказали, что было бы «хорошо» оставаться в режиме «Вставка», однако в командном режиме следующий метод позволит избежать второго ESC:
Хотя я знаю, что этот пост старый, мне жаль пропустить очевидную опцию «Вырезать / скопировать и вставить» ...
x ...порез
80 ...Количество копий
p Вставить
Примечание. Этот метод аналогичен методу, предложенному Мартином Беккетом, однако я получаю задержку при выполнении этой команды, возможно, из-за того, что режим переключается несколько раз, эта команда выполняется мгновенно.
источник
v
y
для входа в визуальный режим, затем дергать, затем80
p
80 раз вставлять. Я что-то упустил, или ты забыл шаг?Я удивлен, что этого еще никто не предложил:
В режиме вставки используйте
<C-r>=repeat('-', 80)<CR>
То есть:
repeat('-', 80)
Работает для повторения любого символа любое количество раз.
При этом используется больше нажатий клавиш, чем в ответе @romainl, но режим вставки не выходит вообще.
источник
Поздний ответ, но как бы то ни было, если вы хотите передать спам, вы можете использовать команду «повторить последнюю команду»:
.
i«Фраза» Esc -
i to insert, enter phrase/character, esc to go normal mode
. -
Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command).
Я нахожу это особенно полезным, когда я не знаю точно, сколько повторов хочу сделать, но знаю визуально, как долго я хочу, чтобы это было. В основном взрывайте,
.
пока мои глаза не будут довольны.источник
В дополнение к функции записи, которая будет повторять текст несколько раз, вы можете использовать <C-x><C-l>: если у вас уже есть строка, содержащая 80 тире, написать несколько тире в начале новой строки, а затем нажатие <C-x><C-l>завершит строки, которые начинаются с этих нескольких тире, которые будут скорее всего, эта линия с 80 тире. Раньше я так писал в файлах справки горизонтальные линии (78 тире).
источник
Для такой несложной задачи
abbreviation
надо подойти. Добавьте следующее в свой.vimrc
и с этого момента, когда вы вводите с
--
последующим пробелом (пока вы находитесь в режиме вставки),--
будет автоматически преобразовано в-
80 раз.Используя эту функцию,
repeat
вы можете повторять строку столько раз, сколько захотите.Обратите внимание, что вы можете протестировать его перед обновлением
.vimrc
, войдя вcommand
режим и выполнив следующие:iab <expr> -- repeat('-', 80)
источник
Я сделал это, не выходя из режима INSERT, выполнив следующие шаги.
-- (insert) VISUAL --
режим)i
-
Ctrl+o
v
y
Ctrl+o
80
p
Это напечатает все тире по горизонтали в одной строке.
источник