根据skywind3000大大的文章Vim 中正确使用 Alt映射,我的vim配置也将alt键作了映射,避免了很多弹钢琴
似的操作。
我现在的用软件的风格,是吃饭的家伙尽量用免费的软件。 vim/neovim、R/Rstudio、eclipse/vscode全是开源免费的, 终端linux下用gnome-termal和terminator,mac下是iterm2。
windows用mobaxterm,相比较商业软件 xshell和 securecrt,最大的问题是不能映射Alt
到meta
键,导致ssh到我的服务器上后不能用alt键,有些我精心设置的快捷功能不能实现。在它的软件设置菜单里,根本找不到设置项,网上查找提到要用autohotkey
,装上去之后发现太麻烦。 后来还是根据前面skywind3000的文章里面一句话解决:
任意平台下面的 xterm 可以配置 ~/.Xdefaults 来设置这个行为。
放狗搜索下,在这个文件里加下面这个设置: XTerm*metaSendsEscape: true
,解决问题。
一个小问题是这样就不能用alt+1,2,3.....
切换tab,不知道有没有知道办法?
xshell里可以只映射左或右alt键作为esc,另一个alt保留原功能来解决。
补充个vim函数,正确映射alt键
function! Alt_meta_map()
set ttimeout
if $TMUX != ''
set ttimeoutlen=20
elseif &ttimeoutlen > 60 || &ttimeoutlen <= 0
set ttimeoutlen=60
endif
map ÏP <F1>
map ÏQ <F2>
map ÏR <F3>
map ÏS <F4>
inoremap ÏP <Nop>
inoremap ÏQ <Nop>
inoremap ÏR <Nop>
inoremap ÏS <Nop>
inoremap <F5> <Nop>
inoremap <F6> <Nop>
inoremap <F7> <Nop>
inoremap <F8> <Nop>
inoremap <F9> <Nop>
inoremap <F10> <Nop>
inoremap <F11> <Nop>
inoremap <F12> <Nop>
function! s:metacode(key)
if !(has('nvim') || has('gui_running') && !OSX())
exec "set <M-".a:key.">=\e".a:key
endif
if has('gui_macvim')
exec "map <D-".a:key."> <M-".a:key.">"
exec "imap <D-".a:key."> <Nop>"
endif
exec "imap <M-".a:key."> <Nop>"
endfunction
for i in range(26)
call s:metacode(nr2char(char2nr('a') + i))
call s:metacode(nr2char(char2nr('A') + i))
endfor
let s:list = [',', '.', ';', ':', '/', '?', '{', '}', '-', '_']
for c in s:list
call s:metacode(c)
endfor
if has('gui_macvim')
nnoremap <D-1> :tabn1<CR>
nnoremap <D-2> :tabn2<CR>
nnoremap <D-3> :tabn3<CR>
nnoremap <D-4> :tabn4<CR>
nnoremap <D-5> :tabn5<CR>
nnoremap <D-6> :tabn6<CR>
nnoremap <D-7> :tabn7<CR>
nnoremap <D-8> :tabn8<CR>
nnoremap <D-9> :tabn9<CR>
nnoremap <D-0> :tablast<CR>
inoremap <D-z> <ESC>
else
for i in range(10)
call s:metacode(nr2char(char2nr('0') + i))
endfor
nnoremap <M-1> :tabn1<CR>
nnoremap <M-2> :tabn2<CR>
nnoremap <M-3> :tabn3<CR>
nnoremap <M-4> :tabn4<CR>
nnoremap <M-5> :tabn5<CR>
nnoremap <M-6> :tabn6<CR>
nnoremap <M-7> :tabn7<CR>
nnoremap <M-8> :tabn8<CR>
nnoremap <M-9> :tabn9<CR>
nnoremap <M-0> :tablast<CR>
nnoremap <M-c> "*y
xnoremap <M-c> "*y
nnoremap <M-x> "*x
xnoremap <M-x> "*x
nnoremap <M-v> "*gP
xnoremap <M-v> "*gP
inoremap <M-v> <C-r>*
cnoremap <M-v> <C-r>*
inoremap <M-z> <ESC>
inoremap <M-w> <ESC>
inoremap <M-q> <ESC>
cnoremap <M-z> <ESC>
cnoremap <M-w> <ESC>
cnoremap <M-q> <ESC>
endif
endfunction
call Alt_meta_map()