Manipola i caratteri con il loro codice ASCII


8

Diciamo che ho

let l:letter = 'A'

c'è una funzione che accetta il l:lettercodice ASCII e lo trasforma in 'B'? Intendo qualcosa del genere

let l:next_letter = l:letter + 1

So che c'è <Ctrl-A>con set nf=alpha, ma questo richiede di avere il cursore sul carattere nel documento e mi chiedevo se fosse possibile farlo con una variabile senza modificare il documento.

Ecco cosa ho provato finora, ma come ho detto, modifica il documento e la posizione del cursore:

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

1
:help string-functions.
Romainl

2
@romainl grazie per il suggerimento, ma la prossima volta tieni conto che forse sto programmando in vimscript da un paio di giorni e, per quello che so, string-functionsnon è una pagina man standard globale per ogni lingua, sul serio.
Jcao02,

2
Sono d'accordo con @ Jcao02, la conoscenza preliminare dell'intera pagina di aiuto di Vim non è un requisito di questo sito. E lo classificherei :help string-functionscome leggermente oscuro. Inoltre, alcuni linguaggi di scripting come python e perl usano chr()e ord()funzioni per convertire in ascii / carattere. Quindi la ricerca con questi termini non mostra ancora le funzioni nr2chare char2nr. Penso che il commento di @ romainl debba essere pubblicato come risposta.
akshay,

2
Sono d'accordo con Romainl: è molto importante sapere come navigare nelle pagine di aiuto di VIM. Le mie prime lezioni di shell mi hanno insegnato man man. :help :helpè altrettanto importante. Ma la documentazione di Vim è piuttosto massiccia e difficile da immaginare nei primi anni. Quindi trucchi come :h function^Ddarci punti di entrata. Qui sarebbe :h functions(/ :h string-functions). Quindi, è facile capire cosa sta facendo cosa. Anche se siamo abituati ad altre lingue. Possiamo sempre fornire le informazioni (è quello che stiamo facendo la maggior parte del tempo), ma l'insegnamento di come pescare è più importante - si conosce il proverbio ...
Luc Hermitte

2
@LucHermitte Direi che il solo invio :help string-functionsnon mostra come pescare. È più come dare a qualcuno l'esca e non insegnare loro a pescare affatto. Pubblicare come possono cercare funzioni, insegna loro a pescare.
akshay,

Risposte:



2

La domanda è (enfasi sulla mia):

esiste una funzione che accetta il l:lettercodice ASCII e lo trasforma in "B"?

Poiché si desidera una funzione , la prima cosa da provare è :help function<C-d>che elenca tutti i tag di documentazione contenenti 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

Il candidato più ovvio è function-list, proviamolo:

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

Potresti aver notato uno schema, qui: le funzioni sono raggruppate per tema. Ciò significa che, se hai bisogno di una funzione per filtrare un elenco , puoi andare direttamente a :help list-functions.

Le pagine di aiuto di Vim sono molto utili; spesso le volte :help <keyword><C-d>ti faranno molta strada ;-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.