빔 위드 파워셸
Windows에서 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()
이 기능(:Test)을 실행하면 난센스 문자(숫자가 아닌 문자 ASCII 문자)가 표시됩니다.
셸로 cmd를 사용하면 (-name 없이) 작동하기 때문에 powershell에서 vim으로 출력하는 것이 문제인 것 같습니다.
흥미롭게도, 이것은 매우 효과적입니다.
:!dir -name
이 경우:
:r !dir -name
업데이트: David이 언급한 동작 확인
_vimrc, :테스트에서 위에 언급한 set 명령을 실행하면 넌센스가 출력됩니다.그러나 _vimrc 대신 vim에서 직접 실행하면 :테스트가 예상대로 작동합니다.
또한 인코딩 문제에 대비하여 iconv를 사용해 보았습니다.
:echo iconv( system("dir -name"), "unicode", &enc )
하지만 이것은 아무런 차이가 없었습니다.하지만 잘못된 인코딩 유형을 사용하고 있을 수 있습니다.
이거 어떻게 만드는지 아는 사람?
약간의 해킹이지만 다음은 Vim 7.2에서 작동합니다.CMD 세션 내에서 Powershell을 실행하고 있습니다.
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 내에서 수동으로 파워셸이 정상적으로 작동하지만, 추가하자마자:
set shell=powershell
vimrc 파일에 "임시 파일을 열 수 없습니다..."라는 오류가 표시됩니다.
문제는 기본적으로 셸이 수정될 때 vim이 자동으로 셸 인용문을 "로 설정한다는 것이며, 이는 셸 명령이 다음과 같이 표시된다는 것을 의미합니다.
powershell -c "cmd > tmpfile"
vim이 임시 파일을 읽으려면 이 명령이 다음과 같이 표시되어야 합니다.
powershell -c "cmd" > tmpfile
내 vimrc 파일에서 셸 인용문을 "로 설정하고 셸 인용문을 해제(즉, 공백으로 설정)하면 모든 문제가 해결되는 것 같습니다.
set shell=powershell
set shellcmdflag=-c
set shellquote=\"
set shellxquote=
나는 또한 이것을 더 진행하고 vim에 파워셸이 있는 system() call: system()을 사용하여 vim을 스크립팅하려고 시도했습니다.
Powershell이 에 네이티브 String 인코딩을 사용하는 것이 문제인 것 같습니다.NET, UTF-16 + 바이트 순서 표시입니다.
명령 간에 개체를 파이프로 연결하는 경우에는 문제가 없습니다.외부 프로그램에 대한 종합적인 PITA입니다.
출력을 아웃파일로 파이프링할 수 있습니다. 이것은 인코딩 변경을 지원하지만 기본적으로 터미널의 출력을 포맷합니다(arrh!). "Get-Process"와 같은 항목은 타원으로 잘립니다.그러나 Out-File이 사용하는 가상 터미널의 너비를 지정할 수 있습니다.
이 정보가 얼마나 유용한지는 잘 모르겠지만, 문제를 좀 더 잘 설명해 줍니다.
교체 시도
"dir \*vim\*"
와 함께
" -command { dir \*vim\* }"
편집: cmd.exe를 셸로 사용하고 "-command" 앞에 "powershell.exe"를 입력합니다.
흥미로운 질문 - 여기 혼란을 가중시킬 다른 것이 있습니다..vimrc 파일을 변경하지 않고 gvim에서 다음 명령을 실행하면 다음과 같습니다.
:set shell=powershell.exe
:set shellcmdflag=-noprofile
:echo system("dir -name")
예상대로 작동합니다!
하지만 내 .vimrc 파일(shell 및 shellcmdflag 옵션)을 동일하게 변경하면 :echo system("dir-name")을 실행하면 넌센스 문자가 반환됩니다!
초기 예제 코드는 vimrc에 pop하면 잘 작동합니다.
그래서 이제 저는 제 vimrc에서 그것을 작동시키는 것이 무엇인지 알아내려고 노력하고 있습니다.가능성:
set encoding=utf8
편집: 네, 그렇게 하는 것 같습니다.어쨌든 VIM을 유니코드로 기본 설정하고 싶으실 겁니다. 요즘은...
https://github.com/dougireton/mirror_pond/blob/master/vimrc 에서 이 힌트를 찾을 때까지 이 페이지의 답 중 어떤 것도 저에게 효과가 없었습니다. - set shellxquote= [space character]가 누락된 부분이었습니다.
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
글을 해서, 의 이스와관스답결변다추여에 다음을 하세요.$profile
를 합니다.diffutils
초콜릿에서:
Remove-Item Alias:diff -force
여러분의 다을추다에 하세요.~/.vimrc
:
if (has('win32') || has('gui_win32')) && executable('pwsh')
set shell=pwsh
set shellcmdflag=\ -ExecutionPolicy\ RemoteSigned\ -NoProfile\ -Nologo\ -NonInteractive\ -Command
endif
확인하세요shellcmdflag
그림과 정확히 일치합니다.
각 기여자에게 이러한 솔루션을 제공한 모든 공로는 집계 게시물에 불과합니다.
저는 해학적인 해결책을 제안합니다.그것이 문제를 해결하지는 못하지만, 어떻게든 일을 해냅니다.
이 Vim 플러그인은 임시 스크립트 파일의 생성을 자동화하고 cmd.exe를 통해 powershell 호출을 수행한 후 결과를 붙여넣습니다.vim에 의한 적절한 파워셸 핸들링만큼 좋지는 않지만, 효과가 있습니다.
에 신대해요세보요▁try▁instead세. set shellcmdflag=\ -c
설명:
Vim은 tempname()을 사용하여 시스템()이 읽는 임시 파일 경로를 생성합니다.
&shell에 'sh'가 포함되어 있고 &shellcmdflag가 '-'로 시작하는 경우 tempname()은 슬래시가 앞으로 표시된 임시 파일 경로를 생성합니다.
따라서, 만약 set shell=powershell set shellcmdflag=-c
그러면 Vim은 찾을 수 없는 슬래시가 있는 임시 파일을 읽으려고 할 것입니다.
해결책은 대신 설정하는 것입니다. set shellcmdflag=\ -c
&하여 첫 가 더 이상 않도록 시스템에서 수 를 생성합니다. &shellcmdflag의 경우 &shellcmdflag의 경우 &shellcmdflag의 경우 '-'의 경우 tempname이 됩니다.
저는 vim_dev 메일링 리스트(https://groups.google.com/forum/ #!topic/vim_dev/vTR05EzyfE0)에서 이것이 더 나은 문서화를 받을 가치가 있다고 언급했습니다.
actf answer는 제게 도움이 되지만, DIF에 내장된 Powershell 때문에(Linux와 다른) VIM에서 다시 작동하지 않으려면 이 줄을 Powershell 프로필에 추가해야 합니다.
Remove-Item Alias:diff -force
GVim v8.2(윈도우즈)를 실행하고 있습니다.
실행 파일에 대한 전체 경로를 사용하면 다음과 같은 이점이 있습니다.
set shell=C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe
나는 VIM을 사용하지 않지만 Powershell의 기본 출력은 Unicode입니다.메모장은 유니코드를 읽을 수 있으며, 원하는 출력을 얻을 수 있는지 확인하는 데 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/94382/vim-with-powershell
'programing' 카테고리의 다른 글
UDP 소켓 세트 시간 초과 (0) | 2023.09.07 |
---|---|
pl/sql 쿼리를 실행할 때 오버플로 오류를 가져오는 중 (0) | 2023.07.29 |
matplotlib에서 색상표의 중간점 정의 (0) | 2023.07.29 |
뒤로 버튼을 클릭하면 크로스 브라우저 온로드 이벤트가 발생합니까? (0) | 2023.07.29 |
자주 사용되는 PDO 행 수 (0) | 2023.07.29 |