Como posso excluir todas as linhas de um arquivo usando o vi?
No momento eu faço isso usando algo assim para remover todas as linhas de um arquivo:
echo > test.txt
Como posso excluir todas as linhas usando vi
?
Observação:
Usar dd
não é uma boa opção. Pode haver muitas linhas.
Responder1
Em vi
fazer
:1,$d
para excluir todas as linhas.
O :
introduz um comando (e move o cursor para baixo).
Isso 1,$
é uma indicação de quais linhas o seguinte comando ( d
) deve funcionar. Neste caso o intervalo da linha um até a última linha (indicado por $
, portanto você não precisa saber o número de linhas do documento).
O final d
significa excluir as linhas indicadas.
Existe uma forma mais curta ( :%d
), mas nunca a uso. O :1,$d
pode ser mais facilmente "adaptado" para, por exemplo, :4,$-2d
deixar apenas as 3 primeiras e as 2 últimas linhas, excluindo o resto.
Responder2
No vi eu uso
:%d
onde
:
diz ao vi para entrar no modo de comando%
significa todas as linhasd
: excluir
Na linha de comando,
> test.txt
também fará.
Qual é o problema com dd?
dd if=/dev/null of=test.txt
onde
/dev/null
é um arquivo especial de 0 bytesif
é o arquivo de entradaof
é o arquivo de saída
Responder3
Eu recomendo que você faça isso (deve funcionar em qualquer shell compatível com POSIX):
> test.txt
Se você realmente quiser fazer isso com o vi, você pode fazer:
- 1G (vá para a primeira linha)
- dG (excluir até a última linha)
Responder4
Se o seu cursor estiver na primeira linha (se não, digite: gg
ou 1G
), então você pode simplesmente usar dG
. Isso excluirá todas as linhas da linha atual até o final do arquivo. Portanto, para ter certeza de excluir todas as linhas do arquivo, você pode misturar as duas, o que seria: ggdG
(enquanto estiver no modo de comando).
Ou %d
no modo Ex, exemplo de linha de comando: vim +%d foo.bar
.
Relacionado:Como posso excluir no VIM todo o texto da linha atual até o final do arquivo?