使用xterm在.vimrc中映射Alt + umlaut不起作用

时间:2013-05-25 09:39:19

标签: vim xterm

以下映射不起作用:

noremap <A-ö> :do something

我使用xterm(在Ubuntu上)和像<A-j>这样的映射工作。可以单独映射ö,但同样,<C-ö>不起作用。

我尝试了什么:

  • 在.vimrc
  • 的开头添加set encoding=utf-8
  • noremap <M-ö>
在插入模式下,

Ctrl + v 后跟 Alt + ö会打印ö。

有没有办法解决这个问题?

3 个答案:

答案 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。