Vim 창에서 대화식 쉘을 발행 할 수 있습니까?


16

외부 명령을 실행할 수 :!있거나 :r!실행하고 선택적으로 출력을 텍스트에 삽입합니다. 나는 심지어 수행 할 수 :!sh있고 그것을 종료 할 때까지 살아남을 쉘을 생성 할 것입니다. 그러나 쉘이 활성화되어있는 동안 Vim은 '자고'액세스 할 수 없습니다. 쉘을 종료하고 Vim으로 잠시 돌아가려면 새로운 것을 생성해야합니다. 매우 유용하지는 않습니다.

내가 가진 빔을 중단함으로써, 반대의 말에 셸에 액세스 할 수 ^Z와 통해 빔 작업을 관리 bg, fgjobs. 이것은 더 의미가 있지만 장기적으로는 매우 성가신 일입니다. 사용 Screen가능하거나 (종종 그렇지 않은 경우) 내 창 관리자의 여러 창을 열고 (각각의 호스트를 순차적으로 대상으로 지정하여 원격 호스트에 vim과 shell을 두어 번거롭게 만드는 ssh) 사용할 수 있습니다.

Vim이 쉘 세션을 열어서 (내부) 창 중 하나에 보관하거나, 그것을 다시 전환 할 수있게한다면 가장 어려울 것입니다. 이와 같은 것이 가능합니까?


1
기본적으로 :split파일을 다른 창에 유지하면서 셸을 열고 싶 습니까? ... 이것은 나에게 tmux 또는 스크린 작업처럼 들리 ...
Martin Tournoij

1
@Carpetsmoker : 종종 원격 시스템에 설치되는 것을 제어 할 수 없으며, 둘 중 어느 쪽도 아닌지 Vim이 항상 존재합니다.
SF.

Neovim으로 전환하십시오. 이제는 터미널 에뮬레이터가 내장되어있어 꽤 잘 작동하며 vim 버퍼에서 열 수 있습니다.
Zach

답변:


16

이를 허용하는 몇 가지 vim 플러그인이 있습니다. 내가 사용 Conque ( Github에서를 ).

플러그인 디렉토리에 넣은 후에는 다음과 같이하면됩니다.

:ConqueTermSplit bash

그리고 vim에 대화식 bash 쉘이 있습니다. 그런 다음 일반 vim 동작을 사용하여 창에서 원하는 다른 작업을 수행 할 수 있습니다.

또한 다른 플러그인은 vimshell 입니다.


1
플러그인없이 이와 같은 작업을 수행 할 방법이 없습니까?
SF.

3
@SF 참조 :help shell-window. (짧은 답변 : 아니오)
muru

3

VIM을 사용하면 IMO vimshell이 ​​가장 가깝지만이 작업을 수행하는 플러그인이 그다지 크지 않다고 생각합니다. 그러나 2 부분 문제라는 것을 이해해야합니다.

  1. VIM은 이와 같은 작업을 수행 할 수 있도록 설계되지 않았습니다. 특히 성가신 작업은 장기 실행 작업을 실행하고 VIM을 차단하지 않고 비동기식으로 대화 할 수 있습니다. 이 경우에는 쉘 자체뿐만 아니라 쉘 프로세스 내에서 실행할 수있는 다른 작업이기도합니다.
  2. VIM의 모달 ​​철학은 쉘과 상호 작용하는 방식으로 모든 것을 잘 수행하지 못합니다. 쉘에서는 현재 행만 편집 할 수 있지만 쉘을 사용하여 히스토리의 이전 텍스트를 스크롤하고 볼 수는 있지만 편집 할 수는 없습니다. 이것은 VIM의 철학에 전혀 맞지 않습니다. ESC를 누르고 일반 모드로 돌아 가면 사용자가 위의 기록의 일부를 다시 편집하고 편집하는 것을 허용하지 못하게됩니다.

내 의견으로는이 점에서 훨씬 더 잘 작동하는 두 가지 접근법이 있습니다.

  1. TMUX / Screen 및 다중 터미널 창을 사용하여 vim과 쉘을 모두 사용합니다. 그렇게하면 둘이 깔끔하게 분리되어 있지만 아주 적은 노력으로 둘 다 볼 수 있으며 두 사람은 서로의 흐름과 충돌하지 않고 잠재력을 최대한 발휘할 수 있습니다.
  2. tpope / vim-dispatch 와 같은 플러그인을 사용하면 하나의 쉘 명령을 쉽게 시작하고 실제 터미널 쉘의 백그라운드에서 비동기식으로 실행하고 완료되면 vim으로 결과를 가져올 수 있습니다. 이것은 또한 둘 사이에 동일한 수준의 격리를 제공하므로 두 사람은 서로의 발가락을 밟지 않고도 최고의 능력을 발휘할 수 있습니다.

NeoVIM이 핵심적인 목표 중 하나가 작업을 비동기식으로 실행할 수 있기 때문에 이러한 측면에서 변화를 가져올 가능성이 높다고 덧붙여 야합니다. 그러나 그때까지 이것은 내 의견으로는 얻을 수있는 최선이다.


3

에서 :help shell-window우리는 창에 쉘 명령을 실행에 대해 읽을 수 있습니다 :

Vim의 창에서 쉘을 실행할 가능성에 대한 의문이있었습니다.

답 : 당신은 할 수 없습니다!

이것을 포함하면 Vim에 많은 코드가 추가 될 것이므로 이것을하지 않는 것이 좋습니다. 결국 Vim은 편집자 이며 편집하지 않는 작업을 수행해서는 안됩니다. 그러나 이와 같은 것을 얻기 위해 " splitvt "프로그램으로 터미널 화면 또는 디스플레이 창을 분할 해 볼 수 있습니다 .

대안은 BSD Unix 시스템에서 발견 되는 " window "명령으로, 여러 개의 겹쳐진 창을 지원합니다. 또는 " screen "프로그램.

그러나 사용할 수있는 솔루션은 거의 없습니다.

  • 사용 screen특별히 것들, 예를 들면 그런 종류의 위해 설계되었습니다 :

    • Ctrl+ a, S가로 현재 창을 분할 할
    • Ctrl+ a, Tab창 간 전환
    • Ctrl+ a, X현재의 영역을 제거
    • Ctrl+ a, Q하나를 제외한 모든 지역을 제거

    stackoverflow SE의 GNU Screen Survival Guide 를 참조하십시오.

    또는 : GNU Screen Splitting , 자세한 내용은 화면 빠른 참조 를 참조하십시오.

  • VIM-Shell- 타사 패치

    VIM-shell은 분할 창을 특징으로하는 VIM의 확장이며이 패치를 사용하면 해당 창에서 쉘을 시작할 수 있습니다. POSIX 시스템에서만 사용 가능

  • vterm -vim 내의 터미널 에뮬레이터.

    vterm의 목표는 vim 내부에 유닉스 터미널의 복제본을 제공하여 종속성없이 바로 사용할 수 있도록하는 것입니다.

  • Vimux -vim에서 tmux와 쉽게 상호 작용합니다.

    tmux 에 입력을 보낼 수있는 플러그인 인 tslime.vim 에서 영감을 얻은 vimux는 vim에서 tmux와 쉽게 상호 작용할 수 있도록합니다.

  • 이미 언급 한 다른 것 : Conque

관련 : vim 내부에서 터미널을 실행하는 방법은 무엇입니까? 스택 오버 플로우


분할을 제거하는 방법 ?? :-/
0xc0de

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