Excluir do cursor até o final da linha no VI

301

Eu sei que provavelmente já examinei isso um milhão de vezes em todos os documentos VI que li, mas não consigo encontrar a exclusão do cursor para o comando final da linha.

Falmarri
fonte
3
Você tem um erro de digitação aqui - você diz "fim da linha" no título, mas "fim da palavra" na pergunta.
Cascabel

Respostas:

449

O comando dwexcluirá da posição atual do cursor até o início do próximo caractere de palavra. O comando d$(note que é um cifrão, não um 'S') será excluído da posição atual do cursor até o final da linha atual. Dé um sinônimo para d$.

Tok
fonte
Sim, eu sei dw, mas acho que assumi que haveria um comando "excluir o restante desta linha". Por exemplo, minha linha tem ip=|10.1.1.1como |local do cursor. Existe um comando que excluirá tudo 10.1.1.1?
Falmarri
3
@Falmarri - peço desculpas, devo ter entendido mal sua pergunta. Existe um comando para isso:d$
Tok
84
D (Shift + d) também é sinônimo de d $.
Neth
5
@ Andy, o trabalho é excluir do cursor até o final da linha. Se você considera que excluir mais do que isso é "fazer o trabalho", você também pode usar :!rm -f %e depois :q!. Isso exclui o arquivo inteiro.
Curinga
2
@Amir Basta usar d^('d' + sinal de intercalação) ... basicamente d + qualquer caractere que normalmente moveria o cursor, mas acho que estou aprendendo o Vim, para que eu possa estar errado nisso.
Jaked
41

Como já mencionado: você pode usar d$ou D( shift- d) para excluir da posição do cursor até o final da linha.

O que eu normalmente acho mais útil é c$ou C( shift- c) porque ele será excluído da posição do cursor até o final da linha e o colocará no modo [INSERIR].

Brad Johnson
fonte
2
LEGAIS!!! Isso é muito melhor do que Dpara a maioria das pessoas, na minha opinião, uma vez que não leva você de volta a um espaço no final da linha.
Elias Lynn
Por que essa resposta está escondida aqui em baixo? Essa é a funcionalidade que eu estava realmente procurando quando cheguei aqui.
M_M
@ElijahLynn não deve ser um problema de qualquer maneira. O Vim tem duas maneiras principais de entrar no modo de inserção ique é inserido antes do cursor e aque é inserido depois do cursor. Se o cursor estiver no final da linha e você deseja inserir no final da linha, você pode apenas usá-lo a.
Lie Ryan
1
O objetivo é fazer isso em uma operação, não em duas. Teclas extras = fricção extra.
Elijah Lynn
36

Uma das coisas boas sobre o vi é sua estrutura de comando lógica. dseguido por um comando de movimento d eletes para o alvo do que o movimento. $move para o final da linha (mnemônico: como nos regexps). Assim, d$elimina até o fim da linha. Da mesma forma, ese move para o e nd da palavra atual, e wmove-se para o início da próxima w ord; por isso deexclui o final da palavra atual, e dwalém disso elimina o seguinte espaço em branco.

Gilles
fonte
1
@gioele eu uso <kbd>para chaves reais, não para seqüências de comando. Por exemplo <kbd>Ctrl</kbd>+<kbd>C</kbd>, mas d$.
Gilles
@Gilles Você está certo. Eu apenas tentei d ^ e ele excluiu da posição do cursor para a linha começar.
ka3ak
Eu sempre usei (d) elete (a) (w) ord para excluir palavras :) #
22616 Michalik
20

Você provavelmente deseja usar D. Mova o cursor para o primeiro caractere que deseja excluir e pressione Shift-D. Tudo se foi. Na verdade, ele está no buffer de corte padrão, para que você possa colar P ou P de volta.

Uso Dp (excluir para o final da linha e colocá-lo de volta), passar para o final de outra linha e, em seguida, p novamente para colar o mesmo texto no final dessa outra linha. Faz maravilhas em arquivos de configuração, onde você precisa colocar um URL complicado em dois ou mais lugares.

Bruce Ediger
fonte
Provavelmente é um Vim mínimo que ele usa de qualquer maneira.
Polem3
0

Eu acho que um atalho do modo de inserção pode ser útil.

No modo de inserção, talvez seja melhor começar a mudar até o final da linha (coloque isso no seu ~/.vimrc):

inoremap <C-l> <C-o>C

Então você tem, como já foi dito, Dno modo normal e Ctrl+ lno modo de inserção. Como você pode ver, você também tem Cque começar a mudar até o final da linha.

<C-o> ......... insert normal keystroke in insert mode

Eu escolhi Ctrl- lporque lestá sob seus dedos. O Ctrl- kjá é usado para inserir dígitos.

Eu tenho procurado por :h i_Ctrlalgumas combinações de teclas gratuitas, e esse é realmente o maior problema quando se trata de criar novos atalhos para executar ações no vim.

SergioAraujo
fonte
0

Para excluir um intervalo de linhas após a posição do cursor, ele 3Dserá excluído do cursor até o final da linha, bem como as próximas duas linhas completamente (ou seja, exclui 3 linhas após a posição do cursor).

por exemplo, para o texto a seguir (cursor representado como |),

If there's a cursor |in the line
here
we
go

O uso do comando 3Dproduzirá:

If there's a cursor
go
Nick Bull
fonte