如何从地图中调用vim函数和":split"

sve*_*vec 4 vim

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

map <C-I> :split ~/some/file
Run Code Online (Sandbox Code Playgroud)

该命令实际上工作正常.

我的问题是:如何从地图/分割线内的文件路径上调用vim函数(在本例中为"resolve()").这不起作用,但希望你明白这一点:

map <C-I> :split =resolve("~/some/file")
Run Code Online (Sandbox Code Playgroud)

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

ZyX*_*ZyX 6

还有另外两种方法可以在映射之外工作,然后使用更安全<C-r>(POSIX允许文件名包含任何字节,但\x00包括控制代码):

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

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

另外需要考虑的事情:

  1. 使用nnoremap,它将使您能够,例如,交换;:不更改地图的含义,并防止您的地图被插件破坏,除非他们重新定义<Tab>映射(与之<C-i>相同<Tab>).此处强制正常模式是因为在其他模式下它会产生意外结果.
  2. 转义参数:fnameescape(resolve("~/some/file"))它将防止带空格的文件名出错.
  3. 你可以写<C-r>@Austin Taylor建议编写原始控制代码的地方.我不喜欢在文件中包含任何文件,因为它会使终端中的差异无法查看.