Vim:使用转义键按下录制宏无法正常工作

时间:2016-12-23 23:29:10

标签: vim

我已经在o寄存器中记录了一个宏来缩进并删除一行的空格,然后移到下一行的开头。

原始行:

a : 1,

使用的击键:

qii<tab><esc>f<space>x+q

结果正是我想要的:

    a: 1,

以下击键记录在注册人中:i^I^[f x+

在线上运行宏(撤消更改后)会产生以下结果:

æ x+a : 1,

还有一些测试揭示了以下内容:

"i   i^I^[+
"o   i^I^[f x+
"p   i^I^[llx+

注册i按预期工作。

注册p失败类似o,结果如下:

ìlx+a : 1,

在执行宏时,似乎记录为^[的转义键不会退出插入模式。

我在osx sierra并使用vim与终端应用程序。

这里有什么想法以及如何解决它?

1 个答案:

答案 0 :(得分:2)

<强>原因:

我的.vimrc中的以下内容导致了问题

" fix meta-keys which generate <Esc>a .. <Esc>z
let c='a'
while c <= 'z'
  set <M-".c.">=\e".c
  imap \e".c." <M-".c.">"
  set <M-".toupper(c).">=\e".toupper(c)
  imap \e".toupper(c)." <M-".toupper(c).">"
  let c = nr2char(1+char2nr(c))
endw

以上允许我使用OSX中的<option/alt>键作为vim <Meta>键。 Vim正在解释<Esc>按键,然后按宏中的一个字母作为元按键。

<强>解决方案:

我通过在插入模式下将<Esc>重新映射到<C-c>来解决此问题,因此当退出插入模式而不是^C^C时,它现在会在宏中生成^[

inoremap <Esc> <C-c>

主要的缺点是它在插入模式下中断了箭头键,但由于我使用hjkl我很好。

以下是一些试图解决此问题的其他资源:

https://github.com/vim-utils/vim-alt-mappings https://github.com/sunaku/.vim/blob/config/plugin/escape.vim