Eis como costumo copiar um bloco de texto ou código:
- Selecione o bloco com o modo Visual ( V) e exclua-o com d; ou, se for apenas uma linha, use dd.
- Vá para onde eu quero que o texto esteja, sou estúpido demais para lembrar a diferença entre pe P, por isso, entendi isso 50% do tempo. (se estiver errado: desfaça uma tentativa novamente).
- Às vezes, o recuo precisa ser ajustado, então eu vou para o modo Visual Vnovamente e seleciono novamente o mesmo bloco, e uso >ou <para corrigir isso.
Existe uma maneira mais fácil? Em alguns editores, vi que você pode "pegar" um bloco de texto, por assim dizer, e movê-lo; Aqui está um exemplo do Emacs (mas também vi isso em outros editores):
Ou talvez haja outra maneira (ainda melhor)?
cut-copy-paste
visual-mode
Martin Tournoij
fonte
fonte
]p
ou[p
melhor que comp
ouP
. Dessa forma, o bloco que você cola será autoindentado.Respostas:
Existe um plugin para isso: dragvisuals.vim .
Como não vincula nenhuma chave por padrão, você deverá fazer isso sozinho. Eu gosto de mapeá-los para Control+ Arrow key:
Ele também vem com uma chave de bônus para duplicar a seleção atual:
Vantagens deste plugin sobre as outras respostas:
Outro truque útil para complementar isso, são esses atalhos de teclado:
Isso selecionará novamente a última seleção visual após o uso >no modo Visual, para que você possa ajustar o alinhamento mais facilmente (você também pode usar as teclas de seta, mas isso será movido por um caractere, e não um
shiftwidth
).fonte
Para a etapa 3, você pode usar
gv=
(=
significa recuar egv
significa "selecionar novamente a última seleção visual").Para o comportamento do Emacs, seria muito simples adicionar alguns mapeamentos no seu .vimrc:
Você pode usar as teclas de seta para cima e para baixo para mover-se em uma seleção de linha visual. (Obviamente, você também pode mapear para teclas diferentes se detestar flechas.)
(Você pode fazer isso com seleções visuais normais e movê-las para a esquerda e direita também:
vnoremap <left> dhPgvhoho
evnoremap <right> dpgvlolo
.)fonte
gv
vai para a última seleção visual, que nesse caso seria o parágrafo que foi excluído. o que estou perdendo?Você pode remapear algumas teclas para mover as linhas. Por exemplo, setas para cima e para baixo, se você estiver acostumado a se movimentar
hjkl
.Por exemplo, em .vimrc
:m
, comando normal para mover uma linha+1
ou-2
para indicar uma linha para cima ou para baixo (-1 mantém a linha no mesmo lugar)gv
para selecionar novamente o mesmo texto noVISUAL
modoEssa solução não interfere nos registros, portanto, qualquer texto copiado ainda estará disponível, além de reformatar o código para definir o recuo adequado etc.
fonte
=
(muitas vezes muda muito a formatação não relacionada a mim).A maneira mais fácil de encontrar isso está documentada aqui: http://vimrcfu.com/snippet/77
Coloque o seguinte em seu arquivo .vimrc
fonte
Existem poucos plugins para isso, mas eu prefiro o vim intacto de Tim Pope ( github ) (o Ingo Karkat LineJuggler é semelhante).
Você visualmente seleciona seu bloco de texto e, em seguida, faz
]e
(e para troca) para mover o bloco para baixo ([e
na outra direção). Use.
para repetir a ação (Você tem o repeat.vim instalado, não é). Se você for longe demais, basta desfazer a viau
.Agora, pessoalmente, penso
p
eP
são comandos tão comuns que seria melhor aprendê-los antes de criar maus hábitos. Então você pode usar]p
para colar no mesmo recuo. Se você estiver usando o intacto, você pode>p
colar um nível de indentação mais profundo ou=p
colar e reformatar.Se você tiver problemas para se lembrar
p
e, emP
seguida, poderá ajudá-lo a pensar neles em termos dos comandoso
e,O
que é um tipo de simetria.Como outros observaram, você pode usar
gv
para selecionar novamente uma seleção visual. No entanto, se você apenas colocar / colar o texto, terá perdido sua seleção visual. Não se preocupe, pois todas as alterações (e puxões!) Serão definidas'[
e em']
torno da área alterada. Portanto, você pode recuar via>']
(leia-se: deslocar para a direita até o final da última alteração) e use o.
para repetir a recuo até ter o texto no lugar certo.Para obter mais ajuda, consulte:
fonte
Se você souber o número da linha para a qual deseja mover o bloco de texto, poderá usar um intervalo ou uma seleção visual com o
:move
comando para mover o bloco para lá.Por exemplo, se eu tiver o seguinte arquivo:
e eu quero mover a linha de a para depois da linha de c, coloco o cursor na linha de a e entro
:m3
e a linha é então deslocada.Isso também funciona com +/- compensações. No exemplo acima, o mesmo resultado pode ser alcançado com o
:m+2
movimento da linha 2 linhas para baixo.Para blocos de texto, a única diferença é adicionar um intervalo ou seleção. Para mover as linhas aaa e bbb para o final do arquivo, use um comando como
:1,2m$
($ = última linha) ou selecione visualmente as linhas e:m$
.fonte
:move
consulte também vim.wikia.com/wiki/Moving_lines_up_or_down ou a Dica 29 Duplicar ou Mover Linhas Usando os Comandos ': t' e ': m' no Livro Prático Vim de D. Neil.Plugin vim-move por matze
disponível a partir de
Mapeamentos padrão no modo visual e normal:
fonte