vi 명령 : sh에서 쉘에 있는지 어떻게 알 수 있습니까?


9

vi에서는 :sh명령 으로 쉘 터미널을 얻을 수 있습니다 . 그리고 나중에 exit쉘로 vi로 돌아갈 수 있습니다 .

그러나 오랫동안 쉘 터미널을 사용하고 있다면 exit아무것도 닫거나 vi를 반환 할지 잊어 버렸습니다 .

vi로 돌아갈 지 여부를 확인할 수있는 방법이 있습니까? jobs또는 fg작동하지 않습니다.


3
Vim이 시작하는 별도의 셸 문제와 반환 할 수 없기 때문에 몇 년 전 : sh 명령 사용을 중단했습니다. 대신, 일반 쉘로 돌아 가기 위해 Vim을 백그라운드 (ctrl-z)에두기 시작했습니다. bash 작업 제어 기능을 사용하면 일반 쉘에서 Vim으로 쉽게 돌아갈 수 있습니다.
bsnyder

답변:


8

일반 쉘에서 :

$ env | grep -i vim
EDITOR=vim

사용 후 :shell

$ env | grep -i vim
EDITOR=vim
VIMRUNTIME=/usr/share/vim/vim80
VIM=/usr/share/vim
MYVIMRC=/home/martin/.vim/vimrc

빔이 설정처럼 그래서 외모 VIMRUNTIME, VIM그리고 MYVIMRC환경 변수를. 그중 VIM가장 신뢰할만한 것 같습니다 (vimrc 또는 vim 런타임이 없을 수도 있습니다).

자체 환경 변수를 설정할 수도 있습니다.

:let $HELLO = "test"
:shell
$ echo $HELLO
test

이것은 편집중인 버퍼에 대한 정보를 전달하는 데 특히 유용합니다. 예를 들면 다음과 같습니다.

:let $VIM_FILETYPE = &filetype
:let $VIM_FILENAME = expand('%:p')

다음과 같이 표시됩니다.

VIM_FILETYPE=go
VIM_FILENAME=/home/martin/a.go

3

일반 쉘 세션과 달리 vim ": sh"에 있는지 여부를 나타내는 빨간색 "+"기호를 추가하도록 명령 프롬프트를 설정했습니다. 그 핵심은 "$$"가 현재 프로세스의 pid이므로 다음과 같습니다.

MY_PPID=$(ps --no-header -o ppid -p $$)          # Gets the pid of the parent
                                                 # process.
MY_PCMDLINE=$(ps --no-header -o cmd -p $MY_PPID) # Gets its command line.
MY_CMDDASH=$(awk '{print $1}' <<<$MY_PCMDLINE)   # Gets the command name, possibly
                                                 # with a preceding hyphen.
MY_CMD=${MY_CMDDASH#-}                           # Get the bare command name.

이 기능을 갖추면 ".bashrc"또는 이와 유사한 기능을 사용하도록 설명 된 것과 같이 쉽게 인라인하고 구성 할 수 있습니다.

참고 : 다른 곳에서 설명 된 환경 변수 ($ VIM) 방법은 이것보다 낫지 만 vim이 아닌 자식 프로세스인지 확인하는 데 도움이됩니다.


1
Vim은 :shMYVIMRC, VIM 및 VIMRUNTIME이라는 세 가지 변수를 쉘 환경에 넣습니다. Vim의 하위 셸에서 실행되고 있음을 알기 위해해야 ​​할 일은 해당 구성 요소가 있는지 테스트하는 것입니다.
garyjohn

2

ps또는 더 나은 실행하십시오 ps -fH. 전의:

$ ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
garyjohn 31140 31139  0 10:26 pts/11   00:00:00 bash
garyjohn 31267 31140  2 10:26 pts/11   00:00:00   vim hello.txt
garyjohn 31271 31267  0 10:26 pts/11   00:00:00     /bin/bash
garyjohn 31332 31271  0 10:26 pts/11   00:00:00       ps -fH

ps -fHover 를 사용 하는 ps것의 장점 은 하위 쉘에 vim있는지 또는 vim배경에 넣었는지 확인할 수 있다는 것 입니다. 이 경우 ps -fH다음과 같습니다.

$ ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
garyjohn 31140 31139  0 10:26 pts/11   00:00:00 bash
garyjohn 31267 31140  0 10:26 pts/11   00:00:00   vim hello.txt
garyjohn 31924 31140  0 10:29 pts/11   00:00:00   ps -fH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.