No vim, muitas vezes preciso excluir ou puxar / colocar grandes blocos de texto.
Posso contar as linhas do texto e inserir algo como 50dd
excluir 50 linhas.
Mas isso é um pouco de dor. Como posso excluir esse grande bloco de texto sem precisar saber quantas linhas excluir anteriormente?
move
até o fim. A exclusão até o final não é diferente de ir para o final.Respostas:
Vá para a linha de partida do seu bloco e digite ma(marque "a", embora você possa, obviamente, usar letras diferentes e até várias letras para marcas diferentes, desde que você possa manter em mente o que cada letra é uma marca) .
Então vá para a última linha e digite d'a(delete para marcar "a") ou y'a(puxe para marcar "a") (a) .
Isso excluirá / arrancará todas as linhas da atual para a marcada (inclusive).
Em seguida, você pode colá-lo em outro lugar com os comandos de colagem normais, como pou P.
É também compatível com
vi
, bem comovim
, sobre a chance de que seu ambiente não é abençoado com o último.(a) Eu também uso isso para salvar meu lugar no arquivo se precisar procurar em outro lugar algo como, por exemplo, copiar e colar a definição de uma função que desejo chamar.
Simplesmente marque a linha atual da mesma maneira mae depois saio para encontrar o que você está procurando.
Então, uma vez que eu o encontrei e o copiei em um registro, eu apenas entro 'apara voltar para marcar "a", a linha que eu salvei anteriormente, onde posso colá-lo.
fonte
v
tecla, pergunto-me: eu realmente preciso disso ou existe uma maneira de movimento melhor?No Vim, use o modo de linha visual :
Para excluir grandes blocos de texto, isso é preferível ao modo visual simples, porque você não precisa se preocupar com qual coluna o cursor está.
fonte
}
para selecionar um parágrafo inteiro ou)
frases. Há mais, você pode ler sobre eles em:h object-motions
/something<CR>
é um método muito eficiente para chegar ao fim do seu bloco selecçãoj
para mover o cursor para baixo (etapa 3), você pode digitar o número da linha seguido porG
para selecionar até essa linha. Exemplo:V150Gd
Você pode
:set relativenumber
, para não precisar contar. ;)fonte
:set number
, e então use d35G para excluir até a linha 35.relativenumber
, mas melhor :-)Você pode excluir facilmente um grande bloco de texto conhecendo sua estrutura.
Se for parágrafo, use: d{(por exemplo, você pode prefixar o número de parágrafos)
Se for um bloco de código entre parênteses, use: d%
Se o texto aparecer até o final do arquivo, use: dG
Se você souber como termina, use: d/e digite o texto final seguido por Enter(você também pode usar expressões regulares, para que as possibilidades sejam infinitas).
Como alternativa, use o modo visual ( V) e use as teclas de movimento para selecionar rapidamente o texto (por exemplo, por {) e removê-lo ( d).
Ou, como sugeriu Lie Ryan, use
d/search-string/e
para excluir o texto do cursor atual para a string pesquisada.Veja:
:help d
e:help motion
para mais informações.fonte
d/search-string/e
necessário excluir do cursor atual até o final da cadeia de pesquisa, incluindo a própria cadeia de pesquisa ec/search-query
entrar no modo de inserção após a exclusão. Usard/
withset incsearch
é uma combinação elegante, pois permite descobrir interativamente se você está operando no intervalo de texto correto e ajudá-lo a saber quando parar de digitar a consulta de pesquisa para evitar digitar mais do que o necessário.d
coma
(externo) oui
(interno) e um especificador de objeto. Objetos comow
por palavra,p
para parágrafo,(
oub
para(...)
,[
para[...]
,{
ouB
para{...}
etc. documentação para visuais-operadores .Você pode usar movimentos e / ou objetos de texto. Por exemplo, você pode excluir tudo do cursor até a próxima linha em branco com
d}
. Se o cursor estiver dentro de um parágrafo, o parágrafo poderá ser excluído comdip
oudap
. Se o cursor estiver dentro de uma tag HTML, você poderá excluí-lo comdit
oudat
.Boas mnemônicos para estes são " d elete i nside" e " d élete um round" (parágrafo / tag / parênteses).
fonte
Eu costumo fazer
que excluirá todas as linhas entre os números de linha inicial e final fornecidos (incluindo as linhas especificadas).
Observe que ambos
start
eend
podem ser números de linha absolutos, padrões ou deslocamentos de outra posição.Veja também o comentário da doubleDown sobre a visualização da documentação do intervalo do Vim , e há algumas dicas úteis.
Exemplo:
Digamos que você tenha o seguinte arquivo:
Em seguida, usando o comando
:2,3d
ou:/fox/,/over/d
ou:/quick/+1,/lazy/-1
ou:+1,+2d
se você estiver na primeira linha ou:-1,.d
na terceira linha, você terminará com:fonte
:set ruler
, em seguida, ir para a parte superior e inferior do texto para encontrarstart
eend
números de linha, em seguida, fazê:<start>,<end>d
:+12,+24d
<start>
e<end>
para isto. Para referência, consulte:h [range]
. Portanto, é realmente um pouco mais flexível do que você imaginou.Se você estiver lidando com blocos delimitados (por exemplo: código ou tags XML / HTML), poderá posicionar o cursor no início do bloco e usar o modo visual
%
para selecionar rapidamente blocos inteiros de código e pressionard
para excluí-los.fonte
dap
para eliminar um parágrafo,da(
,da{
,da[
, para excluir blocos delimeted por parênteses, chaves ou colchetes. Para html existedat
, o que exclui um tag, eda'
eda"
eliminar cordas. Há também osdip
,di(
variantes, etc, que irá apagar tudo dentro dos delimitadores, mas deixam os delimitadores intacta. Como alternativa, você pode usarvap
(respvip
) para selecionar todos os parágrafos (resp interno). (E então existeva(
evi(
.) Além disso, existecap
ecip
(ouca(
eci(
) para excluir e ir para o modo de inserção (ou seja, "alterar"). Eyap
para arrancar #Além de todos os outros bons conselhos, estou adicionando d+ Shift+ Lpara excluir tudo da posição atual do cursor até a última linha visível na tela. Repetir o comando fará com que você desça relativamente rápido.
fonte
O plugin numbers.vim é muito útil para isso. É uma maneira aprimorada de preceder cada linha com um número de linha. Como
'number'
e'relativenumber'
, ambos rolaram em um!Ele é ativado por padrão após a instalação, você também deseja adicionar
set number
ao seu vimrc se ainda não o tiver, pois ele se comporta de maneiras estranhas se você não o tiver.No modo normal , é semelhante a
:set relativenumber
:Ele mostra os números de linha relativos, exceto a linha em que o cursor está, onde mostra o número absoluto da linha (7 neste caso).
Se mudarmos para o modo de inserção , ele se comportará como se
number
estivesse definido, sempre mostrando números de linhas absolutos:Existem mais opções e alguns comandos (consulte a página inicial), mas os padrões devem funcionar para a maioria das pessoas.
fonte
set number
,set relativenumber
entãoautocmd InsertEnter * :set norelativenumber
eautocmd InsertLeave * :set relativenumber
Outra abordagem é se você estiver tentando excluir um padrão específico, basta digitar d/
delim
Enter.fonte
Você pode usar o procedimento normal de inserir dmais uma moção (como já explicado nas outras respostas). O plug-in EasyMotion fornece novos movimentos que você pode usar para resolver seu problema de maneira rápida e fácil.
Digamos que você queira excluir da posição atual do cursor até o final de qualquer palavra na tela, as teclas de movimento seriam
<Leader>
<Leader>
e(semelhantes aoe
movimento normal ). Em seguida, digite a (s) letra (s) destacada (s) que aparecem no final da palavra em questão. Há também um movimento de linha para que você possa excluir a linha atual até a linha em questão com<Leader>
<Leader>
j.Eu tenho minha
<Leader>
chave definida como ,. Portanto, o comando completo é d<Leader>
<Leader>
e{letra (s) destacada (s)}.De
:help easymotion
:Editar:
O repositório do github do EasyMotion está em https://github.com/Lokaltog/vim-easymotion .
Este reddit sobre pessoas que usam o easymotion pode ser uma leitura divertida.
fonte
Existe uma solução simples que pode resolver seu problema.
Coloque o cursor no início do bloco de texto que você deseja remover e faça
d50gg
.Isso excluirá todas as linhas da sua posição atual para a 50ª linha do seu texto.
eq: se o cursor estiver na linha 46 ,
d50gg
excluirá 4 linhas.fonte
G
vez de gg, pois também funciona no vi, e:set number
é claro que sempre é útil para encontrar qual é o número da linha na qual você deseja ir.Use o modo visual com destaque de linha.
Eu prefiro esse método para excluir blocos de código porque ele exclui linhas inteiras em comparação ao simples uso do modo visual, onde você deve posicionar o cursor na coluna da direita para excluir o que deseja.
fonte
Como não gosto de usar
relativenumber
o tempo todo, configurei meu Vim para ativá-lo apenas quando estou no Modo Visual:Isso facilita sua tarefa:
porque depois de bater, Vvocê pode ver a que distância a linha de destino está.
Isso pode ser irritante a longo prazo (o texto muda para a direita e para a esquerda quando o número relativo é ativado / desativado), mas até agora estou gostando bastante.
fonte
v<Esc>d50j
?V
se souber que farei uma operação em linha e, em seguida, posso deixar ad
última, para maior confiança.O que funcionou muito bem para mim com
vi
::set number
para visualizar o número da linha até onde eu queria excluir;Volte para a linha em que a exclusão teve que começar
d1290G
fonte