Manipular caracteres con su código ASCII

8

Digamos que tengo

let l:letter = 'A'

¿hay una función que tome el l:lettercódigo ascii y lo transforme 'B'? Me refiero a algo como

let l:next_letter = l:letter + 1

Sé que hay <Ctrl-A>con set nf=alpha, pero eso requiere tener el cursor sobre el carácter en el documento y me preguntaba si es posible hacerlo con una variable sin modificar el documento.

Esto es lo que intento hasta ahora, pero como dije, modifica el documento y la posición del 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
fuente
1
:help string-functions.
romainl
2
@romainl gracias por el consejo, pero la próxima vez tenga en cuenta que tal vez he estado programando en vimscript durante un par de días y, por lo que sé, string-functionsno es una página de manual estándar global para todos los idiomas, en serio.
Jcao02
2
Estoy de acuerdo con @ Jcao02, el conocimiento previo de la totalidad de las páginas de ayuda de Vim no es un requisito de este sitio. Y lo clasificaría :help string-functionscomo un poco oscuro. Además, algunos lenguajes de script como python y perl usan chr()y ord()funciones para convertir a ascii / character. Por lo tanto, la búsqueda con estos términos tampoco mostraría las funciones nr2chary char2nr. Creo que el comentario de @ romainl debería publicarse como respuesta.
akshay
2
Tengo que estar de acuerdo con romainl: es muy importante saber cómo navegar por las páginas de ayuda de vim. Mis primeras clases de concha me enseñaron man man. :help :helpEs igualmente importante. Pero la documentación de VIM es bastante masiva y difícil de entender los primeros años. Así trucos como :h function^Ddarnos puntos de entrada. Aquí estaría :h functions(/ :h string-functions). Entonces, es fácil entender qué está haciendo qué. Incluso si estamos acostumbrados a otros idiomas. Siempre podemos darle la información (que es lo que estamos haciendo la mayor parte del tiempo), sino enseñar a pescar que es más importante - se conoce el proverbio ...
Luc Hermitte
2
@LucHermitte Diría que solo publicar :help string-functionsno muestra cómo pescar. Es más como darle el anzuelo a alguien y no enseñarle a pescar en absoluto. Publicar cómo pueden buscar funciones es enseñarles a pescar.
akshay

Respuestas:

2

La pregunta es (énfasis mío):

¿hay una función que tome el l:lettercódigo ascii y lo transforme en 'B'?

Como desea una función , lo primero que debe intentar es :help function<C-d>enumerar todas las etiquetas de documentación que contienen 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

El candidato más obvio es function-list, probémoslo:

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
    [...]

Es posible que haya notado un patrón, aquí: las funciones están agrupadas por tema. Esto significa que, si necesita una función para filtrar una lista , puede ir directamente a :help list-functions.

Las páginas de ayuda de Vim son muy útiles; muchas veces :help <keyword><C-d>te llevará lejos ;-)

romainl
fuente