문제

내가 사용하여 gvim 응용 프로그램을 시작합니다.

내 _vimrc 추가했:

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

function! Test()
  echo system("dir -name")
endfunction

command! -nargs=0 Test :call Test()

면 이 기능을 실행하(테스트)나는 말은 문자(숫자/문자를 ASCII 문자).

내가 사용하는 경우 cmd 쉘로,그것은 작동하는(이름)이므로 문제가 될 것으로 보인 가 점점 출력에서 powershell 로 vim.

흥미롭게도,이동:

:!dir -name

이:

:r !dir -name

업데이트: 을 확인하는 행동에 의해 언급된 David

을 실행하는 경우에는 설정 명령 위에서 언급에서 _vimrc,테스트 출력 넌센스입니다.그러나,이를 실행하는 경우에 직접 vim 대신에 _vimrc,테스트가 예상대로 작동합니다.

또한,해봤을 사용하여 iconv 경우에 그것은 인코딩은 문제가:

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

그러나 이지 않았다.가 될 수 있을 사용하여 잘못된 인코딩 형식을 하지만입니다.

누구나 알고 어떻게 작동하나요?

도움이 되었습니까?

해결책

그것의 비트입니다,그러나 다음에서 작동 Vim7.2.지,실행하고 Powershell 내 CMD 세션이 있습니다.

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()

다른 팁

내가 달렸으로 비슷한 문제를 설명하여 많은 여기에.

특히,전화

:set shell=powershell

내에서 수동으로 vim 인 powershell 작업으로 추가되:

set shell=powershell

내 vimrc 파일을 것을 얻을 수 없다"는 오류가 임시 파일을 열...."

문제는 경우 기본적으로 포탄은 수정,vim 자동으로 설정 shellxquote 하는"것을 의미하는 쉘 명령을 다음과 같이 보입니다:

 powershell -c "cmd > tmpfile"

는 곳으로 이 명령을 요구하는 다음과 같이기 위해서 정력을 읽어 임시 파일:

 powershell -c "cmd" > tmpfile

설정 shellquote 를"내 vimrc 파일을 해제 shellxquote(i.e그것을 설정하는 공간)보일 수정 나의 모든 문제는:

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

나가도 복용이 더욱과 스크립트 vim 비트를 사용하는 시스템()호출이:시스템()powershell 에 vim

내가 의심되는 문제는 Powershell 사용은 기본 문자열에 대한 인코딩.그물,UTF-16 플러스 바이트 순서 표시가 있습니다.

할 때 그것은 배관을 개체 명령 사이에 그것이 문제가되지 않습니다.그것은 총 PITA 외부 프로그램이지만.

할 수 있는 출력 파이프를 통해 파일을 지원하는 인코딩을 변경하지만,여전히 형식으로 출력을 위한 터미널에 있다는 기본적으로(arrgh!), 그래서 같은 것들을"Get-프로세스는"자를 가진 타원,등등.할 수 있습의 폭을 지정한 가상 터미널 밖으로 파일을 사용 하지만입니다.

지 어떻게 유용한 정보가 있지만,그것을 분명히 문제가 조금 더 있습니다.

를 교체하십시오

"dir \*vim\*"

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

편집: 을 사용하여 시험 cmd.exe 쉘로 넣어"powershell.exe 기 전에""-명령"

흥미로운 질문에-여기에는 다른 무언가를 혼란을 추가할 수있습니다.를 변경하지 않고 나.vimrc 는 경우,파일 내가 다음에서 다음 명령을 실행하 gvim:

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

그것은 예상대로 동작!

경우도 동일하게 변경.vimrc 파일만(쉘과 shellcmdflag 옵션),실행:에코 시스템("dir-이름이")를 반환합니다 말도 캐릭터들!

처음 예제 코드의 잘 작동할 때 나는 풍덩에 vimrc.

그래서 이제 나가려고 그림에서 내 vimrc 은 그것을 만드는 기능입니다.가능:

set encoding=utf8

편집:네,그것이 나타납니다.당신은 아마이 있고 싶 VIM 기본값으로 사용하는 유니코드 어쨌든,이러한 일을...

없음의 답변이 페이지에서 작업하던 날까지는 내가 발견이에서 힌트를 https://github.com/dougireton/mirror_pond/blob/master/vimrc -설정 shellxquote=[공백 문자]누락 된 부분이었다.

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 

나는 제안 hackish 솔루션입니다.그것은 정말 하지 않 문제를 해결할 수 있지만,그것은 작업을 수행합니다.

Vim 플러그인 자동화 창조의 임시 스크립트 파일,powershell 통화를 통해 cmd.exe 와 붙여넣기의 결과입니다.그것으로 좋은 적절한 powershell 에 의하여 취급하는 vim,하지만 그것을 작동합니다.

당신 set shellcmdflag=\ -c


설명:

Vim 사용 tempname()를 생성하는 임시 파일의 경로를 시스템()읽습니다.

경&쉘을 포함'sh'와&shellcmdflag 시작으로'-' 다음 tempname()를 생성한 임시 파일 경로와 앞으로 잘 지내셨나요?

따라서,는 경우 set shell=powershell set shellcmdflag=-c 다음 Vim 를 읽으려고합니다 임시 파일과 함께 앞으로는 슬래쉬가 을 찾을 수 없습니다.

치료제를 설정하는 것입신 set shellcmdflag=\ -c 는,추가 공백을 shellcmdflag 그래서 첫 번째 문자 는 더 이상'-'와 tempname()생산하는 임시 파일 경로와 뒤로 슬래시 찾을 수 있는 시스템().


내가 주목에 vim_dev 메일링 리스트( https://groups.google.com/forum/#!항목/vim_dev/vTR05EZyfE0 는)이것은 더 나은 가치 설명서입니다.

actf 대답 나를 위해 일하지만,때문에 Powershell 에서 내 차(에서 다른 Linux 하나)를 추가해야 합니다 이 행을 Powershell 프로필을 비교 작업에 다시 VIM:

Remove-Item Alias:diff -force

나는 사용하지 않는 VIM 지만 Powershell 의 기본 출력이 있습니다.메모장을 읽을 수 있는 유니코드를 사용할 수 있습니다 그것은 당신이 얻고있는 출력할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top