Повторяющиеся символы в режиме VIM INSERT -- vim пол Связанный проблема

Repeating characters in VIM insert mode


146
vote

проблема

русский

Есть ли способ повторять символ во время режима вставки Vim? Например, скажем, я хотел бы вставить 80 тире, в чем-то вроде Emacs, я бы набрал:

Ctrl + U 8 0 -

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

ESC 8 0 A - ESC A

Было бы неплохо не включать и выходить из режимов.

Английский оригинал

Is there a way of repeating a character while in Vim's insert mode? For example, say I would like to insert 80 dashes, in something like emacs I would type:

Ctrl+U   8 0 -

The only way I know how to do it in VIM is to exit normal mode for the repeat argument, then go back into insert mode to type the dash, then exit to insert the actual dashes, AND then go back into insert mode to carry on typing. The sequence is a really long:

Esc 8 0 a - Esc a

It would be nice not to switch in and out of modes.

</div
  

Список ответов

21
 
vote
vote
Лучший ответ
 

Слегка другая версия решения eelvex:

 <код> function! Repeat()     let times = input("Count: ")     let char  = input("Char: ")     exe ":normal a" . repeat(char, times) endfunction  imap <C-u> <C-o>:call Repeat()<cr>   
 

Slightly different version of Eelvex's solution:

function! Repeat()     let times = input("Count: ")     let char  = input("Char: ")     exe ":normal a" . repeat(char, times) endfunction  imap <C-u> <C-o>:call Repeat()<cr> 
</div
 
 
273
 
vote

Если вы в порядке с выходом из режима вставки только один раз (в конце), эта последовательность работает:

Ctrl + O 80i- ESC

    .
  • ctrl + o используется для выпуска обычных команд, не оставляя режим вставки,
  • <код> 80 повторение,
  • <код> i вставить,
  • <код> - Персонаж, который вы хотите вставить,
  • esc Чтобы оставить режим вставки.

Другой, другой, не оставляя режим вставки:

Ctrl + O :norm 8ia RETURN

 

If you are OK with leaving INSERT mode only once (at the end), this sequence works:

Ctrl+o 80i- Esc

  • Ctrl+o is used to issue normal commands without leaving INSERT mode,
  • 80 the repetition,
  • i to insert,
  • - the character you want to insert,
  • Esc to leave INSERT mode.

Another one without EVER leaving INSERT mode:

Ctrl+o :norm 8ia Return

</div
 
 
     
     
165
 
vote

ESC N I C < KBD> ESC ESC .

e.g. ESC 4 I J ESC ESC вывод <Код> JJJJ .

 

Escnic Esc Esc.

E.g. Esc4iJEsc Esc will output JJJJ.

</div
 
 
         
         
20
 
vote
 <код> MATCH p=(x)-[*0..]->(y {id: 'C'}) WHERE NOT ()-->(x) RETURN p ORDER BY LENGTH(p) LIMIT 1; 0  
 
<ESC>  <the number of times you want to repeat> i  <the char you want to repeat>  <ESC>  for example: <ESC>12ia<ESC> will insert 12 a's. 
</div
 
 
 
 
20
 
vote

через один повторение:

 <код> MATCH p=(x)-[*0..]->(y {id: 'C'}) WHERE NOT ()-->(x) RETURN p ORDER BY LENGTH(p) LIMIT 1; 1  

Подробнее Об одном повторении: <Код> MATCH p=(x)-[*0..]->(y {id: 'C'}) WHERE NOT ()-->(x) RETURN p ORDER BY LENGTH(p) LIMIT 1; 2

вывод 80 <код> MATCH p=(x)-[*0..]->(y {id: 'C'}) WHERE NOT ()-->(x) RETURN p ORDER BY LENGTH(p) LIMIT 1; 3

 <код> MATCH p=(x)-[*0..]->(y {id: 'C'}) WHERE NOT ()-->(x) RETURN p ORDER BY LENGTH(p) LIMIT 1; 4  
 

Through single repeat:

Insert mode - Esc 80. 

More details about single repeat: :help .

Will output 80 -

--------------------------------------------------------------------------------- 
</div
 
 
 
 
8
 
vote

