完整路径扩展修饰符%:p未在Vim命令行中进行评估

时间:2014-09-02 12:25:16

标签: vim

在gvim中,您可以轻松创建自定义菜单。我的gvimrc中的那些额外的行添加了一个小的python'实用程序'菜单。

menu Python.Run <ESC>:Shell python %<cr>
menu Python.Run\.\.\. <ESC>:Shell python %:p
menu Python.Pyflakes <ESC>:Shell pyflakes %<cr>
menu Python.Pychecker <ESC>:Shell pychecker %<cr>
menu Python.Pep-8 <ESC>:call Flake8() %<cr>
menu Python.FixTabs <ESC>:ret<cr> 

通过这一行,我可以在命令行:shell python my/file/full/path/myfile.py中显示此内容,以便在点击“返回”之前对路径进行一些修改

但我无法以任何方式获得评估的完整路径;这不起作用:

menu Python.Run\.\.\. <ESC>:Shell python %:p  

我试图调用一个单独的函数来扩展路径并回显正确的命令但是它实际上回应了Vim命令行中正确的东西,既不能执行文本也不能将焦点转移到命令行。

我也尝试过在vim提示中找到的这种语法,(我不懂BTW),但没有更多的成功:

menu Python.Run\.\.\. <ESC>:Shell python <C-R>1<C-G>  

是否有人遇到类似的问题?

1 个答案:

答案 0 :(得分:3)

您的自定义菜单会调用:Shell命令,该命令可能会稍后调用:!。这里重要的是,特殊占位符%:p最终只能通过:!命令进行评估。因此,当您想要定义一个未完成的菜单条目(用于进一步编辑)时,这不起作用,您需要显式扩展占位符。

您找到的语法朝着正确的方向发展。在命令行模式(您的映射通过:进入)中,Ctrl-R映射插入一个寄存器; CP。 :help c_CTRL-R。使用特殊的=表达式寄存器,您可以评估Vimscript表达式,并且确实有expand()函数来处理这些占位符。埃尔戈:

menu Python.Run\.\.\. <ESC>:Shell python <C-R>=expand('%:p')<CR>

尾随<CR>只会结束表达式条目,但不会结束命令行本身,所以它会保持活动状态以便进一步编辑!