V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xinali
V2EX  ›  Vim

vim 中执行程序的快捷键定义

  •  
  •   xinali · 2016-12-08 21:42:06 +08:00 · 2210 次点击
    这是一个创建于 2914 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如在 vim 中执行 python 代码可以这么定义快捷键

    map <silent> <F5> :call Compile()<CR>
    function! Compile()
        exec "w"
    	if &filetype == "python"
    		exec "!python %"
       endif
    endfunc
    

    但是如果想在 windows 下执行 powershell 呢? 我尝试过这样

    if &filetype == "ps1"
    	exec "!powershell %"
    endif
    

    也尝试过这样

    if &filetype == "ps1"
    	exec "!%"
    endif
    

    但是都失败了,具体该怎么写规则呢?

    5 条回复    2016-12-14 18:20:22 +08:00
    jswh
        1
    jswh  
       2016-12-08 22:10:07 +08:00
    我猜,你要写上 poweshell 可执行程序的完整路径
    josephpei
        2
    josephpei  
       2016-12-09 09:39:17 +08:00
    vim quickrun 之类的
    skywind3000
        3
    skywind3000  
       2016-12-10 00:18:02 +08:00
    因为你取的 &filetype 是需要 vim 识别得了的 filetype ,不是文件扩展名,你把它当文件扩展名来判断,显然是不正确的,你可以 ":echo &filetype" 看看你的文件是什么类型的。 ps1 的文件 &filetype 的值是 "",空,因为 vim 不识别。

    取文件扩展名要用 expand("%:e") 来取,而且你上面直接使用 %也是不对的,文件名里面包含空格就挂掉了。再者你用 GVim 的话,这种直接 !的运行方式很不友好, Vim 会卡住,提示你按任意键继续。不知道网上流传的这段代码是谁写的,导出转载却又错误百出。

    如何在 Vim/GVim (windows) 里面优雅的运行程序呢?见我博客。
    http://www.skywind.me/blog/archives/1708
    chenggiant
        4
    chenggiant  
       2016-12-12 23:13:32 +08:00
    还是直接用 quickrun 吧
    KentY
        5
    KentY  
       2016-12-14 18:20:22 +08:00
    powershell 0 经验, 没法帮上忙, 但是关于你的 python 运行, 你利用 autocmd 只对 python 文件建立 mapping, 并且 ,`%` 应该做处理. 你可以参考我在这个问题的回答以及下方评论.

    http://stackoverflow.com/questions/18948491/running-python-code-in-vim/18948530#18948530
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2592 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:06 · PVG 11:06 · LAX 19:06 · JFK 22:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.