Вы также можете сделать, ESC N I Здравствуйте, там ESC ESC

где, n - количество повторов.

e.g., ESC 5i Здравствуйте, там ESC ESC

 

You can also do, Escnihello there EscEsc

where, n is the number of repeats.

e.g., Esc5ihello there EscEsc

</div
 
 
   
   
7
 
vote

Есть много других способов, но AFAIK Тот, который вы описываете, - самый короткий. В VIM вы в основном предполагаете провести время в командном режиме, так что это было бы только 3 нажатия клавиш + количество повторов (80i -).

Однако, если вы обнаружите, что вы очень часто используете эту повторяющуюся вещь, вы можете сделать себя функцией или макросом к этому концу; Может быть, что-то вроде:

 <код> MATCH p=(x)-[*0..]->(y {id: 'C'}) WHERE NOT ()-->(x) RETURN p ORDER BY LENGTH(p) LIMIT 1; 5  
 

There are many other ways but AFAIK the one you describe is the shortest one. In vim you are mostly supposed to spend your time in command mode, so that would be just 3 keystrokes + the number of repeats (80i-).

However, if you find that you very often use this repeat thing, you can make yourself a function or macro to that end; maybe something like:

:function Repeat(char) : let counter = input("How many times?: ") : call feedkeys("i") : call feedkeys(repeat(a:char,counter)) :endfunction :imap <C-U> <ESC>h"ryl :call Repeat(@r)<CR> 
</div
 
 
 
 
6
 
vote

Вы сказали, что было бы «приятно» остаться в режиме «Вставить», однако в командном режиме следующий метод будет избежать вашего 2-го ESC : -

Пока я знаю, что этот пост старый, кажется, что позор пропустить очевидную опцию «Cut / Copy и Paste» ...

x ... cut

8 0 ... Количество копий

P Вставить

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

 

You said it would be 'nice' to stay in 'Insert' mode, however in Command Mode the following method would avoid your 2nd ESC :-

While I know this post is old, it seems a shame to miss the obvious 'Cut/Copy and Paste' option...

x ...cut

80 ...number of copies

p Paste

Note : This is similar to the method suggested by Martin Beckett, however I get a delay when issuing that command, perhaps because it switches modes several times, this command executes instantly.

</div
 
 
     
     
5
 
vote

Я удивлен, никто еще не предложил:

в режиме вставки, используйте <код> <C-r>=repeat('-', 80)<CR>

Это:

    .
  • Нажмите Ctrl-R =
  • при результирующей подсказке, введите <код> repeat('-', 80)
  • Нажмите Enter

работает для повторения любого символа любое количество раз.

Это использует дополнительные нажатия клавиш, чем @ Romainl, но не оставляет режим вставки вообще.

 

I'm surprised no one has suggested this yet:

In Insert mode, use <C-r>=repeat('-', 80)<CR>

That is:

  • Press Ctrl-r=
  • At the resulting prompt, enter repeat('-', 80)
  • Press Enter

Works for repeating any character any number of times.

This uses more keystrokes than @romainl's answer, but does not leave Insert mode at all.

</div
 
 
3
 
vote

поздний ответ, но за то, что стоит, если вы хотите, если вы хотите ручную спам, вы можете использовать Команда «Повторить последнюю команду»: <Код> .

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).

Я нахожу это особенно полезным, когда я точно не знаю, сколько повторяется, я хочу сделать, но знаешь визуально, как долго я хочу, чтобы это было. В основном взрываются <код> . до тех пор, пока мои глаза не будут довольны.

 

Late answer but for what it's worth, if you wanna hand spam it, you can use the "repeat last command" command: .

i "Phrase" 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).

I find this especially useful when I don't know exactly how many repeats I want to do, but know visually how long I want it to be. Basically blast the . till my eyes are content.

</div
 
 
2
 
vote

В дополнение к записи функции, которая повторят текст несколько раз, вы можете использовать : C-L & GT; : если у вас уже есть строка, которая содержит 80 тире, написание Немногие тире в начале новой линии, а затем нажатие & lt; c-l & gt; будут выполнены строки, которые начнут с этих нескольких тире, которые будут вероятно, что строка с 80 тире. Я использовал для писать горизонтальные линии (78 тире) в файлах справки таким образом.

 

