这可能吗?
或者,是否可以在不改变电流的情况下写入宏.行动?我想我可以尝试在命令模式下执行所有操作,但我不确定这是否可行.
背景:我正在编写一个文件浏览器函数(如TextMate中的command-T,参见http://github.com/mdemare/fuzzy_file_finder),我想尽可能少地对用户的环境进行更改,因此必须在函数中进行更改.目前,当您使用此功能切换文件时,您的.行动被覆盖,这是非常不受欢迎的.
例
看到它的最好方法是举个例子.假设您想在每次按F2键时将文本yyy添加到当前行的末尾,但是您不希望这会干扰重做命令[.].
这是怎么做的:
>打开一个新的vim窗口并执行以下命令:
:fu JL() normal Ayyy endfu :map <F2> :call JL()<Enter>
>现在通过输入Axxx< Esc>来添加一些文字,比方说xxx.
>现在按[F2]键,你会看到xxxyyy
>最后,按[.]键,您应该看到xxxyyyxxx
正是你想要的!
为什么会这样
这是因为VIM执行重做命令的方式的性质.在您键入命令时,VIM会跟踪命令的字符.当您按[.]键时,它会将这些字符填充回键盘缓冲区以重新执行它们.不幸的是,一个简单的q宏以同样的方式工作 – 它将字符填充到缓冲区中,并通过这样做覆盖重做缓冲区. :normal命令也可以这样做,但是当放在用户定义的函数中时,我们可以解决这个限制,因为执行用户定义函数的代码在用户定义函数期间保存并恢复重做缓冲区.
原文地址:https://www.jb51.cc/vim/384526.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。