Vim with Powershell

后端 未结 12 428
梦毁少年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 13:11

    actf answer works for me, but because of Powershell built in DIFF (which is different from the Linux one) you must add this line to your Powershell profile to have diff working again in VIM:

    Remove-Item Alias:diff -force
    
    0 讨论(0)
  • 2020-12-07 13:14

    Try instead set shellcmdflag=\ -c


    Explanation:

    Vim uses tempname() to generate a temp file path that system() reads.

    If &shell contains 'sh' and &shellcmdflag starts with '-' then tempname() generates a temp file path with forward slashes.

    Thus, if set shell=powershell set shellcmdflag=-c then Vim will try to read a temp file with forward slashes that cannot be found.

    A remedy is to set instead set shellcmdflag=\ -c that is, add a whitespace to &shellcmdflag so that the first character is no longer '-' and tempname() produces a temp file path with backward slashes that can be found by system().


    I remarked on the vim_dev mailing list ( https://groups.google.com/forum/#!topic/vim_dev/vTR05EZyfE0 ) that this deserves better documentation.

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

    The initial example code works fine for me when I plop it in vimrc.

    So now I'm trying to figure out what in my vimrc is making it function. Possibly:

    set encoding=utf8
    

    Edit: Yep, that appears to do it. You probably want to have VIM defaulting to unicode anyway, these days...

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

    Combining the answers in this and the related thread, add the following to your $profile assuming you installed diffutils from chocolatey:

    Remove-Item Alias:diff -force
    

    And add the following to your ~/.vimrc:

    if (has('win32') || has('gui_win32')) && executable('pwsh')
        set shell=pwsh
        set shellcmdflag=\ -ExecutionPolicy\ RemoteSigned\ -NoProfile\ -Nologo\ -NonInteractive\ -Command
    endif
    

    make sure shellcmdflag is exactly as shown

    All credit for these solutions to their respective contributors, this is merely an aggregation post.

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

    I don't use VIM but Powershell's default output is Unicode. Notepad can read unicode, you could use it to see if you are getting the output you expect.

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

    It is a bit of a hack, but the following works in Vim 7.2. Notice, I am running Powershell within a CMD session.

    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
    

    Tested with the following...

    • :!dir -name
    • :call Test()
    0 讨论(0)
提交回复
热议问题