In addition to writing function that will repeat text multiple times, you could use <C-x><C-l>: if you already have line that contains 80 dashes, writing a few dashes at the start of new line and then pressing <C-x><C-l> will complete lines which start with these few dashes which will be likely that line with 80 dashes. I used to write horizontal lines (78 dashes) in help files in a such way.

</div
 
 
1
 
vote

Для такой простой задачи <код> abbreviation должен сделать трюк. Добавьте следующее в свой <код> .vimrc

 <код> iab <expr> -- repeat('-', 80)   

И с данный момент, когда вы вводите <код> -- с последующим пространством (пока вы находитесь в режиме вставки), <код> repeat('-', 80)0 будет автоматически преобразован в <код> repeat('-', 80)1 / код> 80 раз.

Используя функцию <код> repeat('-', 80)2 < / a> Вы можете повторить строку как можно больше времени.

Обратите внимание, что вы можете проверить его перед обновлением repeat('-', 80)3 , вводя в <код> repeat('-', 80)4 Режим> repeat('-', 80)5

 

For such an easy task abbreviation should do the trick. Add the following to your .vimrc

iab <expr> -- repeat('-', 80) 

and from now, when you type -- followed by a space (while you are in insert mode), the -- will be automatically converted to - 80 times.

By using the function repeat you are able to repeat the string as many time you want.

Note that you can test it before updating the .vimrc by entering in command mode then issuing the following :iab <expr> -- repeat('-', 80)

</div
 
 
1
 
vote

Я сделал это, не выходя из режима вставки, используя ниже шаги.

  1. Включить режим вставки.
  2. Тип один тире "-".
  3. ctrl + o
  4. строчные буквы 'v' (для ввода <код> repeat('-', 80)6 Режим)
  5. строчные буквы 'y' (для копирования)
  6. ctrl + o
  7. Тип 80
  8. Затем, затем строчные буквы «P» (для вставки).

<Код> repeat('-', 80)7 <Код> repeat('-', 80)8 <Код> repeat('-', 80)9 <Код> .0 <Код> .1 <код> .2 <Код> .3 <Код> .4

Это будет распечатать все тире горизонтально в одну строку.

 

I did this without exiting the INSERT mode using the below steps.

  1. Enable INSERT mode.
  2. Type one dash "-".
  3. Ctrl + O
  4. lowercase 'v' (to enter -- (insert) VISUAL -- mode)
  5. lowercase 'y' (to copy)
  6. Ctrl + O
  7. Type 80
  8. Then, followed by lowercase 'p' (for paste).

i - Ctrl+o v y Ctrl+o 80 p

This will print all the dashes horizontally in a single line.

</div
 
 

Связанный проблема

255  Как я могу автоформировать / отступ C код в VIM?  ( How can i autoformat indent c code in vim ) 
Когда я копирую код из другого файла, форматирование запутана, как это: <код> <ivy:install settingsRef="ivy.settings" organisation="org.jogamp.jogl" mo...

4  Как избежать ошибки отступа после изменения вкладки останавливается в VIM?  ( How to avoid indentation error after changing tab stops in vim ) 
У меня были 8-космические вкладки в Vim. Затем я изменился на 4 пробела, но теперь, когда я добавляю строку в какой-то код, который я написал перед изменением...

8  Vim Semantic JavaScript Завершение с Yourcompleteme?  ( Vim semantic javascript completion with youcompleteme ) 
Есть ли способ получить семантический Завершение кода JavaScript в Vim? Я попробовал вам omcompleteme (YCM), и это дает мне какое-то завершение кода, одна...

2  Как добавить индивидуальный синтаксис настраивания настраивания Python 'Self' в Vim  ( How to add custom python self syntax highlighting in vim ) 
Я знаю, как включить пользовательский синтаксис Highlighing при редактировании файлов Python нравится: <Код> :syn keyword Keyword self Тем не менее, о...

