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

Ken*_*ent 11 vi vim

在描述我的问题之前,我会列出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
Run Code Online (Sandbox Code Playgroud)

我在终端运行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>
Run Code Online (Sandbox Code Playgroud)

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

还尝试过:

set timeout ttimeoutlen=50
set <M-j>=^[j
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢

肯特

sid*_*yll 19

映射您的组合键的功能更容易.Alt+something通常导致一个角色,不同于Ctrl+something.

例如,在我的Mac Althjkl生成???¬.所以:

imap ? <Left>
imap ? <Down>
imap ? <Up>
imap ¬ <Right>
Run Code Online (Sandbox Code Playgroud)

会做的.

  • 对于遇到这种情况的任何其他人来说,与Mac一起使用,你总体上更好,只需要像alt那样进行alt工作.对于terminal.app:settings - > keyboard - >"use option as meta".对于iterm:设置 - >配置文件 - >您的配置文件 - >键 - >设置选项为"+ Esc" (3认同)
  • 如果我用我的urxvt终端在INSERT模式下键入ctrl-v alt-h,j,k,l.我得到^ [j ^ [h ^ [k ^ [l (2认同)

lfe*_*445 13

对于箭头键:

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

$ sed -n l
^[[1;9D 
Run Code Online (Sandbox Code Playgroud)

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

^[[1;9D被发送到VIM逃脱的序列,因此我们可以通过用户对于我们的映射.

将其添加到.vimrc中

map <Esc>[1;9D :tabn<CR>
Run Code Online (Sandbox Code Playgroud)

现在我们可以通过使用循环浏览vim选项卡 Alt + Left