如何使ALT在gvim中工作,就像在vim中一样?

时间:2014-10-14 16:49:02

标签: bash vim shortcuts alt

我试图适应vim,再次,我现在表现不错,但遗憾的是Gvim和Vim并没有像alt键那样处理。

在Vim中,按 ALT +任何其他键)按( ESC +任何其他键)相同。即使在bash的提示下使用vi模式(设置-o vi)。

如果我在Gvim中使用相同的快捷方式,则会打印异形UTF-8字符。

如何禁用此Gvim行为?

BR

2 个答案:

答案 0 :(得分:3)

  

在Vim中,按(ALT +任意其他键)与按(ESC +任何其他键)相同。即使在bash的提示下使用vi模式(设置-o vi)。

Vim不会这样做,你的终端会这样做 - 这就是为什么你在该终端的其他程序中看到相同的行为,比如bash。您需要向gvim添加与您期望的终端行为相匹配的行为,而不是从gvim中删除行为。

根据您的窗口管理器,您可以映射以执行您想要的操作:

# in .vimrc, or without guards in .gvimrc
if has("gui_running")
    map <m-j> (something)
endif

使用map,nmap,imap,...取决于您想要的模式。

答案 1 :(得分:1)

正如@ fred-nurk所提到的,基于终端的vim和gvim之间的键映射的区别是基于GUI环境(窗口管理器)和终端仿真器的键映射和功能。

我还假设您的问题是指“插入模式”问题,所以我会相应地回答。

映射gvim键以使其更接近vim的一种方法是重新映射每个违规键并禁用菜单键。老实说,这几乎是你在.vimrc中所需要的所有内容(靠近底部[?]):

[编辑添加菜单栏切换]:

" vim.gtk/gvim: map alt+[hjkl] to normal terminal behaivior
if has("gui_running")
    " inoremap == 'ignore any other mappings'
    inoremap <M-h> <ESC>h
    inoremap <M-j> <ESC>j
    inoremap <M-k> <ESC>k
    inoremap <M-l> <ESC>l

    " uncomment to disable Alt+[menukey] menu keys (i.e. Alt+h for help)
    set winaltkeys=no " same as `:set wak=no`

    " uncomment to disable menubar
    set guioptions -=m

    " uncomment to disable icon menubar
    set guioptions -=T

    " macro to toggle window menu keys
    noremap ,wm :call ToggleWindowMenu()<CR>

    " function to toggle window menu keys
    function ToggleWindowMenu()
        if (&winaltkeys == 'yes')
            set winaltkeys=no   "turn off menu keys
            set guioptions -=m  "turn off menubar

            " uncomment to remove icon menubar
            "set guioptions -=T
        else
            set winaltkeys=yes  "turn on menu keys
            set guioptions +=m  "turn on menubar

            " uncomment to add icon menubar
            "set guioptions +=T
        endif
    endfunction
endif