106.07.19 vim map alt(meta) key

由於Cygwin無法自定義按鍵編碼
所以算是測試頗久的

這樣map就能在normal模式下加速,insert模式下也能用hjkl移動了



Terminal_MetaMode()有兩種mode,但是Cygwin只能用0
就是讓來代替alt
所以按著再按新增的按鍵也可以運作,不過太遠了通常不會這樣用

詳細再到Vim 中正确使用 Alt映射了解

在 .vimrc 中加入以下一大串接著就可以用 來map了 (x為英數字特殊符號)
沒錯連ctrl不行的特殊符號都可以,所以就可以


function! Terminal_MetaMode(mode)
    if has('nvim') || has('gui_running')
        return
    endif
    function! s:metacode(mode, key)
        if a:mode == 0
            exec "set <M-".a:key.">=\e".a:key
        else
            exec "set <M-".a:key.">=\e]{0}".a:key."~"
        endif
    endfunc
    for i in range(10)
        call s:metacode(a:mode, nr2char(char2nr('0') + i))
    endfor
    for i in range(26)
        call s:metacode(a:mode, nr2char(char2nr('a') + i))
        call s:metacode(a:mode, nr2char(char2nr('A') + i))
    endfor
    if a:mode != 0
        for c in [',', '.', '/', ';', '[', ']', '{', '}']
            call s:metacode(a:mode, c)
        endfor
        for c in ['?', ':', '-', '_']
            call s:metacode(a:mode, c)
        endfor
    else
        for c in [',', '.', '/', ';', '{', '}']
            call s:metacode(a:mode, c)
        endfor
        for c in ['?', ':', '-', '_']
            call s:metacode(a:mode, c)
        endfor
    endif
    if &ttimeout == 0
        set ttimeout
    endif
    if &ttimeoutlen <= 0
        set ttimeoutlen=100
    endif
endfunc
call Terminal_MetaMode(0)


是說也可以用下面這種,不過不建議
execute "set <M-j>=\ej"
nnoremap <M-j> j


參考資料:

沒有留言:

張貼留言

^ Top