Existe um comando para excluir a linha (ou n linhas) acima da atual? Acima = corrente não incluída.
Ou seja, existe uma alternativa para a dkqual não apaga a linha atual? Semelhante a como o/ Oe p/ Pfunciona, mas com exclusão.
Atualmente, estou fazendo kdd, que move o cursor uma linha e a apaga. Eu poderia fazer nnoremap <Leader>d kdd
e nnoremap <Leader>D jdd-
, mas ter uma alternativa que não move o cursor parece ser uma opção melhor. Existe tal?
key-bindings
cursor-movement
normal-mode
Martin Tóth
fonte
fonte
nnoremap <Leader>d kddj
ennoremap <Leader>D jddk
?kddj
ou oujddk
, a posição da coluna não é preservada. Não estou dizendo que é um grande problema, mas é irritante. Para o registro,kddj
move o cursor 1 linha abaixo da posição original. Ejdd-
parece ser uma alternativa melhor,jddk
porque pelo menos estou retornando ao primeiro caractere de espaço não em branco. Se a linha abaixo da que eu quero excluir estiver vazia, fico no início da linha.Respostas:
corta a linha acima da linha atual.
corta a quinta linha acima da linha atual (mas move o cursor).
corta as 5 linhas acima da linha atual.
corta as 5 linhas abaixo da linha atual.
fonte
EDIT Eu não conhecia os recursos internos sugeridos por @Romainl em sua resposta: é claro que o método
-d
e+d
deve ser preferido, pois é muito mais simples do que adicionar funções ao seu.vimrc
Talvez adicionar algo assim ao seu
.vimrc
possa ser o que você deseja:Essas funções excluem a linha abaixo ou a linha acima da atual e retornam à posição anterior à exclusão.
Para a função
DeleteOver()
, precisamos subir uma linhanormal k
após a exclusão porque a exclusão altera o número da linha original que não aconteceu comDeleteUnder()
Você também pode adicionar isso ao seu
.vimrc
Para criar os mapeamentos chamando as funções.
fonte
nostartofline
opção.Se usarmos o pequeno registro de exclusão "-, podemos restaurar a posição do cursor após excluir acima de n linhas.
Por exemplo, d0dgk"-Pexclui acima de 1 linha e restaura o cursor de volta onde estava.
d0exclui caracteres do cursor para o primeiro caractere da linha. Como 0é um movimento exclusivo, o caractere sob o cursor não é excluído. E os caracteres excluídos são colocados no pequeno registro de exclusão "-.
dgkexclui acima de 1 linha. Isso deixará a linha atual, porque gknão é linear e exclusiva.
"-P coloca o texto do pequeno registro de exclusão "-.
É uma espécie de hack. Mas se você estiver procurando por comandos não-ex, considere usá-lo.
fonte
"-P
não quer"-p
. O último atrapalha um pouco o texto.Talvez você melhore o seu fluxo de trabalho se não tiver medo de ... pular :)
Exemplo:
Suas ações (modo normal, o cursor está no
_
):/I want
Enter
5dd
Ctrl-o
. É isso aí.Obviamente, a resposta romana é a melhor, se tudo o que você deseja excluir linhas inteiras, e você pode contar seu deslocamento facilmente (usando números de roupa relativos, por exemplo). A descrição acima é uma maneira mais genérica de "agir": vá lá, usando algo que conta como um salto: isso significa que você sempre pode voltar atrás depois de modificar o texto.
Por exemplo, se você usar números de linha absolutos, poderá substituí-lo
/I want
Enter
por algo como78gg
ou78G
pular diretamente para esse número de linha.fonte
Com base na solução ms-kim , desenvolvi uma variação ligeiramente diferente que salva a posição da coluna.
OBS: Eu também usei este post como referência.
fonte
Se você deseja excluir linhas duplicadas em todo o arquivo, faça o seguinte:
Exemplo:
No modo de comando
Se você deseja apenas uma lista de string (s) inicialmente:
fonte