문제
내가 사용하여 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 의 기본 출력이 있습니다.메모장을 읽을 수 있는 유니코드를 사용할 수 있습니다 그것은 당신이 얻고있는 출력할 수 있습니다.