Manipuliere Zeichen mit ihrem ASCII-Code

8

Sagen wir, ich habe

let l:letter = 'A'

l:letterGibt es eine Funktion, die ASCII-Code aufnimmt und in diesen umwandelt 'B'? Ich meine so etwas wie

let l:next_letter = l:letter + 1

Ich weiß, dass es <Ctrl-A>mit gibt set nf=alpha, aber dafür muss der Cursor über dem Zeichen im Dokument stehen, und ich habe mich gefragt, ob es möglich ist, dies mit einer Variablen zu tun, ohne das Dokument zu ändern.

Folgendes versuche ich bisher, aber wie gesagt, es ändert das Dokument und die Cursorposition:

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
quelle
1
:help string-functions.
Romainl
2
@romainl danke für den Tipp, aber denken Sie beim nächsten Mal daran, dass ich vielleicht seit ein paar Tagen in Vimscript programmiere und für das, was ich weiß, string-functionskeine globale Standard-Manpage für jede Sprache ist, im Ernst.
Jcao02
2
Ich stimme @ Jcao02 zu. Vorkenntnisse der gesamten Vim-Hilfeseiten sind keine Voraussetzung für diese Website. Und ich würde :help string-functionsals etwas dunkel einstufen . Einige Skriptsprachen wie Python und Perl verwenden chr()und ord()Funktionen zum Konvertieren in ASCII / Zeichen. Wenn Sie also mit diesen Begriffen suchen, werden die Funktionen nr2charund auch immer noch nicht char2nrangezeigt. Ich denke, @ romainls Kommentar sollte stattdessen als Antwort gepostet werden.
Akshay
2
Ich muss romainl zustimmen: Es ist sehr wichtig zu wissen, wie man auf vim-Hilfeseiten navigiert. Meine ersten Shell-Kurse haben mich unterrichtet man man. :help :helpist ebenso wichtig. Die Dokumentation von vim ist jedoch ziemlich umfangreich und in den ersten Jahren schwer zu berechnen. Tricks wie :h function^Dgeben uns also Einstiegspunkte. Hier wäre es :h functions(/ :h string-functions). Dann ist es leicht zu verstehen, was was macht. Auch wenn wir an andere Sprachen gewöhnt sind. Wir können immer geben die Informationen (es ist , was wir die meiste Zeit tun), sondern Lehre , wie man Fisch ist es wichtiger - Sie das Sprichwort , dass ...
Luc Hermitte
2
@ LucHermitte Ich würde argumentieren, dass nur das Posten :help string-functionsnicht zeigt, wie man fischt . Es ist eher so, als würde man jemandem den Köder geben und ihm nicht das Fischen beibringen. Das Posten, wie sie nach Funktionen suchen können, bringt ihnen das Fischen bei.
Akshay

Antworten:

12

Es ist einfach mit :help nr2char()und zu tun :help char2nr().

Anwendungsbeispiel:

:let b_char = nr2char(char2nr('A') + 1)

Dann :echo b_charwird 'B' zurückgegeben

Luc Hermitte
quelle
2

Die Frage ist (Hervorhebung von mir):

Gibt es eine Funktion , die l:letterASCII-Code in 'B' umwandelt?

Da Sie eine Funktion möchten , müssen Sie zunächst versuchen :help function<C-d>, alle Dokumentations-Tags aufzulisten, die Folgendes enthalten 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

Der offensichtlichste Kandidat ist function-list, versuchen wir es:

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

Möglicherweise haben Sie hier ein Muster bemerkt: Funktionen sind nach Themen gruppiert. Dies bedeutet, dass Sie direkt zu einer Funktion wechseln können , wenn Sie eine Funktion zum Filtern einer Liste benötigen :help list-functions.

Die Vim-Hilfeseiten sind sehr nützlich. oft :help <keyword><C-d>wirst du einen langen Weg zurücklegen ;-)

romainl
quelle