我想在我的vimrc文件中使用“map”映射一个键,如下所示:
map <C-I> :split ~/some/file
该命令实际上工作正常。
我的问题是:如何在地图/分割线内的文件路径上调用vim函数(在本例中为“resolve()”)。这不起作用,但希望你明白这一点:
map <C-I> :split =resolve("~/some/file")
也许它使用call()?我显然对vim脚本一般感到困惑。谢谢你的帮助!
答案 0 :(得分:6)
执行此操作还有两种方法可以在映射之外工作,然后使用<C-r>
更安全(POSIX允许文件名包含任何字节\x00
,包括控制代码):
nnoremap <C-i> :execute "split" fnameescape(resolve("~/some/file"))<CR>
nnoremap <C-i> :split `=resolve("~/some/file")`<CR>
在第二种情况下,不需要转义,但文件名不能包含换行符(它不会受到伤害,只会产生错误)。
需要考虑的另一件事:
nnoremap
,例如,您可以在不更改地图的情况下交换;
和:
的含义,还可以防止您的地图被插件破坏,除非他们重新定义{ {1}}映射(<Tab>
与<C-i>
相同)。此处强制正常模式是因为在其他模式下会产生意外结果。<Tab>
,它可以防止带空格的文件名出错。fnameescape(resolve("~/some/file"))
@Austin Taylor建议编写原始控制代码。我不喜欢在文件中包含任何文件,因为它会使终端中的差异无法查看。答案 1 :(得分:1)
map <C-I> :split ^R=resolve("~/some/file")<cr><cr>
如果您将其放在.vimrc
中,则输入C-v C-r
键入^R
字符。