以下映射不起作用:
noremap <A-ö> :do something
我使用xterm(在Ubuntu上)和像<A-j>
这样的映射工作。可以单独映射ö,但同样,<C-ö>
不起作用。
我尝试了什么:
set encoding=utf-8
noremap <M-ö>
Ctrl + v 后跟 Alt + ö会打印ö。
有没有办法解决这个问题?
答案 0 :(得分:2)
这似乎是不可能的,因为使用 Ctrl 可以获得ASCII控制字符,这些字符被定义为具有X-64的代码,其中X是您按下控件的字符( Ctrl- A 是65 - 64 = 1 = ASCII SOH等等。 但是没有“Ö”的ASCII代码可以减去。
对于Alt,有类似的方案,IIRC正在增加一些偏移,如128。由于同样的原因,映射 Alt -Ö将失败。
答案 1 :(得分:1)
我正在使用Vim 7.4(Windows上的GUI版本),这对我有用:
" Alt-ö quits in normal mode
nmap <a-char-246> :q<cr>
" Alt-ö inserts an opening curly brace in insert mode
imap <a-char-246> {
246是ö
的Unicode编号。以下是其他Unicode编号的表格:Link。
我尝试使用 Ctrl 而不是 Alt 执行相同的命令,但没有成功。
编辑: 由于上述解决方案在我当前的Debian系统上不起作用,我决定采用不涉及 Ctrl 或 Alt 的解决方案:
" Map the umlauts to be an opening parenthesis/bracket/curly brace
imap öö (
imap ää {
imap üü [
我从here得到了这个想法。 此映射适用于编码,尤其是与delimitMate插件结合使用时。
它不应该干扰写德语,因为据我所知,没有连续两个变音符号的单词。不过,芬兰人可能会遇到困难。
答案 2 :(得分:1)
这不能回答你的问题(在.vimrc中重新映射ctrl + umlaut),但它可能会实现你想要做的事情。您可以不在vim级别定义键绑定,而是在XKB级别定义。使用Xorg XKB,您可以定义重定向,在此示例中,我们将CTRL-ö重新映射到ESC,以便我们可以方便地在vim中进入正常模式。
在具有德语键盘布局的Xorg下,尝试以下操作:
~/.xkb/keymap/vimremap
(根据您的喜好进行调整,但将+vim(ctrloe)
留在xkb_symbols
行的末尾)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwertz)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+de(nodeadkeys)+inet(evdev)+vim(ctrloe)" };
xkb_geometry { include "pc(pc105)" };
};
~/.xkb/symbols/vim
xkb_symbols "ctrloe" {
replace key <AC10> {
type= "LOCAL_EIGHT_LEVEL",
symbols[Group1]= [ odiaeresis, Odiaeresis, doubleacute, doubleacute],
actions = [ NoAction(), NoAction(), NoAction(), NoAction(), Redirect(key=<ESC>, clearmods=all)]
};
};
这里我们使用LOCAL_EIGHT_LEVEL,因为这种类型将Ctrl映射到Level5。
现在加载此配置(您可以忽略有关某些缺失符号的警告):
xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/vimremap $DISPLAY
启动xev
并检查CTRL-ö是否确实导致ESC。