Exclua 100 linhas do editor vi usando o comando único

33

Eu estou usando o Ubuntu e tentando excluir todas as 100 linhas do vieditor, mas eu tenho a pergunta da entrevista de fazer isso em um comando.

Mayur Mehta
fonte
Não é uma solução VI, mas a partir da linha de comando: echo -n > <file>remove todas as linhas de um arquivo (na verdade, apenas sobrescreve o arquivo com "").
azz
3
@ Der Não há necessidade de usar echonada para isso; > $filefunciona muito bem.
um CVn 26/08/13
4
Que tipo de empresa é essa, fazendo perguntas viem uma entrevista?
um CVn 26/08/13
2
Essa pergunta é facilmente respondida com um conhecimento rudimentar do vi. Em um computador com o vim instalado (no Ubuntu, eu recomendaria o vim-gtkpacote, pois isso lhe dá acesso ao xclipboard no vim), digite vimtutorna linha de comando (não no vim) para obter um tutorial interativo do básico. Não deve demorar mais de meia hora e é o melhor guia para iniciantes sobre o uso do vi / vim que você provavelmente encontrará.
evilsoup
1
@ MichaelKjörling Eu poderia imaginar isso em uma entrevista se o candidato mencionou experiência anterior vi(verbalmente ou resumida) ou se a pergunta foi precedida de "Ok, como administrador de sistema, você deve saber algo sobre editores de linha de comando, certo Você já usou vi? "
Wildcard

Respostas:

62

No modo normal, faça

100dd

ddexclui a linha atual. O prefácio desse comando com 100faz com que ele se repita 100 vezes.

Se houver menos de 100 linhas no arquivo iniciando na linha atual, dependendo da viimplementação, ele falhará ao excluir uma ou excluir quantas houver. No caso de vim, isso depende se a opção cpaka compatibleestá ativada ou não.

200_success
fonte
anwser errado é só apagar a linha atual
mayur Mehta
Eu quero excluir 100 linhas usando um comando de uma só vez
mayur Mehta
13
100ddé a resposta correta. Eu me pergunto o que você está fazendo.
#
1
@mayurMehta não sabe qual empresa está fazendo perguntas como essa e não sabe o que espera como resposta. Mas qualquer usuário iniciante do VI saberá que 100dd é a resposta correta.
Munim 30/08/13
1
@ vgoff Eu não sei .. Se eles não estão procurando uma solução geral para testar suas habilidades básicas em vim, então é apenas uma pergunta difícil para desconcertar os entrevistados. Eu diria que 100dd é a resposta. Se o entrevistador perguntar "O que acontece se o arquivo tiver menos de 100 linhas do cursor atual?", Eu responderia: "O comando exclui o que puder do cursor atual". Isso é perfeitamente razoável. A menos que o entrevistador esclareça, por que o cursor não estaria na primeira linha? Eu odeio perguntas complicadas como essas.
Munim
44
  1. excluir 100 linhas adiante (incluindo) a atual

    • repita dd (exclua a linha atual) 100 vezes:

      100dd
      
    • excluir da linha atual para 99 linhas adiante

      d99j
      
  2. excluir 100 linhas para trás (incluindo) a atual

    d99k
    
  3. excluir linhas em um intervalo específico pelo número da linha

    :1,100d
    
  4. excluir linhas em um intervalo que começa com a linha atual

    :.,.+99d
    

etc etc.

Sem utilidade
fonte
2
número 4 irá apagar linha corrente (0) até (0 + 100) linhas 101th, daí 101 linhas, em vez do solicitado 100. tentativa:.,+99d
Olivier Dulac
Drat, e eu acertei os movimentos! Obrigado.
26513 Useless
100dd não funcionou para mim também - mas # 4 acima funciona bem para mim no VI sob Solaris 10.
DemiSheep
8

Se todas as linhas no arquivo tiverem que ser excluídas, este comando vi especificará o intervalo de exclusão:

:1,$d

1denota a primeira linha e $denota a última linha

suspeito
fonte
ou :%d (em ":" contexto, ":% ..." é um atalho para ": 1, $ ...")
Olivier Dulac
também legal: d Gkeys & rarr; matar todos os conteúdos das reais [por exemplo linha superior] para linha de fundo
erch
3

Deseja excluir todas as linhas de um arquivo? Abra o arquivo com vi. Enquanto no início da primeira linha - o local padrão do cursor quando você abre o arquivo - pressione Escseguido de dG.

Apenas para observar, a ação dindica exclusão e Gindica a última linha do arquivo. Portanto, enquanto você pressiona qualquer linha dG, ela exclui toda a linha que começa da linha atual até a última.

Se você sabe quais linhas consecutivas para apagar - digamos, da linha 101 para 200 - digite as seguintes seqüências de teclas: Esc:101,200d.

Barun
fonte
Não é necessário pressionar escape se você acabou de abrir o arquivo e está no início do arquivo. Você está automaticamente (por padrão) no modo normal.
Vgoff
3

Não importa onde você esteja no arquivo, você pode ggdG

:%dfaria melhor em menos pressionamentos de tecla. Bem, contando as teclas shifte enter, na verdade, mais duas teclas pressionadas que a anterior.

Fazer algo como 100ddsó iria eliminar até 100 linhas de onde você está, e que não pode excluir todas as linhas do arquivo, dependendo da sua posição da linha atual.

vgoff
fonte
0

Esc ndd. n é o número de linhas para excluir e incluir a linha atual. Pressione o botão "Esc", depois "n" e, em seguida, "dd". Para melhorar sua compreensão

Rida Abid
fonte
Qual é a necessidade de escapar aqui
Prvt_Yadav
Essa resposta é idêntica à resposta aceita.
Kusalananda
Escape é apenas no caso de você estar no modo de inserção.
Rida Abid