加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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命令之类的命令之后使用:看到一个|字符作为其参数.

您可能会发现使用system()功能更容易.

例如.

:echo system("p4 revert " . shellescape(expand("%:p")))

如果您在文件名中包含空格或引号等字符(或者巧妙地将其命名为rm -rf~(请勿在家中尝试此操作!)),shellescape()包装器非常有用.

为了创建更易读/可维护的代码,您可能希望将代码移动到一个函数中:

function Revert()
    if confirm('Revert to original?',1)==1
        return system("p4 revert " . shellescape(expand("%:p")))
    endif
endfunction

您可以在宏中使用:call或:echo命令访问它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读