Vim with Powershell

后端 未结 12 427
梦毁少年i
梦毁少年i 2020-12-07 12:42

I\'m using gvim on Windows.

In my _vimrc I\'ve added:

set shell=powershell.exe
set shellcmdflag=-c
set shellpipe=>
set shellredir=>

function!          


        
相关标签:
12条回答
  • 2020-12-07 12:56

    I ran into a similar problem described by many here.

    Specifically, calling

    :set shell=powershell
    

    manually from within vim would cause powershell to work fine, but as soon as I added:

    set shell=powershell
    

    to my vimrc file I would get the error "Unable to open temp file .... "

    The problem is that by default when shell is modified, vim automatically sets shellxquote to " which means that shell commands will look like the following:

     powershell -c "cmd > tmpfile"
    

    Where as this command needs to look like this, in order for vim to read the temp file:

     powershell -c "cmd" > tmpfile
    

    Setting shellquote to " in my vimrc file and unsetting shellxquote (i.e. setting it to a blank space) seem to fix all my problems:

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

    I've also tried taking this further and scripting vim a bit using the system() call: system() with powershell in vim

    0 讨论(0)
  • 2020-12-07 13:00

    I propose an hackish solution. It doesn't really solve the problem, but it get the job done somehow.

    This Vim plugin automate the creation of a temporary script file, powershell call through cmd.exe and paste of the result. It's not as nice as a proper powershell handling by vim, but it works.

    0 讨论(0)
  • 2020-12-07 13:01

    Try replacing

    "dir \*vim\*"
    

    with

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

    EDIT: Try using cmd.exe as the shell and put "powershell.exe" before "-command"

    0 讨论(0)
  • 2020-12-07 13:01

    None of the answers on this page were working for me until I found this hint from https://github.com/dougireton/mirror_pond/blob/master/vimrc - set shellxquote= [space character] was the missing piece.

    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 
    
    0 讨论(0)
  • 2020-12-07 13:03

    I suspect that the problem is that Powershell uses the native String encoding for .NET, which is UTF-16 plus a byte-order-mark.

    When it's piping objects between commands it's not a problem. It's a total PITA for external programs though.

    You can pipe the output through out-file, which does support changing the encoding, but still formats the output for the terminal that it's in by default (arrgh!), so things like "Get-Process" will truncate with ellipses, etc. You can specify the width of the virtual terminal that Out-File uses though.

    Not sure how useful this information is, but it does illuminate the problem a bit more.

    0 讨论(0)
  • 2020-12-07 13:11

    Interesting question - here is something else to add to the confusion. Without making any changes to my .vimrc file, if I then run the following commands in gvim:

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

    It behaves as expected!

    If I make the same changes to my .vimrc file, though (the shell and shellcmdflag options), running :echo system("dir -name") returns the nonsense characters!

    0 讨论(0)
提交回复
热议问题