gpt4 book ai didi

vim - 如何从 map 和 ":split"中调用vim函数

转载 作者:行者123 更新时间:2023-12-02 17:46:42 25 4
gpt4 key购买 nike

我想使用 vimrc 文件中的“map”来映射一个键,如下所示:

map <C-I> :split ~/some/file

该命令实际上运行良好。

我的问题是:如何从映射/分割行内调用该文件路径上的 vim 函数(在本例中为“resolve()”)。这不起作用,但希望您明白这一点:

map <C-I> :split =resolve("~/some/file")

也许它使用了call()?我显然对一般的 vim 脚本感到困惑。感谢您的帮助!

最佳答案

还有两种其他方法可以实现此目的,它们可以在映射之外工作,并且比使用 <C-r> 更安全。 (POSIX 允许使用除 \x00 之外的任何字节的文件名,包括控制代码):

nnoremap <C-i> :execute "split" fnameescape(resolve("~/some/file"))<CR>
nnoremap <C-i> :split `=resolve("~/some/file")`<CR>

在第二种情况下,不需要转义,但文件名不能包含换行符(这不会造成伤害,只会产生错误)。

需要考虑的其他事项:

  1. 使用nnoremap ,它将使您能够交换 ; 的含义。和:无需更改 map ,还可以防止您的 map 被插件破坏,除非它们重新定义 <Tab>映射( <C-i><Tab> 相同)。这里强制使用正常模式是因为在其他模式下它会产生意想不到的结果。
  2. 转义参数:fnameescape(resolve("~/some/file")) ,它将防止带空格的文件名错误。
  3. 您可以写<C-r>其中 @Austin Taylor 建议编写原始控制代码。我不喜欢将它们中的任何一个放在文件中,因为这会使差异在终端中不可见。

关于vim - 如何从 map 和 ":split"中调用vim函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792359/

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