Manipulação de strings e texto



Nota: nos exemplos, algumas linhas de saída do console foram retiradas para clareza.


function! split

Cria um bloco (uma série) contendo as partes de uma string separadas por um delimitador. Este delimitador é dado como um argumento.  split é particularmente útil para analisar e manipular arquivos de texto e no dialeto de parse.

>> s: "My house is a very funny house"
>> split s " "                                                        ;every space is a delimiter.
== ["My" "house" "is" "a" "very" "funny" "" "" "" "" "house"] ;result is a series with 11 elements.

>> s: "My house ; is a very ; funny house"
>> split s ";"                                                        ;split happens at the semi-colons.
== ["My house " " is a very " " funny house"]        ;result is a series with 3 elements.

removing characters: action! trim

A palavra trim sem refinamentos, remove os espaços em branco e os tabs do começo e do fim de uma string. Também remove none de um bloco ou um objeto. O valor do argumento é alterado. Possui refinamentos para retirar caracteres específicos..

Refinements:

/head - Remove só da head (início).
/tail - Remove só da tail (final).
/auto - Auto-indenta linhas relativas à primeirla linha.
/lines - Remove todos os line-breaks e espaços extras.
/all - Remove todos os espaços, mas não os line-breaks.
/with - A mesma coisa que /all, mas remove caracteres em um argumento "with" fornecido por você. Deve ser char! string! ou integer!

>> e: " spaces before and after "  
>> trim e
== "spaces before and after"

trim espaços antes:

>> e: " spaces before and after "
>> trim/head e
== "spaces before and after "

trim espaços depois:

>> e: " spaces before and after "
>> trim/tail e
== " spaces before and after"

trim caracteres específicos:

>> d: "our house in the middle of our street"
>> trim/with d " "
== "ourhouseinthemiddleofourstreet"

>> a: "house"
>> trim/with a "u"
== "hose"

o oposto de trim: function! pad

pad expande uma string para um determinado tamanho usando espaços. O default é adicionar espaços à direita, mas com o refinamento /left, os espaços são adicionados à esquerda, ou seja, no início. Cuidado, pois a string original é modificada.

>> a: "House"
>> pad a 10
== "House "

>> pad/left a 20
== " House "

contatenação de texto: function! rejoin

>> a: "house" b: " " c: "entrance"
>> rejoin [a b c]
== "house entrance"

ou, usando append - modifica a série original.

>> append a c
== "house entrance"

>> a: "house" b: " " c: "entrance"

>> append a c
== "houseentrance"

>> append a append b c
== "houseentrance entrance"                ; "a" foi alterada para "houseentrance" na última manipulação

transformando séries em texto: action! form

form transforma uma série em uma string, removendo os colchetes e adicionando espaços entre os elementos.  form foi visto também no capítulo Acessando e formatando dados.

>> a: ["my" "house" 23 47 4 + 8 ["a" "bee" "cee"]]
>> form a
== "my house 23 47 4 + 8 a bee cee"

/part

O refinamento /part limita o número de caracteres da string criada.

>> a: ["my" "house" 23 47 4 + 8 ["a" "bee" "cee"]]
>> form/part a 8
== "my house"

comprimento da string: action! length?

>> f: "my house"
>> length? f        
== 8

parte esquerda da string:

usando copy/part :

>> s: "nasty thing"
>> b: copy/part s 5
== "nasty"

parte direita da string:

usando at :

>> s: "nasty thing"
>> at tail s -5
== "thing"

usando remove/part - isto muda a série original, cuidado!

>> s: "nasty thing"
>> remove/part s 6
== "thing"

parte do meio da string:

usando copy/part e at:

>> a: "abcdefghijkl"
>> copy/part at a 4 3
== "def"

inserindo strings:

no começo, usando insert:

>> s: "house"
>> insert s "beautiful "

>> s
== "beautiful house"

no fim, usando append:

>> s: "beautiful"
>> append s " day"
== "beautiful day"

no meio, usando insert at:

>> s: "nasty thing"
>> insert at s 7 "little "

>> s
== "nasty little thing"


native! lowercase - letras minúsculas

Muda a string original, cuidado.

>> a: "mY HoUse"
>> lowercase a
== "my house"

/part

>> a: "mY HoUse"
>> lowercase/part a 2
== "my HoUse"


native! uppercase - letras maiúsculas

>> a: "mY HoUse"
>> uppercase a
== "MY HOUSE"

/part

>> a: "mY HoUse"
>> uppercase/part a 2
== "MY HoUse"