gpt4 book ai didi

VIM:条件键映射

转载 作者:行者123 更新时间:2023-12-05 00:49:40 25 4
gpt4 key购买 nike

在 Vim 中,我想在键映射中有一个条件语句。

如果光标在一行的开头,我想要这个映射:

imap <F1> <ESC>:syntax sync fromstart<CR>i

但否则有这个映射(唯一的区别是最后一个字符)
imap <F1> <ESC>:syntax sync fromstart<CR>a

在第二个映射中,如果在光标位于行首时运行此映射,则光标不会放回正确的位置(当我们使用 a 返回插入模式时)

我正在努力寻找解决此特定问题的方法,但我也想知道您是否确实可以在 Vim 键盘映射中放置条件。

谢谢!

最佳答案

您的一般问题的答案是:是的,映射可以包含条件逻辑。您可以通过几种方式做到这一点,最简单的方法是使用 <expr>映射。这是来自 vim wiki 的示例:

inoremap <expr> <Esc>      pumvisible() ? "\<C-e>" : "\<Esc>"

此示例根据 pumvisible() 是否有条件将 Esc 映射到 C-e 或 Esc。函数返回真或假值。在您的情况下,您需要找到(或定义)一个表达式来确定光标在行上的位置。

另一种选择是只编写一个包含所有逻辑的函数,并将键映射到该函数而不是表达式。

在您的特定情况下,这些都不是必需的。只需更换 <Esc>在您的映射中使用 <C-o> ,并删除尾随 ai .
imap <F1> <C-o>:syntax sync fromstart<CR>

在插入模式 C-o 允许您运行一个普通模式命令,然后返回到插入模式。由于您的正常模式命令不会移动光标,您应该返回到您开始的插入模式。

关于VIM:条件键映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com