[unix] vi 내부의 배쉬 명령
vi 안에 bash 명령을 입력하고 stdout을 얻을 수 있습니까?
쉘에서 무언가를 찾고 싶기 때문에 vi를 닫았다가 다시 여는 것이 종종 지루합니다.
답변
예, 예를 들어하려는 경우 다음을 ls
시도하십시오.
:!ls
쉘을 스폰하려면
:shell
답변
ctrl+z
vi를 잠들고 쉘에서 필요한 것을 실행 한 다음 fg
vi를 다시 시작 하는 데 사용하는 경향이 있습니다 . 귀하의 질문에 대한 정확한 답변은 아니지만 매우 빠른 작업 방법을 찾으십시오.
vi가 백그라운드에서 열려 있다는 것을 잊어 버린 경우 (이것은 바쁠 때 발생할 수 있음)을 사용하여 쉘에서 로그 아웃하려고 할 때 ctrl+d
백그라운드 작업이 실행 중이라는 경고가 표시되며 닫을 수 있습니다. 또는 ctrl + d를 다시 눌러 로그 아웃하십시오. 또한 동일한 파일을 두 번 다시 열려고하면 복구 경고가 표시되므로를 눌러 a
중단하고 fg를 실행하여 vi로 돌아갈 수 있습니다.
답변
“stdout 가져 오기”에 대해 언급 했으므로 할 수 있습니다.
:r! command
명령의 출력이 파일에 추가되거나
:<range>!command
[eg :1,$!wc
] 명령을 통해 범위의 내용을 필터링
답변
내가 선호하는 관용구는
!!command
이것은 속기입니다
:.!command
명령을 통해 현재 행을 파이프하고 출력을 파일에 삽입합니다. 가장 일반적인 경우는 vi로 명령을 편집하고 다음을 실행하는 것입니다.
!!sh
또는
!<motion>command
예를 들어
!apsh
현재 단락 전체를 쉘을 통해 실행합니다.
답변
콜론과 느낌표를 사용하면 쉘 경로 및 쉘 스크립트에서 명령을 실행할 수 있습니다. 명령은 vi / vim 프로그램을 실행하고 환경을 사용하는 사용자에서 실행됩니다.
:!<command>
vi는 실행되었을 때 유효한 환경을 사용하므로 상위 명령에있는 것과 동일한 경로를 사용합니다. 일부 쉘은 경로에 프로그램 캐시를 보관하며 vi는 사용하는 쉘 및 버전에 따라이 캐시에서 작동하지 않을 수 있으므로 더 많은 파일이있는 경우 잘못된 바이너리를 실행하게 될 수 있습니다 같은 이름을 가진 하나 이상의 바이너리.
답변
예를 들어 :!ls -lh
명령 모드에서 입력하여 명령의 출력을 볼 수 있습니다 .
명령 출력을 편집중인 파일에 삽입하려면을 추가하십시오 r
. 예를 들면 다음과 같습니다 :r!which perl
.
답변
사용하는 !
것이 정답이지만 분명히 자주 전환하는 경우 screen 또는 tmux와 같은 것이 도움이 될 수 있습니다.