是否可以在插入模式下映射Alt-hjkl?

时间:2011-03-21 15:28:09

标签: vim vi

在描述我的问题之前,我会列出env。这里的申请:

OS:linux 2.6.37-ARCH  (archlinux i686)
vim: 7.2.436
Terminal emulator: urxvt (with 256colors patch)

kent$ echo $TERM
rxvt-256color

screen: Screen version 4.00.03 (FAU) 23-Oct-06

我在终端运行vim。我想通过按ALT-hjkl将光标移动到INSERT模式,光标移动后,保持INSERT模式,这样我就可以继续输入单词。

我找到的文章:

http://vim.wikia.com/wiki/Mapping_fast_keycodes_in_terminal_Vim

http://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal

我尝试了什么:

在.vimrc中使用ttimeoutlen = 50执行keyCode映射,如下所示:(仅粘贴alt-j映射作为示例):

set timeout ttimeoutlen=50
set <F13>=^[j  "ctrl-v alt-j
imap <F13> <down>

使用此conf,在INSERT模式下移动光标是可以的。如果我按<ESC>和j。 Vim让我回到插入模式。我不知道为什么ttimeoutlen=50不起作用。

也尝试过:

set timeout ttimeoutlen=50
set <M-j>=^[j

使用此设置,当我按下ALT-j时,键入了带有重音符号的“e”。

你能给我一些提示我应该如何在终端中映射ALT-hjkl?

提前致谢

肯特

2 个答案:

答案 0 :(得分:18)

映射您的组合键的功能更容易。 Alt+something通常会产生一个字符,与Ctrl+something不同。

例如,在我的Mac Alt加上hjkl生成˙∆˚¬。所以:

imap ˙ <Left>
imap ∆ <Down>
imap ˚ <Up>
imap ¬ <Right>

会这样做。

答案 1 :(得分:12)

对于箭头键:

首先查看终端发送给vim的密钥代码:

$ sed -n l
^[[1;9D 

在上面的例子中,我运行了sed命令并按 Alt + Left

^[[1;9D是发送到vim的转义序列,因此我们可以将其用于我们的映射。

将此添加到.vimrc

map <Esc>[1;9D :tabn<CR>

现在我们可以使用 Alt + Left

循环浏览vim标签