O gargalo real, aqui parece ser todo o jjjj…
que você está fazendo. A suposta superioridade de hjkl
sobre as teclas de seta é citada com tanta frequência que as pessoas tendem a esquecer o imenso valor dos movimentos e objetos de texto de Vim sobre ambos métodos tediosos.
Supondo que você esteja na primeira linha de um parágrafo, conforme definido pelo Vim (texto entre linhas em branco), y'}P
deve arrancar todo o parágrafo incluindo a linha em branco que se segue e colá-lo acima da linha atual.
some text above
[l]orem ipsum dolor sit amet
ipsum lorem dolor sit amet
lorem dolor ipsum sit amet
lorem ipsum sit dolor amet
lorem ipsum dolor amet sit
some text below
y'}P
some text above
[l]orem ipsum dolor sit amet
ipsum lorem dolor sit amet
lorem dolor ipsum sit amet
lorem ipsum sit dolor amet
lorem ipsum dolor amet sit
lorem ipsum dolor sit amet
ipsum lorem dolor sit amet
lorem dolor ipsum sit amet
lorem ipsum sit dolor amet
lorem ipsum dolor amet sit
some text below
v}yP
deve funcionar também, de uma forma mais confortável.
Se o seu bloco não é um "parágrafo", provavelmente existe uma maneira de definir a seleção com um movimento em vez de jjj
. Algo como V/it$<cr>
.
editar
Aqui está outra variante que coloca a cópia abaixo do original: y'}'}p
.
editar
Acho que a maneira mais genérica de encurtar todo o processo é estender a seleção visual:
-
com um movimento de busca se você puder identificar um "gancho" na última linha do bloco que deseja duplicar (
V/foo<CR>
) -
ou uma contagem (
V5j
).
Após a seleção, você pode:
-
yank (
y
), -
mova para o final da seleção visual (
'>
ou5j
, mas'>
é mais genérico), -
abra uma nova linha (
o
), -
sair do modo de inserção (
<Esc>
), -
colar (
p
)
Este método é provavelmente o mais genérico, mas ainda é muito digitado. É aí que os mapeamentos chegam para o resgate:
vnoremap <F9> y'>o<Esc>p
A ideia, aqui, é separar o contextual do genérico:
-
a parte contextual é quando você define o bloco para duplicar, porque não há como prever o que você deseja duplicar deixo esta parte a seu critério, mas espero que você use um método melhor que
jjjjjj…
-
a parte genérica é tudo o que segue a seleção, feita aqui com um mapeamento simples.
O processo inteiro agora está reduzido a V5j<F9>
, o que é o mais rápido possível.