Excluir espaço em branco para um conjunto de linhas no editor Vim

12

Eu tenho algum texto como o seguinte em um arquivo:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Preciso excluir o espaço vazio antes de cada uma das linhas. Para uma linha, o que eu faço é 0dw

Eu posso repetir o mesmo comando usando. mas navegando manualmente para as próximas linhas.

Mas existe uma maneira de aplicar '0dw' a esse bloco de linhas?

Suponho que existe uma maneira de usar macros, mas não as usei antes. Mas estou disposto a aprendê-los se não houver outra escolha.

saiy2k
fonte
Uma boa pergunta, acabo fazendo a mesma coisa. E bem-vindo ao site.
Sardathrion - contra abuso de SE

Respostas:

10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Saiba mais aqui em http://vim.wikia.com/wiki/Remove_unwanted_spaces

Se você deseja fazer isso para um determinado intervalo de linhas:

:19,25s/^\s\+//

BTW, a melhor maneira de começar a aprender o vim é executar o vimtutorcomando, ele ensinará como usar o Vim no editor do Vim.

Nikhil Mulley
fonte
1
: le foi incrível e muito obrigado por as alternativas eo link :)
saiy2k
3
+1 para mencionar o vimtutor, bem como uma boa resposta.
Sardathrion - contra abuso SE
1
Selecione as linhas relevantes usando Ve movendo o cursor para expandir a seleção de linha. Em seguida, pressione :para entrar automaticamente '<,'>e, a partir daí, você pode usar o regexp do Nikhil.
UncleZeiv
1
outra maneira de fazer uma série de linhas (desde que eu sempre esqueço os números das linhas) é marcar as 2 linhas e operar nas marcas. Por exemplo, vá para a linha 19 e pressione 'ma', vá para a linha 25 e pressione 'mb' e, em seguida, faça :'a,'bs/^\s\+//.
Patrick Patrick
7

Uma maneira alternativa de fazer isso é usar as ferramentas de indentação do VIM (geralmente vinculadas a </ >). Primeiro, você precisa de uma maneira de indicar quais linhas serão afetadas. Você pode usar o modo de seleção visual ou qualquer outro meio de especificar um intervalo de linhas a ser afetado e, em seguida, usar um número ou níveis de indentação arbitrariamente altos para remover. 9<geralmente faz o truque para remover pelo menos 9 níveis de recuo possível (tabulações / espaços) das linhas atuais.

Caleb
fonte
3

Eu tenho abordagem para fazer isso nas seguintes etapas simples:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Explicação da terceira etapa:

0 navega para o início da linha.

dw exclui a palavra (espaços vazios).

normalaplica-se o comando 0dw.

'<,'> repete o normal para todas as linhas selecionadas no modo visual.

saiy2k
fonte
1

ctrl+vpermite que você faça algo semelhante ao que deseja, mas não exatamente. Você pode selecionar um bloco visual e aplicar um comando ao lote.

Sardathrion - contra o abuso de SE
fonte
2
Selecionei essas linhas no modo de bloco e este comando funcionou:: '<,'> normal 0dw
saiy2k
1
@ saiy2k :normalé a coisa mais importante aqui, e acho que é a melhor resposta aqui. Você poderia publicá-lo como resposta?
Gilles 'SO- stop be evil'