2011-04-26 68 views
4

我想从我的vimrc文件中使用地图的“地图”的关键是这样的:如何从地图和内调用VIM功能“:拆分”

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

该命令实际工作正常。

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

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

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

回答

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,它将使你,例如,;:交流的意义,而不改变地图,还可以防止您的地图通过插件被宠坏了,除非他们重新定义<Tab>映射(<C-i><Tab>相同)。强制正常模式是因为在其他模式下会产生意想不到的结果。
  2. 转义参数:fnameescape(resolve("~/some/file")),它将防止带空格的文件名错误。
  3. 你可以写<C-r> @Austin Taylor建议写入原始控制代码。我不喜欢在文件中包含任何内容,因为它会使差异在终端中不可见。
1
map <C-I> :split ^R=resolve("~/some/file")<cr><cr> 

如果你把这个在.vimrc,键入C-v C-r键入^R字符。

+0

谢谢!我忘记了^ R是命令模式的“插入”。 – svec 2011-04-26 15:44:09