Como excluir até o final da linha anterior?

8

Um exemplo (A ^é a posição do cursor):

Antes:

a bc def ghi
j k l mn o p q rs
      ^

Depois de:

a bc def ghimn o p q rs
            ^

ou pelo menos:

a bc def ghimn o p q rs
           ^

Eu sei que posso usar d0i<BS>, mas quero uma maneira mais rápida de fazer isso e quero permanecer no modo de comando. Eu sou iniciante no vim e acho que talvez a resposta seja uma modificação de kA.

Muito obrigado! :-)

silviubogan
fonte
1
Se isso é algo que você faz com frequência, considere escrever seu próprio mapeamento, talvez algo parecido <Leader>dk.
Kyle Strand

Respostas:

9

Tentar d0kJx

Exclui para trás o início da linha, move-se para cima, une as duas linhas e remove o espaço entre as duas linhas unidas.

Você não precisa sair do modo normal com isso.

Bryan Glazer
fonte
2
Esta é a única resposta até agora que (1) não altera o histórico de pesquisa ou altera o realce atual e (2) não exclui o m.
Kyle Strand
12

Bem, você pode combinar o movimento "pesquisa para trás" e o deleteoperador:

d?$<Enter>
VanLaser
fonte
No .vimrc eu tenho o seguinte: set hlsearche d?$<Enter>faz o que pedi, mas também destaca todas as terminações de linha no arquivo, então eu tenho que digitar :nohdepois disso para remover o destaque. Há alguma maneira de evitar isto? Obrigado! :-)
silviubogan
1
Provavelmente, o que faço é simplesmente "sobrecarregar" <C-l>no modo normal: nnoremap <silent><C-l> :nohlsearch<cr>:set nolist<cr>:redraw!<cr>depois use-o quando necessário (ou seja, em casos como o acima).
VanLaser 26/10/2015
3

Com o modo visual: hvk$d

Explicação
h - Mova um para a esquerda
v- Inicie o modo visual
k$- Mova para o final da linha anterior
d- Excluir seleção

Karl Yngve Lervåg
fonte
Com o cursor ativado m, talvez hvk$d? (para evitar selecionando-o)
VanLaser
1
Ah sim. Atualizando agora.
Karl Yngve Lervåg