vim:map命令,确认键
发布时间:2020-12-15 21:16:37 所属栏目:安全 来源:网络整理
导读:我在我的. vimrc中为我正在使用的版本控制系统编写了一些宏(Perforce)(请不要为vim建议perforce插件,我试过它,我不喜欢它).它们都可以正常工作,除了恢复宏,它由于确认提示而中断(我需要这样做,所以我不会意外地指责我的变化).它目前看起来像这样: map F8 :i
我在我的.
vimrc中为我正在使用的版本控制系统编写了一些宏(Perforce)(请不要为vim建议perforce插件,我试过它,我不喜欢它).它们都可以正常工作,除了恢复宏,它由于确认提示而中断(我需要这样做,所以我不会意外地指责我的变化).它目前看起来像这样:
map <F8> :if confirm('Revert to original?',"&Yesn&No",1)==1 | !p4 revert <C-R>=expand("%:p")<CR><CR><CR>:edit<CR> | endif 当vim尝试加载文件时,这会导致bash抱怨: bin/bash: -c: line 0: syntax error near unexpected token `(' 看看缓冲区bash看到的,看起来错误是vim在第一个管道之后发送了所有内容,而不仅仅是用于bash的部分.我尝试了一些替代方案,但我似乎无法使其工作.当我删除管道和endif(使用速记if)时,我已经让它正确显示确认对话框,但是在用户给出响应之后vim会抱怨. 解决方法
使用管道将多个vim命令串在一起并不是特别明确,并且存在许多偏心.重要的是,(见
:help :bar )它不能在像shell命令之类的命令之后使用:看到一个|字符作为其参数.
您可能会发现使用 例如. :echo system("p4 revert " . shellescape(expand("%:p"))) 如果您在文件名中包含空格或引号等字符(或者巧妙地将其命名为rm -rf~(请勿在家中尝试此操作!)), 为了创建更易读/可维护的代码,您可能希望将代码移动到一个函数中: function Revert() if confirm('Revert to original?',1)==1 return system("p4 revert " . shellescape(expand("%:p"))) endif endfunction 您可以在宏中使用:call或:echo命令访问它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |