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

时间:2011-04-26 15:06:15

标签: vim

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

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

该命令实际上工作正常。

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

需要考虑的另一件事:

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

答案 1 :(得分:1)

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

如果您将其放在.vimrc中,则输入C-v C-r键入^R字符。