mobaxterm用alt键作为meta键的方法

2018-12-11  本文已影响104人  leoatchina

根据skywind3000大大的文章Vim 中正确使用 Alt映射,我的vim配置也将alt键作了映射,避免了很多弹钢琴似的操作。

我现在的用软件的风格,是吃饭的家伙尽量用免费的软件。 vim/neovim、R/Rstudio、eclipse/vscode全是开源免费的, 终端linux下用gnome-termal和terminator,mac下是iterm2。

windows用mobaxterm,相比较商业软件 xshell和 securecrt,最大的问题是不能映射Altmeta键导致ssh到我的服务器上后,不能用alt键,有些我精心设置的快捷功能不能实现。在它的软件设置菜单里,根本找不到设置项,网上查找提到要用autohotkey,装上去之后发现太麻烦。
后来还是根据前面skywind3000的文章里面一句话解决:

任意平台下面的 xterm 可以配置 ~/.Xdefaults 来设置这个行为。

放狗搜索下,在这个文件里加下面这个设置: XTerm*metaSendsEscape: true,解决问题。

一个小问题是这样就不能用alt+1,2,3.....切换tab,不知道有没有知道办法?
xshell里可以只映射左或右alt键作为esc,另一个alt保留原功能来解决。

补充个vim函数,正确映射alt键


" alt meta key
function! Alt_meta_map()
    set ttimeout
    if $TMUX != ''
        set ttimeoutlen=20
    elseif &ttimeoutlen > 60 || &ttimeoutlen <= 0
        set ttimeoutlen=60
    endif
    if has('nvim') || has('gui_running') && !OSX()
        return
    endif
    function! s:metacode(key)
        exec "set <M-".a:key.">=\e".a:key
    endfunc
    for i in range(26)
        call s:metacode(nr2char(char2nr('a') + i))
        call s:metacode(nr2char(char2nr('A') + i))
    endfor
    for i in range(10)
        call s:metacode(nr2char(char2nr('0') + i))
    endfor
    let s:list = [',', '.', '-', '_', ';', ':', '/', '?']
    for c in s:list
        call s:metacode(c)
    endfor
    if has('gui_macvim')
        let a:letters_dict={
            \ 'a':'å',
            \ 'b':'∫',
            \ 'c':'ç',
            \ 'd':'∂',
            \ 'e':'´',
            \ 'f':'ƒ',
            \ 'g':'©',
            \ 'h':'˙',
            \ 'i':'ˆ',
            \ 'j':'∆',
            \ 'k':'˚',
            \ 'l':'¬',
            \ 'm':'µ',
            \ 'n':'˜',
            \ 'o':'ø',
            \ 'p':'π',
            \ 'q':'œ',
            \ 'r':'®',
            \ 's':'ß',
            \ 't':'†',
            \ 'u':'¨',
            \ 'v':'√',
            \ 'w':'∑',
            \ 'x':'≈',
            \ 'y':'¥',
            \ 'z':'Ω',
            \ 'A':'Å',
            \ 'B':'ı',
            \ 'C':'Ç',
            \ 'D':'∂',
            \ 'E':'´',
            \ 'F':'Ï',
            \ 'G':'˝',
            \ 'H':'Ó',
            \ 'I':'ˆ',
            \ 'J':'Ô',
            \ 'K':'',
            \ 'L':'Ò',
            \ 'M':'Â',
            \ 'N':'˜',
            \ 'O':'Ø',
            \ 'P':'∏',
            \ 'Q':'Œ',
            \ 'R':'‰',
            \ 'S':'Í',
            \ 'T':'ˇ',
            \ 'U':'¨',
            \ 'V':'◊',
            \ 'W':'„',
            \ 'X':'˛',
            \ 'Y':'Á',
            \ 'Z':'¸',
            \ ',':'≤',
            \ '.':'≥',
            \ '-':'–',
            \ '_':'—',
            \ ';':'…',
            \ ':':'Ú',
            \ '/':'÷',
            \ '?':'¿',
            \ '0':'º',
            \ '1':'¡',
            \ '2':'™',
            \ '3':'£',
            \ '4':'¢',
            \ '5':'∞',
            \ '6':'§',
            \ '7':'¶',
            \ '8':'•',
            \ '9':'ª'
        \ }
        for c in keys(a:letters_dict)
            for m in ['nmap', 'xmap', 'smap', 'tmap']
                exec m." ".a:letters_dict[c]." <M-".c.">"
            endfor
        endfor
    endif
endfunc
call Alt_meta_map()
上一篇 下一篇

猜你喜欢

热点阅读