Como usar o escape hexadecimal Unicode em: s /// string de substituição no Vim?

0

Eu quero usar um escape Unicode hexadecimal na string de substituição de um comando de substituição, ou seja, com o caractere de exemplo U + 20AC:

:s#something#\x{20AC}#g

O exemplo acima não funciona, porque ele usa a sintaxe Perl na string de substituição, mas eu quero que isso funcione no Vim, e eu quero que ele funcione para muitos outros possíveis caracteres Unicode, especificados pelo seu valor hexadecimal (2 ou 4 dígitos ou possivelmente até mais). Como esta é uma série de instruções de substituição que serão geradas por um script, gostaria que as instruções de substituição em si fossem apenas ASCII, pois é mais fácil trabalhar com elas. Eu acho que deve haver uma sintaxe adequada para isso, mas eu simplesmente não consigo encontrá-lo. \% u20AC funciona no padrão de pesquisa, mas não na sequência de substituição. Como isso não é feito de forma interativa, o método de dígitos hexadecimais CTRL-V + 4 não funcionará.

    
por gpvos 26.11.2018 / 11:41

3 respostas

1

:s#something#\=nr2char(0x20AC)#g

Veja :help sub-replace-expression e :help nr2char() no Vim.

Ou, se 20AC for realmente uma constante, você pode digitar : s # something # <Ctrl-V> u 20AC # g <Enter> , dando

:s#something#€#g

Veja :help i_ctrl-v no Vim.

    
por 26.11.2018 / 12:03
1

Depois de mais algumas leituras de doc, encontrei pelo menos uma maneira bem elaborada de fazer isso, usando uma expressão de substuição:

:s#something#\="\<Char-0x20AC>"#g

Espero que exista uma maneira mais fácil (mais direta) de fazer isso.

    
por 26.11.2018 / 12:04
0

As outras respostas estão bem; interpolação de strings via :execute é um método que é particularmente adequado para scripts, então estou mencionando isso também.

Você pode usar a notação :help <Char> em strings com aspas duplas:

let char = "\<Char-0x20AC>"
execute 's#something#' . char . '#g'

Ou converta um número via nr2char() :

let value = 0x20AC
execute 's#something#' . nr2char(value) . '#g'
    
por 11.12.2018 / 13:42

Tags