Memanipulasi karakter dengan kode ascii mereka

8

Katakanlah saya punya

let l:letter = 'A'

apakah ada fungsi yang mengambil l:letterkode ascii dan mengubahnya 'B'? Maksud saya sesuatu seperti

let l:next_letter = l:letter + 1

Saya tahu ada <Ctrl-A>dengan set nf=alpha, tapi itu perlu memiliki kursor di atas karakter dalam dokumen dan saya bertanya-tanya apakah mungkin untuk melakukannya dengan variabel tanpa memodifikasi dokumen.

Inilah yang saya coba sejauh ini, tetapi seperti yang saya katakan, itu memodifikasi dokumen dan posisi kursor:

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
sumber
1
:help string-functions.
romainl
2
@romainl terima kasih atas tipnya tetapi lain kali memperhitungkan bahwa mungkin saya sudah pemrograman dalam vimscript selama beberapa hari dan untuk apa yang saya tahu, string-functionsbukan halaman manual standar global untuk setiap bahasa, serius.
Jcao02
2
Saya setuju dengan @ Jcao02, pengetahuan sebelumnya tentang keseluruhan halaman bantuan Vim bukan merupakan persyaratan dari situs ini. Dan saya akan mengklasifikasikan :help string-functionssebagai sedikit tidak jelas. Juga, beberapa bahasa scripting seperti penggunaan python dan perl chr()dan ord()fungsi untuk mengkonversi ke ascii / karakter. Jadi mencari dengan istilah-istilah ini masih tidak akan muncul nr2chardan char2nrberfungsi dengan baik. Saya pikir komentar @ romainl seharusnya diposting sebagai jawaban.
akshay
2
Saya harus setuju dengan romainl: sangat penting untuk mengetahui cara menavigasi halaman bantuan vim. Kelas shell pertama saya mengajari saya man man. :help :helpsama pentingnya. Tetapi dokumentasi vim cukup besar dan sulit untuk ditemukan pada tahun-tahun pertama. Dengan demikian trik seperti :h function^Dmemberi kami poin entri. Ini dia :h functions(/ :h string-functions). Maka, mudah untuk memahami apa yang melakukan apa. Bahkan jika kita terbiasa dengan bahasa lain. Kami selalu dapat memberikan informasi (itu yang paling sering kami lakukan), tetapi mengajarkan cara memancing itu lebih penting - Anda tahu pepatahnya ...
Luc Hermitte
2
@LucHermitte Saya berpendapat bahwa posting saja :help string-functionstidak menunjukkan cara memancing. Ini lebih seperti memberi seseorang umpan dan tidak mengajari mereka memancing sama sekali. Memposting bagaimana mereka dapat mencari fungsi, mengajarkan mereka untuk memancing.
akshay

Jawaban:

12

Sangat mudah dilakukan dengan :help nr2char()dan :help char2nr().

Contoh penggunaan:

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

Kemudian, :echo b_charakan mengembalikan 'B'

Luc Hermitte
sumber
2

Pertanyaannya adalah (beri penekanan pada saya):

apakah ada fungsi yang mengambil l:letterkode ascii dan mengubahnya menjadi 'B'?

Karena Anda menginginkan fungsi , hal pertama yang harus dicoba adalah :help function<C-d>yang mencantumkan setiap tag dokumentasi yang berisi 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

Kandidat yang paling jelas adalah function-list, mari kita coba:

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

Anda mungkin telah memperhatikan sebuah pola, di sini: fungsi dikelompokkan berdasarkan tema. Ini berarti bahwa, jika Anda memerlukan fungsi untuk memfilter daftar, Anda dapat langsung menuju :help list-functions.

Halaman bantuan Vim sangat berguna; sering kali :help <keyword><C-d>akan membuat Anda jauh ;-)

romainl
sumber