Manipular caracteres com seu código ascii

8

Digamos que eu tenho

let l:letter = 'A'

existe uma função que pega o l:lettercódigo ascii e o transforma 'B'? Quero dizer algo como

let l:next_letter = l:letter + 1

Eu sei que há <Ctrl-A>com set nf=alpha, mas isso exige que tenhamos o cursor sobre o personagem no documento e eu queria saber se é possível fazê-lo com uma variável sem modificar o documento.

Aqui está o que eu tento até agora, mas como eu disse, ele modifica o documento e a posição do cursor:

fu! s:get_next_char(letter)
    set nf=octal,hex,alpha
    call setline(line('$') + 1, a:letter)
    exe ':normal! G^'."\<C-A>"
    set nf=octal,hex

    let l:next_letter = getline('$')
    normal! Gdd
    return l:next_letter
endfu
Jcao02
fonte
1
:help string-functions.
Romainl
2
@romainl obrigado pela dica, mas da próxima vez leve em consideração que talvez eu esteja programando em vimscript há alguns dias e pelo que sei, string-functionsnão é uma página de manual padrão global para todos os idiomas, sério.
Jcao02
2
Concordo com o @ Jcao02, o conhecimento prévio de todas as páginas de ajuda do Vim não é um requisito deste site. E eu classificaria :help string-functionscomo um pouco obscuro. Além disso, algumas linguagens de script como python e perl usam chr()e ord()funções para converter para ascii / character. Portanto, a pesquisa com esses termos ainda não mostraria as funções nr2chare char2nr. Acho que o comentário de @ romainl deve ser postado como resposta.
akshay
2
Eu tenho que concordar com o romainl: é muito importante saber navegar pelas páginas de ajuda do vim. Minhas primeiras aulas de shell me ensinaram man man. :help :helpé igualmente importante. Mas a documentação do vim é bastante massiva e difícil de entender nos primeiros anos. Assim, truques como :h function^Dnos dão pontos de entrada. Aqui seria :h functions(/ :h string-functions). Então, é fácil entender o que está fazendo o que. Mesmo se estivermos acostumados a outros idiomas. Nós sempre pode dar a informação (que é o que estamos fazendo na maioria das vezes), mas ensinar a pescar é mais importante - você sabe o provérbio ...
Luc Hermitte
2
@ LucHermitte Eu diria que apenas postar :help string-functionsnão está mostrando como pescar. É mais como dar a isca a alguém e não ensiná-lo a pescar. Postar como eles podem procurar funções, é ensiná-los a pescar.
Akshay

Respostas:

2

A questão é (grifo meu):

existe uma função que pega o l:lettercódigo ascii e o transforma em 'B'?

Como você deseja uma função , a primeira coisa a tentar é :help function<C-d>listar todas as tags de documentação que contenham function:

:function                    list-functions               folding-functions
function()                   time-functions               history-functions
functions                    mark-functions               mapping-functions
function-key                 text-functions               various-functions
function_key                 compl-function               numbered-function
function-list                local-function               autoload-functions
:function-verbose            spell-functions              quickfix-functions
function-argument            float-functions              complete-functions
nb-functions                 style-functions              anonymous-function
function-search-undo         ft-ada-functions             Dictionary-function
gui-functions                string-functions             completion-functions
arg-functions                server-functions             window-size-functions
var-functions                cursor-functions             interactive-functions
function-range-example       window-functions             command-line-functions
expr-function                buffer-functions             highlighting-functions
new-functions-5.2            system-functions             curly-braces-function-names
date-functions               syntax-functions             python-Function
dict-functions               xterm-function-keys          :endfunction
file-functions               vt100-function-keys          :delfunction
user-functions               bitwise-function

O candidato mais óbvio é function-list, vamos tentar:

There are many functions.  We will mention them here, grouped by what they are
used for.  You can find an alphabetical list here: |functions|.  Use CTRL-] on
the function name to jump to detailed help on it.

String manipulation:                    *string-functions*
    nr2char()       get a character by its ASCII value
    char2nr()       get ASCII value of a character
    [...]

Você deve ter notado um padrão, aqui: as funções são agrupadas por tema. Isso significa que, se você precisar de uma função para filtrar uma lista, poderá ir diretamente para :help list-functions.

As páginas de ajuda do Vim são muito úteis; muitas vezes :help <keyword><C-d>você terá um longo caminho ;-)

romainl
fonte