Eu recebi dados registrados em um arquivo de texto que é apenas uma linha longa com cada valor separado por um espaço. Existe um comando ou conjunto de comandos que dividirá uma linha em várias linhas?
11
Eu recebi dados registrados em um arquivo de texto que é apenas uma linha longa com cada valor separado por um espaço. Existe um comando ou conjunto de comandos que dividirá uma linha em várias linhas?
Você poderia simplesmente substituir qualquer espaço consecutivo na linha com uma nova linha usando o comando :s/\s\+/\r/g
. \s\+
significa um ou mais caracteres de espaço em branco e \r
é uma nova linha, consulte :help :substitute
e :help regexp
para obter detalhes. Se você executar o comando em uma linha como:
foo bar baz
Você obtém:
foo
bar
baz
Se você hlsearch
ativou e não deseja encher a tela com espaços destacados em todos os lugares, você pode escrever uma pequena função como a seguinte para evitá-la:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
, veja:help s/\r
. Pode ser substituído por uma digitação literal de nova linha<c-v><cr>
. Nesse contexto,\n
é um caractere nulo, veja:help s/\n
.replaces the content of the register
- qual registro?Usar
vim
a substituição é provavelmente uma das melhores maneiras de realizar sua tarefa, mas você também pode usar uma macro. Suponha que tenhamos os seguintes dados, com o cursor em algum lugar na linha 1:Iniciando no modo normal, pressionar qqcomeçará a gravar uma macro que pode ser chamada via @q. Qualquer coisa digitada depois qqpode ser repetida através da chamada mencionada acima. Nosso objetivo é gravar comandos normais que serão gerais o suficiente para permitir repetições contínuas.
Assim, podemos digitar 0para trazer o cursor para o início da linha e depois fspacemovê-lo para o primeiro espaço. Isso nos permite digitar renter, resultando em:
Atingir qagora é uma boa ideia, pois nossa macro reutilizável está pronta para repetição. Um tanto arbitrariamente, notamos que existem 4 espaços restantes para substituir por novas linhas. Assim, pressionando, 4@qrepetimos a
q
macro 4 vezes, resultando em:Note-se que por causa da maneira como configurar o macro, teria sido seguro para repetir o comando mais de 9000 vezes, uma vez que só afetaria a linha atual, e uma vez que não havia espaços para a direita da última entrada de dados, fspaceserá 'bem' falham, impedindo que os dados sejam substituídos por novas linhas.
Então, para repetir desde o início:
qq0fspacerenterq9001@q
fornece o nosso resultado.
fonte
9001
tecla no teclado para digitar seu nome de usuário rapidamente.A maneira mais fácil de dividir linhas no Vim é o comando do modo normal
gq
(digite as duas letras em rápida sucessão no modo normal ou visual).No modo visual, ele dividirá o que for selecionado; no modo normal, você seguirá
gq
um movimento.Por exemplo,
gql
dividirá uma linha na largura definida no momento. Para definir a largura das linhas de divisão diferentes da sua configuração atual, você pode usar:set textwidth=n
, onden
está o número de caracteres que deseja em uma linha, por exemplo,10
e retornar à sua largura normal quando terminar.Obtive essas informações de um vídeo do Youtube de Kholidfu que mostra como unir e dividir linhas no modo normal usando um movimento.
fonte