No Notepad ++, posso usar Ctrl+ Shift+ Up/ Downpara mover a linha atual para cima e para baixo. Existe um comando semelhante a isso no Vim? Eu olhei através de guias sem fim, mas não encontrei nada.
Se não houver, como vincular a ação a essa combinação de teclas?
Edit: A resposta de Mykola funciona para todas as linhas, exceto aquelas no início e no final do buffer. Mover a primeira linha para cima ou a linha inferior para baixo exclui a linha e, ao mover a linha inferior para cima, ele pula dois espaços inicialmente, como um peão! Alguém pode oferecer refinamentos?
Respostas:
Coloque o seguinte em seu .vimrc para fazer o trabalho
Desaparecer da linha parece um bug do Vim. Eu coloquei um truque para evitá-lo. Provavelmente existe alguma solução mais precisa.
Atualizar
Existem muitas dificuldades inexplicáveis em usar apenas as combinações do Vim. Estes são falta de linha e salto de linha extra.
Então, aqui está a solução de script que pode ser colocada dentro de .vimrc ou ~ / .vim / plugin / swap_lines.vim
fonte
<A-up>
como usado no eclipse.ddkP
na última linha do documento. Experimente você mesmo em um arquivo de 3 linhas. Para evitar esses problemas, use os:m
mapeamentos muito mais fáceis, conforme fornecidos no wiki do Vim .<A-up>
e,<A-down>
mas quando tento essas teclas no vim na execução visual no tmux, a seleção desaparece e o cursor se move para cima; sem mover as linhas selecionadas.Se eu quiser trocar uma linha pela linha acima, eu normalmente faço o seguinte
Explicação
fonte
ddp
para mover uma linha para baixo (linha de exclusão e cole abaixo da linha atual)4 dd
e , em seguida, vá para, diga 2 linhas e depois para:2
onde deseja colar eP
.4dd
vez de4 dd
?dd<number>jp
para mover a linha atual <número> +1 das linhas para baixo. Edd<number>kp
para mover a linha atual <número> de linhas para cima.Supondo que o cursor esteja na linha que você deseja mover.
Mover para cima e para baixo:
:m
para mover:m +1
- desce uma linha:m -2
- subir 1 linhas(Observe que você pode substituir +1 por qualquer número, dependendo de quantas linhas você deseja movê-lo para cima ou para baixo, ou seja, +2 o moveria para baixo 2 linhas e -3 para 2 linhas)
Para ir para uma linha específica
:set number
- exibir linhas numéricas (mais fácil de ver para onde você está indo):m 3
- mova a linha após a terceira linha (substitua 3 por qualquer linha que desejar)Movendo várias linhas:
V
(ie Shift- V) e mova o cursor para cima e para baixo para selecionar várias linhas no VIMuma vez selecionado, pressione :e execute os comandos acima,
m +1
etcfonte
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Mover uma linha para cima:
ddkP
Mover uma linha para baixo:
ddp
fonte
.
para repetir.Isso funcionou para mim:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
BTW, se você deseja usar ALT + some_key e seu terminal (urxvt faz isso) se recusa a cumprir, você deve inserir algo como isso em seu arquivo .vimrc:
onde ^] é um único caractere que representa a chave ALT. Para inserir esse caractere, use C+v, Escno Vim ( C+q, Escno Windows).
fonte
[niv]noremap
são remaps para os modos normais | inserir | visuais.<CR>
éCarriage Return
(Enter
chave).adicione o seguinte ao arquivo ~ / .vimrc (verifique se você não tem mapeamento para n, m)
Agora, pressionar a
n
tecla moverá uma linha para baixo em
moverá uma linha para cima.fonte
No modo de comando, posicione o cursor na linha que você deseja mover para baixo e, em seguida,
Explicação: dd exclui a linha atual no buffer geral p a coloca de volta APÓS a posição do cursor ou, no caso de linhas inteiras, uma linha abaixo.
Há alguma confusão em relação aos comandos p e P em muitos documentos. Na realidade, p cola APÓS o cursor e P AT.
fonte
Basta adicionar este código ao .vimrc (ou .gvimrc)
fonte
Exatamente o que você está procurando neste incrível plugin: https://github.com/vim-scripts/upAndDown
fonte
Uma solução simples é colocar em suas
.vimrc
linhas:fonte
Coloquei o seguinte no final do meu arquivo .vimrc:
Então agora 'H' e 'N' movem a linha atual para cima e para baixo, respectivamente.
fonte
Aqui está uma versão simplificada, para MacVim, usando os exemplos de artigos da Wikia (veja o link do comentário de gun ).
Estou usando apenas a variante de seleção de bloco, porque basta Shift-V para selecionar a linha atual e, opcionalmente, cursor para cima / baixo para selecionar mais algumas linhas.
De acordo com os atalhos acima, pressionar Cmd-Shift-Up / Down alternará a seleção de bloco para cima / baixo. "D" é a tecla Command no MacVim; para Windows, tente "C" (Controle) ou "A" (Alt) (por exemplo, <CAf> seria Control Alt f).
O artigo da Wikia adiciona "= gv" a eles, que tem o efeito de ajustar o recuo do bloco após a movimentação, com base no texto ao redor. Isso é confuso, então eu o removi e adicionei atalhos para recuar rapidamente a seleção.
Lembre-se, o mesmo pode ser feito com << e >>, mas a seleção seria perdida; portanto, esses atalhos acima permitem recuar várias vezes e ainda mover o bloco porque a seleção é mantida.
Meu MacVim está configurado para alternar as guias com Cmd-Shift-Esquerda / Direita, então usei Cmd-Alt-Esquerda / Direita.
Aqui está a alternância de guias para o MacVim (insira .gvimrc com o restante acima):
fonte
plugin do vim unimpaired.vim [e and] e
fonte
Quando você bate comando
:help move
emvim
, aqui está o resultado::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Por exemplo: Mova a linha atual uma linha para baixo =>
:m+1
.Por exemplo: Mova a linha com o número 100 abaixo da linha com o número 80 =>
:100 m 80
.Por exemplo: Mova a linha com o número 100 abaixo da linha com o número 200 =>
:100 m 200
.Por exemplo: Mova as linhas com o número dentro de [100, 120] abaixo da linha com o número 200 =>
:100,120 m 200
.fonte
Aqui está uma solução que funciona na minha máquina : MacBook Pro executando o VIM 8.1
Esses comandos não excluirão suas linhas na parte superior ou inferior do seu buffer.
Usar os símbolos reais que Alt-J e Alt-K emitem é uma solução alternativa para que seus códigos-chave não sejam mapeados corretamente no meu ambiente.
Jogue isso no .vimrc antigo e veja se funciona para você.
fonte
Para mim,
ddkkp
fiz (em vez deddkP
com um P maiúsculo, que também funcionaria).fonte
: m. + 1 ou: m.-2 faria se você estivesse movendo uma única linha. Aqui está o meu script para mover várias linhas. No modo visual, Alt-up / Alt-down move as linhas que contêm a seleção visual para cima / baixo em uma linha. No modo de inserção ou modo normal, Alt-up / Alt-down moverá a linha atual se nenhum prefixo de contagem for fornecido. Se houver um prefixo de contagem, Alt-up / Alt-down moverá muitas linhas a partir da linha atual para cima / baixo em uma linha.
fonte
Caso você queira fazer isso em várias linhas que correspondam a uma pesquisa específica:
:g/Your query/ normal ddp
ou:g/Your query/ m -1
:g/Your query/ normal ddp
ou:g/Your query/ m +1
fonte