Automatische Transliteration in Vim

ConTeXt-Nutzer, die die neueste Version des Transliterator-Moduls installiert haben, können mit wenig Aufwand alle Transliterationsschemata auch in ihrerm Editor verfügbar machen. Das folgende Snippet, anzuhängen an ~/.vimrc, bindet das Transliterieren der aktuellen Zeile an Tasten F9 (insert mode), sowie Lt (normal und visual, wobei sich L auf den aktuellen Mapleader bezieht). Zudem kann mit F10 durch die verschiedenen Transliteration-Modi gewechselt werden. Der Modus defaultet zu all (vgl. das Manual). Mit F11 kann er direkt wieder auf diesen Wert zurückgesetzt werden.

"===============================================================================
" TRANSLITERATOR PLUGIN
"===============================================================================

let g:trl_mode = "all"
let g:trl_mode_list = [ "all", "ru_old", "ru", "ru_transcript_de", "ru_transcript_de_exp", "ru_transcript_en", "ru_transcript_en_exp", "ru_cz", "ocs_cz", "iso9_ocs", "iso9_ocs_hack", "ocs", "ocs_gla", "sr_tocy", "sr_tolt", "bg_de", "gr", "gr_n" ]
let g:trl_mode_dict = { }
let b:modecnt = 1
for mode in g:trl_mode_list
    let g:trl_mode_dict[mode] = b:modecnt
    let b:modecnt = b:modecnt + 1
endfor

function! TRL_transliterate(mode, str)
    let result = system(printf("/usr/bin/env mtxrun –script transliterate –mode=%s –s=\"%s\" –silent 2> /dev/null", a:mode, a:str))
    if result =~ "\n$"
        return strpart(result, 0, strlen(result) - 1)
    end
    return result
endfunction

function! TRL_do_line()
    let current = getline(".")
    let trled   = TRL_transliterate(g:trl_mode, current)
    call setline(".", trled)
endfunction

function! TRL_do_selection()
    normal gv"ty
    let @t = TRL_transliterate(g:trl_mode, @t)
    normal gvd
    normal "tP
endfunction

function! TRL_set_mode(mode)
    if get(g:trl_mode_dict, a:mode)
        let g:trl_mode = a:mode
    endif
    echo "Set transliteration mode to: “\" . g:trl_mode . "”."
endfunction

function! TRL_cycle_modes()
    let next_mode = get(g:trl_mode_dict, g:trl_mode)
    if len(g:trl_mode_list) == next_mode
        let next_mode = 0
    endif
    let g:trl_mode = get(g:trl_mode_list, next_mode)
    echo "Set transliteration mode to: “\" . g:trl_mode . "”."
endfunction

nmap <Leader>t :call TRL_do_line()<CR>
imap <F9>      <ESC>:call TRL_do_line()<CR>a
vmap <Leader>t :call TRL_do_selection()<CR>

nmap <F10>     :call TRL_cycle_modes()<CR>
imap <F10>     <ESC>:call TRL_cycle_modes()<CR>a

nmap <F11>     :call TRL_set_mode("all")<CR>
imap <F11>     <ESC>:call TRL_set_mode("all")<CR>a

"===============================================================================
" END TRANSLITERATOR PLUGIN
"===============================================================================

Ein Trackback

  1. [...] Capanei paginae nvgae Zum Inhalt springen LICENSEqvae ad hanc paginam pertineant « Automatische Transliteration in Vim [...]

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Log Out / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Log Out / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Log Out / Ändern )

Verbinde mit %s

Follow

Get every new post delivered to your Inbox.