我已经在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与终端应用程序。
这里有什么想法以及如何解决它?
答案 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