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

Bash 如何使ALT在gvim中像在vim中一样工作?,bash,vim,shortcut,alt-key,Bash,Vim,Shortcut,Alt Key,我正在尝试适应vim,同样,我现在做得很好,但不幸的是Gvim和vim处理alt键的方式不同 在Vim中,按ALT+任何其他键)与按(ESC+任何其他键)相同。甚至在bash的提示符下使用vi模式(set-ovi) 如果在Gvim中使用相同的快捷方式,则会打印分隔的UTF-8字符 如何禁用 在Vim中,按下(ALT+任何其他键)与按下(ESC+任何其他键)相同。甚至在bash的提示符下使用vi模式(set-ovi) Vim并没有做到这一点,而您的终端做到了——这就是为什么您在该终端的其他程序中看

我正在尝试适应vim,同样,我现在做得很好,但不幸的是Gvim和vim处理alt键的方式不同

在Vim中,按ALT+任何其他键)与按(ESC+任何其他键)相同。甚至在bash的提示符下使用vi模式(set-ovi)

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

如何禁用

在Vim中,按下(ALT+任何其他键)与按下(ESC+任何其他键)相同。甚至在bash的提示符下使用vi模式(set-ovi)

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

根据您的窗口管理器的不同,您可以映射到所需的操作:

# in .vimrc, or without guards in .gvimrc
if has("gui_running")
    map <m-j> (something)
endif
#在.vimrc中,或在.gvimrc中没有防护装置
如果有(“gui_正在运行”)
地图(某物)
恩迪夫
使用映射、nmap、imap。。。取决于您想要的模式

在Vim中,按下(ALT+任何其他键)与按下(ESC+任何其他键)相同。甚至在bash的提示符下使用vi模式(set-ovi)

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

根据您的窗口管理器的不同,您可以映射到所需的操作:

# in .vimrc, or without guards in .gvimrc
if has("gui_running")
    map <m-j> (something)
endif
#在.vimrc中,或在.gvimrc中没有防护装置
如果有(“gui_正在运行”)
地图(某物)
恩迪夫

使用映射、nmap、imap。。。取决于您想要的模式。

正如@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
“vim.gtk/gvim:map alt+[hjkl]至正常终端行为
如果有(“gui_正在运行”)
“inoremap=='忽略任何其他映射'
inoremap h
inoremap j
伊诺雷马克
inoremap l
“取消注释以禁用Alt+[menukey]菜单键(即Alt+h以获取帮助)
set winaltkeys=no“与`:set wak=no相同`
“取消注释以禁用菜单栏
设置guioptions-=m
“取消注释以禁用图标菜单栏
设置guioptions-=T
“切换窗口菜单键的宏
noremap,wm:call-ToggleWindowMenu()
“切换窗口菜单键的功能
函数切换WindowMenu()
如果(&winaltkeys==“是”)
设置winaltkeys=no“关闭菜单键
设置GUI选项-=m“关闭菜单栏
“取消注释以删除图标菜单栏
“设置guioptions-=T
其他的
设置winaltkeys=yes“打开菜单键
设置guioptions+=m“打开菜单栏
“取消添加图标菜单栏的注释
“设置guioptions+=T
恩迪夫
端功能
恩迪夫

正如@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
“vim.gtk/gvim:map alt+[hjkl]至正常终端行为
如果有(“gui_正在运行”)
“inoremap=='忽略任何其他映射'
inoremap h
inoremap j
伊诺雷马克
inoremap l
“取消注释以禁用Alt+[menukey]菜单键(即Alt+h以获取帮助)
set winaltkeys=no“与`:set wak=no相同`
“取消注释以禁用菜单栏
设置guioptions-=m
“取消注释以禁用图标菜单栏
设置guioptions-=T
“切换窗口菜单键的宏
noremap,wm:call-ToggleWindowMenu()
“切换窗口菜单键的功能
函数切换WindowMenu()
如果(&winaltkeys==“是”)
设置winaltkeys=no“关闭菜单键
设置GUI选项-=m“关闭菜单栏
“取消注释以删除图标菜单栏
“设置guioptions-=T
其他的
设置winaltkeys=yes“打开菜单键
设置guioptions+=m“打开菜单栏
“取消添加图标菜单栏的注释
“设置guioptions+=T
恩迪夫
端功能
恩迪夫

如何将ALT映射到类似ESC的行为?我已经试过为它绘制地图,但没有成功。我需要将ALT键映射到非正常模式,即使我处于正常或插入模式。我如何做到这一点?我如何将ALT映射到类似ESC的行为?我已经试过为它绘制地图,但没有成功。我需要将ALT键映射到非正常模式,即使我处于正常或插入模式。我该怎么做?