0  Почему контроль + пространство перемещает курсор на одно слово вперед в MacVIM 8.0?  ( Why does control space move the cursor one word forward in macvim 8 0 ) 
(Примечание: я ничего не вижу в возможном дублировании ( Некоторые ключевые сопоставления, не работающие в MacVim ), что Объясняет, почему Control + Space ...

25  В чем разница между папкой Vim72 и VimFiles?  ( What is the difference between vim72 and vimfiles folder ) 
Я учусь vim. Папка VIM в окнах имеет две подкаталоги Vim72 и VimFile. В чем разница между ними? Где я должен установить мои плагины? ...

0  Установите индивидуальный символ / слова к разным шрифтам в VIM (например, размер шрифта первого слова предложения)  ( Set individual character words to different font in vime g increase the font si ) 
В VIM мы можем установить разные шрифты с помощью команды: <код> set guifont=Courier_New:h12:cANSI Я хотел бы узнать, сможем ли мы установить другой шри...

13  Советы и трюки для Viper-режима Emacs и The Likes [закрыто]  ( Tips and tricks for emacs viper mode and the likes ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос находится на основе мнения . В настоящее вре...

5  Как я могу совершить с файлом сообщения UTF-8?  ( How do i commit with a utf 8 message file ) 
Я пытаюсь совершить пересмотр с Subversion на cmd.exe. CODEPAGE CMD.EXE является UTF-8 (установлен с <код> chcp 65001 ): <код> c:path oworkdir> svn ci П...

-1  Редактор, который может заменить VIM и легче расширить, в Ruby [закрыто]  ( A editor that can replace vim and easier to extend in ruby ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

2  Alt-D отображение не работает в макросе  ( Alt d mapping doesnt work in macro ) 
У меня есть <код> d сопоставлен на <код> "_d и <код> <M-d> (== alt-d или опция d) сопоставлено на <код> d / код>. По какой-то причине это отображение не ра...

7  Пользовательский VIM HTML синтаксис  ( Custom vim html syntax ) 
У меня есть скрипт, который читает файл HTML и заменяет вхождения ~%foo%~ со значением, установленным Perl. Что-то вроде этого: <код> <span class="~%class...

5  Можно ли открыть новую вкладку на определенной линии в Vim?  ( Is it possible to open a new tab on a particular line in vim ) 
Я попробовал оба из следующего без успеха. <код> tabnew Foo.java +30 tabnew Foo.java:30 Первый дает сообщение об ошибке, в то время как VIM открывает ин...

0  Правильно отобразить HTML-символы UTF-8 в нежелибайте VIM  ( Properly display utf 8 html characters in non multibyte vim ) 
Я пытался открыть файлы .epub в VIM для чтения (да, он глупо, давайте игнорируем это), и у меня есть проблемы с тем, как внутренний HTML EPUBS отображает таки...

2  Как перенаправить стандартный выход, когда команда VIM открывает URL на курсоре в браузере?  ( How to redirect standard output when a vim command opens a url at cursor in brow ) 
Я использую плагин VIM, и когда я хочу посмотреть функцию под курсором в онлайн-документах API, я введите ' da' Вот код Vimscip для Keymaming: <код> nnore...

Связанный проблема

255  Как я могу автоформировать / отступ C код в VIM? 
4  Как избежать ошибки отступа после изменения вкладки останавливается в VIM? 
8  Vim Semantic JavaScript Завершение с Yourcompleteme? 
2  Как добавить индивидуальный синтаксис настраивания настраивания Python 'Self' в Vim 
0  Почему контроль + пространство перемещает курсор на одно слово вперед в MacVIM 8.0? 
25  В чем разница между папкой Vim72 и VimFiles? 
0  Установите индивидуальный символ / слова к разным шрифтам в VIM (например, размер шрифта первого слова предложения) 
13  Советы и трюки для Viper-режима Emacs и The Likes [закрыто] 
5  Как я могу совершить с файлом сообщения UTF-8? 
-1  Редактор, который может заменить VIM и легче расширить, в Ruby [закрыто] 
2  Alt-D отображение не работает в макросе 
7  Пользовательский VIM HTML синтаксис 
5  Можно ли открыть новую вкладку на определенной линии в Vim? 
0  Правильно отобразить HTML-символы UTF-8 в нежелибайте VIM 
2  Как перенаправить стандартный выход, когда команда VIM открывает URL на курсоре в браузере?