Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从map和";中调用vim函数:“拆分”;_Vim - Fatal编程技术网

如何从map和";中调用vim函数:“拆分”;

如何从map和";中调用vim函数:“拆分”;,vim,Vim,我希望使用vimrc文件中的“映射”映射密钥,如下所示: map <C-I> :split ~/some/file map:split~/some/file 这个命令实际上运行良好 我的问题是:如何从map/split行中调用该文件路径上的vim函数(在本例中为“resolve()”)。这是行不通的,但希望你能明白这一点: map <C-I> :split =resolve("~/some/file") map:split=resolve(“~/some/file”

我希望使用vimrc文件中的“映射”映射密钥,如下所示:

map <C-I> :split ~/some/file
map:split~/some/file
这个命令实际上运行良好

我的问题是:如何从map/split行中调用该文件路径上的vim函数(在本例中为“resolve()”)。这是行不通的,但希望你能明白这一点:

map <C-I> :split =resolve("~/some/file")
map:split=resolve(“~/some/file”)
也许它使用call()?很明显,我对vim脚本的总体概念感到困惑。谢谢你的帮助

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

如果您将其放入
.vimrc
,您可以键入
C-v C-r
来键入
^r
字符。

还有两种方法可以在映射之外工作,并且比使用
更安全(POSIX允许使用任何字节的文件名,但
\x00
,包括控制代码):

nnoremap:execute“split”fnameescape(resolve(“~/some/file”))
nnoremap:split`=resolve(“~/some/file”)`
在第二种情况下,不需要转义,但文件名不能包含换行符(这不会造成伤害,只会产生错误)

需要考虑的另一件事:

  • 使用
    nnoremap
    ,例如,它将使您能够交换
    的含义
    无需更改地图,也可防止地图被插件破坏,除非插件重新定义
    地图(
    相同)。这里使用强制正常模式是因为在其他模式下,它会产生意外的结果
  • 转义参数:
    fnameescape(resolve(“~/some/file”)
    ,它将防止带有空格的文件名出错
  • 您可以在@Austin Taylor建议编写原始控制代码的地方编写
    。我不喜欢把它们放在文件中,因为这样会使diff在终端中不可见

  • 谢谢我忘记了^R是命令模式的“插入”。
    nnoremap <C-i> :execute "split" fnameescape(resolve("~/some/file"))<CR>
    nnoremap <C-i> :split `=resolve("~/some/file")`<CR>