vi 내부의 배쉬 명령


33

vi 안에 bash 명령을 입력하고 stdout을 얻을 수 있습니까?

쉘에서 무언가를 찾고 싶기 때문에 vi를 닫았다가 다시 여는 것이 종종 지루합니다.

답변:


45

예, 예를 들어하려는 경우 다음을 ls시도하십시오.

:!ls

쉘을 스폰하려면

:shell


이거없이 어떻게 살 수 있을까?
하프

3
실제로 내가 자주하는 일은 무언가를 편집 할 때 vi를 루트로 실행하는 것을 잊어 버리는 것입니다. 이 명령은 내가 기억할 수있는 것보다 더 긴 재 작성 시간을 절약 해줍니다. :w !sudo tee %
Mark D

1
나는 GNU에서이 작업을 수행 할 수있는 방법이 있었으면nano
ixtmixilix

1
그런 다음 : shell을 사용한 후 편집기로 돌아가는 방법은 무엇입니까?
VaTo

@VaTo : 돌아가려면 다음과 같이 입력하십시오. exit
Raman Kathpalia

12

ctrl+zvi를 잠들고 쉘에서 필요한 것을 실행 한 다음 fgvi를 다시 시작 하는 데 사용하는 경향이 있습니다 . 귀하의 질문에 대한 정확한 답변은 아니지만 매우 빠른 작업 방법을 찾으십시오.

vi가 백그라운드에서 열려 있다는 것을 잊어 버린 경우 (이것은 바쁠 때 발생할 수 있음)을 사용하여 쉘에서 로그 아웃하려고 할 때 ctrl+d백그라운드 작업이 실행 중이라는 경고가 표시되며 닫을 수 있습니다. 또는 ctrl + d를 다시 눌러 로그 아웃하십시오. 또한 동일한 파일을 두 번 다시 열려고하면 복구 경고가 표시되므로를 눌러 a중단하고 fg를 실행하여 vi로 돌아갈 수 있습니다.


1
커맨드 라인에서 수행중인 작업에 붙 잡히면 끈적 거리게 될 수 있으며 vim을 배경으로 한 것을 잊어 버릴 수 있습니다.
Eliot Ball

1
네, 가능합니다. 제가 직접했습니다. 나를 위해 쉘 불변성을 갖는 것이 가치가 있습니다. 귀하의 의견을 반영하여 답변을 업데이트하겠습니다
Rqomey

1
나는 gnu screen을 사용하는 것이 더 나을 것이라고 생각합니다.
user606723

1
tmux를 직접 사용하지만 속도를 높이기 위해 tmux 나 화면이없는 서버에 로그인하면 편리합니다
Rqomey

11

"stdout 가져 오기"에 대해 언급 했으므로 할 수 있습니다.

:r! command

명령의 출력이 파일에 추가되거나

:<range>!command

[eg :1,$!wc] 명령을 통해 범위의 내용을 필터링


:%!command꽤 유용한 것 같습니다
Eliot Ball

나는 이것을 라인 정렬에 자주 사용한다 [eg :.,+20 !sort]
Walter A

5

내가 선호하는 관용구는

!!command

이것은 속기입니다

:.!command

명령을 통해 현재 행을 파이프하고 출력을 파일에 삽입합니다. 가장 일반적인 경우는 vi로 명령을 편집하고 다음을 실행하는 것입니다.

!!sh

또는

!<motion>command

예를 들어

!apsh

현재 단락 전체를 쉘을 통해 실행합니다.


2
참고 !}이 단락의 시작에 위치 할 필요가 시도 !ap. (이것이 모든 vi에 있는지 vim에만
있는지는 모르겠습니다

4

콜론과 느낌표를 사용하면 쉘 경로 및 쉘 스크립트에서 명령을 실행할 수 있습니다. 명령은 vi / vim 프로그램을 실행하고 환경을 사용하는 사용자에서 실행됩니다.

:!<command>

vi는 실행되었을 때 유효한 환경을 사용하므로 상위 명령에있는 것과 동일한 경로를 사용합니다. 일부 쉘은 경로에 프로그램 캐시를 보관하며 vi는 사용하는 쉘 및 버전에 따라이 캐시에서 작동하지 않을 수 있으므로 더 많은 파일이있는 경우 잘못된 바이너리를 실행하게 될 수 있습니다 같은 이름을 가진 하나 이상의 바이너리.


4

예를 들어 :!ls -lh명령 모드에서 입력하여 명령의 출력을 볼 수 있습니다 .

명령 출력을 편집중인 파일에 삽입하려면을 추가하십시오 r. 예를 들면 다음과 같습니다 :r!which perl.


1

사용하는 !것이 정답이지만 분명히 자주 전환하는 경우 screen 또는 tmux와 같은 것이 도움이 될 수 있습니다.


0

내 .vimrc에 있습니다. 얼마 전에 스택 오버플로에서 발견되었습니다.

" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>

0

Linux에서 두 개의 터미널 명령 행 창을 열어 vi를 실행하고 다른 작업을 동시에 다른 작업에 사용할 수있게함으로써이를 쉽게 해결할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.