Como excluir a linha acima / abaixo do cursor, mas não a linha atual?
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 kdde nnoremap <Leader>D jdd-, mas ter uma alternativa que não move o cursor parece ser uma opção melhor. Existe tal?
— Martin Tóth
Se o seu problema é que seus mapeamentos movem o cursor, por que você não faz nnoremap <Leader>d kddje nnoremap <Leader>D jddk?
Usando um kddjou ou jddk, a posição da coluna não é preservada. Não estou dizendo que é um grande problema, mas é irritante. Para o registro, kddjmove o cursor 1 linha abaixo da posição original. E jdd-parece ser uma alternativa melhor, jddkporque 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.
Que tal usar o makdd`a no seu mapa? Define uma marca e retorna a ela depois ... você pode alterá-la para um caractere menos usado.
@PhilippFrank Ou eu posso usar `` para recuperar o cursor e não ocupar um registro (não que eu use qualquer :)).
Não, isso não funciona, k não é um salto, então você não pode voltar usando ``.
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.
Isso ainda move o cursor, no entanto.
Você não pode evitar mover o cursor. O melhor que você pode fazer é mover o cursor e movê-lo de volta .
Obrigado! Esse tipo de "jeito vim" é o que eu estava procurando. Vou usar isso em combinação com `` para colocar o cursor de volta onde estava.
EDIT Eu não conhecia os recursos internos sugeridos por @Romainl em sua resposta: é claro que o método -de +ddeve ser preferido, pois é muito mais simples do que adicionar funções ao seu.vimrc
Talvez adicionar algo assim ao seu .vimrcpossa 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 linha normal kapó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.
Uma alternativa para salvar / restaurar a posição do cursor é desativar / restaurar a nostartoflineopção.
— 23318 Rich
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.
— MS.Kim
Ótima solução! Embora eu acho que você "-Pnão quer "-p. O último atrapalha um pouco o texto.
@DJMcMayhem Você está certo. Eu corrigi a resposta. Obrigado por apontar.
Talvez você melhore o seu fluxo de trabalho se não tiver medo de ... pular :)
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 Enterpor algo como 78ggou 78Gpular diretamente para esse número de linha.
Com base na solução ms-kim , desenvolvi uma variação ligeiramente diferente que salva a posição da coluna.