gpt4 book ai didi

vim:将字符或单词传递给您的函数

转载 作者:行者123 更新时间:2023-12-01 04:14:27 25 4
gpt4 key购买 nike

我知道当你在 vim 中定义一个函数时,你可以使用 range关键字,以便用户可以说:

:-5,+5call MyFunction()

然后你的函数得到 a:firSTLine 和 a:laSTLine。

我想要的是类似的东西,但更像是将命令与运动结合的传统 vi 方式,这样 'd' 删除一个空格,'dw' 删除一个单词,'d2w' 删除两个单词,'d2j' 删除三个行等假设我的函数被映射到一些输入模式字符序列,有没有办法让它接受类似的可变长度输入,然后修改该文本?

为了更清楚一点,假设我想定义一个函数来将 标签包裹在现有文本周围。我们会说这个函数被映射到 ;b。我希望用户能够说 ';bw' 来加粗一个词,或 ';bf'。使用 vim 为内置命令提供的所有灵活性,将所有内容加粗到句子末尾或其他任何内容。

最佳答案

如果我理解您的要求,那么您所做的就是在映射中包含 char 参数。例如:

map d :call MyFunction('d')<cr>
map dw :call MyFunction('dw')<cr>
map d2w :call MyFunction('d2w')<cr>
" Of course these would be terrible mappings because they
" are already mapped to important Vim functions

映射的工作方式是,如果你“过度指定”像上面的 'd' 这样的字符,以便它可以单独使用或作为更长命令的前缀,Vim 将在你按下 'd' 后短暂等待(对于 timeoutlen)看看你是否要按下另一个字符。 (这取决于 timeout 选项设置为 true,这是默认值。)如果你不按下另一个字符,Vim 将执行 'd' 映射。如果你这样做,它会调用更复杂的映射。见 :h map-commands一般和 :h map-typing更多。

注意:在您澄清之后,我认为您想要的是创建一个自定义的“运算符”函数,您可以使用该函数对 Vim 运动定义的缓冲区进行操作。见 :h map-operator有关如何执行此操作的信息。

关于vim:将字符或单词传递给您的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4452282/

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