Existe uma maneira de repetir um caractere enquanto estiver no modo de inserção do Vim? Por exemplo, digamos que eu gostaria de inserir 80 traços, em algo como o emacs, digite:
Ctrl+U 8 0 -
A única maneira de saber como fazê-lo no VIM é sair do modo normal para o argumento de repetição, depois voltar ao modo de inserção para digitar o traço, sair para inserir os traços reais E voltar ao modo de inserção para continuar digitando. A sequência é realmente longa:
Esc 8 0 a - Esc a
Seria bom não ativar e desativar os modos.
<C-o>
é uma abreviação deCtrl
+o
.:normal
comando que permite emiti-los no prompt de comando. Ocasionalmente bastante útil.Escnic Esc Esc.
Por exemplo, Esc4iJEsc Escserá exibido
JJJJ
.fonte
fonte
Através da repetição única:
Mais detalhes sobre a repetição única:
:help .
fonte
Você também pode fazer, Escnihello there EscEsc
onde, n é o número de repetições.
por exemplo, Esc5ihello there EscEsc
fonte
Esc
duas vezes depois. Obrigado @prashantExistem muitas outras maneiras, mas a AFAIK, a que você descreve, é a mais curta. No vim, você costuma gastar seu tempo no modo de comando, de modo que seriam apenas 3 pressionamentos de tecla + o número de repetições (80i-).
No entanto, se você achar que costuma usar essa coisa repetida, pode se tornar uma função ou macro para esse fim; talvez algo como:
fonte
Você disse que seria "bom" permanecer no modo "Inserir", no entanto, no modo de comando, o seguinte método evitaria o seu segundo ESC:
Embora eu saiba que este post é antigo, parece uma pena perder a opção óbvia de 'Cortar / Copiar e Colar' ...
x ...cortar
80 ...número de cópias
p Colar
Nota: Isso é semelhante ao método sugerido por Martin Beckett; no entanto, recebo um atraso ao emitir esse comando, talvez porque ele mude de modo várias vezes, esse comando seja executado instantaneamente.
fonte
v
y
para entrar no modo visual, depois puxar e80
p
colar 80 vezes. Estou perdendo alguma coisa, ou você esqueceu um passo?Resposta tardia, mas pelo que vale a pena, se você quiser enviar spam, use o comando "repeat last command":
.
i"Frase" 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).
Acho isso especialmente útil quando não sei exatamente quantas repetições quero fazer, mas sei visualmente quanto tempo quero. Basicamente explodir
.
até meus olhos estarem satisfeitos.fonte
Estou surpreso que ninguém tenha sugerido isso ainda:
No modo Inserir, use
<C-r>=repeat('-', 80)<CR>
Isso é:
repeat('-', 80)
Funciona para repetir qualquer caractere várias vezes.
Isso usa mais teclas do que a resposta de @ romainl, mas não sai do modo Inserir.
fonte
Além da função de escrita que repetirá o texto várias vezes, você pode usar <C-x><C-l>: se você já possui uma linha que contém 80 traços, escreva alguns traços no início da nova linha e pressione-o <C-x><C-l>para concluir as linhas que começam com esses poucos traços. provavelmente essa linha com 80 traços. Eu costumava escrever linhas horizontais (78 traços) nos arquivos de ajuda dessa maneira.
fonte
Para uma tarefa tão fácil
abbreviation
deve fazer o truque. Adicione o seguinte ao seu.vimrc
e a partir de agora, quando você digitar
--
seguido por um espaço (enquanto estiver no modo de inserção),--
ele será automaticamente convertido para-
80 vezes.Usando a função
repeat
você pode repetir a sequência quantas vezes quiser.Observe que você pode testá-lo antes de atualizar
.vimrc
, entrando nocommand
modo e emitindo o seguinte:iab <expr> -- repeat('-', 80)
fonte
Fiz isso sem sair do modo INSERT usando as etapas abaixo.
-- (insert) VISUAL --
modo)i
-
Ctrl+o
v
y
Ctrl+o
80
p
Isso imprimirá todos os traços horizontalmente em uma única linha.
fonte