代码之家  ›  专栏  ›  技术社区  ›  Kevin Berridge

带PowerShell的VIM

  •  54
  • Kevin Berridge  · 技术社区  · 16 年前

    我在窗户上使用gvim。

    在我的文章中,我增加了:

    set shell=powershell.exe
    set shellcmdflag=-c
    set shellpipe=>
    set shellredir=>
    
    function! Test()
      echo system("dir -name")
    endfunction
    
    command! -nargs=0 Test :call Test()
    

    如果我执行这个函数(:test),我会看到无意义字符(非数字/字母ASCII字符)。

    如果我使用cmd作为shell,它会起作用(没有-name),因此问题似乎在于如何将PowerShell的输出转换为vim。

    有趣的是,这很有效:

    :!dir -name
    

    像这样:

    :r !dir -name
    

    更新: 确认所提及的行为 David

    如果执行Vimrc中提到的set命令,:test输出无意义。但是,如果您直接在vim而不是在vimrc中执行它们,:测试按预期工作。

    此外,我还尝试使用iconv,以防出现编码问题:

    :echo iconv( system("dir -name"), "unicode", &enc )
    

    但这没什么区别。不过,我可能使用了错误的编码类型。

    有人知道怎么做吗?

    11 回复  |  直到 16 年前
        1
  •  24
  •   Keith Pinson sumit vedi    11 年前

    if has("win32")
        set shell=cmd.exe
        set shellcmdflag=/c\ powershell.exe\ -NoLogo\ -NoProfile\ -NonInteractive\ -ExecutionPolicy\ RemoteSigned
        set shellpipe=|
        set shellredir=>
    endif
    
    function! Test()
      echo system("dir -name")
    endfunction
    

    • :!dir -name
    • :call Test()
        2
  •  15
  •   Community Reversed Engineer    7 年前

    :set shell=powershell
    

    set shell=powershell
    

     powershell -c "cmd > tmpfile"
    

     powershell -c "cmd" > tmpfile
    

    set shell=powershell
    set shellcmdflag=-c
    set shellquote=\"
    set shellxquote=
    

    system() with powershell in vim

        3
  •  5
  •   Adrian    15 年前

        4
  •  3
  •   Mark Schill    16 年前

    "dir \*vim\*"
    

     " -command { dir \*vim\* }"
    

        5
  •  2
  •   David Mohundro alexsmn    16 年前

    :set shell=powershell.exe
    :set shellcmdflag=-noprofile
    :echo system("dir -name")
    

        6
  •  2
  •   Dan Fitch    14 年前

    set encoding=utf8
    

        7
  •  2
  •   Mark Stanfill    9 年前

    https://github.com/dougireton/mirror_pond/blob/master/vimrc

    if has("win32") || has("gui_win32") 
         if executable("PowerShell") 
            " Set PowerShell as the shell for running external ! commands 
            " http://stackoverflow.com/questions/7605917/system-with-powershell-in-vim      
            set shell=PowerShell 
            set shellcmdflag=-ExecutionPolicy\ RemoteSigned\ -Command 
            set shellquote=\" 
            " shellxquote must be a literal space character. 
            set shellxquote=  
       endif 
    endif 
    
        8
  •  0
  •   Raoul Supercopter    15 年前
        9
  •  0
  •   Enno    10 年前

    set shellcmdflag=\ -c


    set shell=powershell set shellcmdflag=-c


    https://groups.google.com/forum/#!topic/vim_dev/vTR05EZyfE0

        10
  •  0
  •   Community Reversed Engineer    7 年前

    actf

    Remove-Item Alias:diff -force
    
        11
  •  -2
  •   Dan King    16 年前