댓글에 대한 응답

댓글에 대한 응답

나는 많은 vim 창을 실행하고 종종 bg에 넣습니다. 문제는 vim내가 그 목록을 나열하면 다들 그렇게 말하므로 jobs차이점을 말하기가 어렵다는 것입니다.

[1]  - suspended  nvim
[2]  - suspended  nvim
[3]  + suspended  nvim

이 문제를 해결하는 한 가지 방법은 vim을 시작할 때 특정 파일을 여는 것입니다.

nvim ./myfile

jobs:

[1]  + suspended  nvim myfile

그러나 그것은 형편없는 이름 대체물이다.

또 다른 옵션은 다음과 같은 환경 변수를 (잘못) 사용하여 버퍼 이름을 지정하는 것입니다.

vim name=my_name

그러나 출력이 jobs더 유용할 수 있으며 프로세스를 시작할 때 잠재적으로 원치 않는 프로세스 배경을 준비해야 한다는 단점이 있습니다.

[1]  - suspended  nvim name=my_name
[2]  + suspended  nvim name=other_name

이상적으로는 버튼을 누를 때 프로세스에 대한 선택적 이름을 지정하라는 요청을 받고 싶습니다 ctl-z. 어쩌면 이것을 처리하는 플러그인이 있을 수도 있지만 아직 찾지 못했습니다.

직접 글을 쓰고 싶지만 어디서부터 시작해야 할지 모르겠습니다. 아마도 ctl-z다른 프로그램으로 다시 매핑해서일까요 ? 어쩌면 앞에 fg앉아서 jobs출력을 제어하는 ​​​​글을 작성해야 할 수도 있습니다 ...

이에 대한 제안이 있으십니까?

답변1

nvim이름 및 현재 매개변수와 일치하는 백그라운드 작업을 확인하는 셸 함수를 작성할 수 있습니다 . 발견되면 다시 전경으로 돌아옵니다. 그렇지 않은 경우 새 명령줄을 실행하십시오.

전체 명령을 다시 입력하지 않고도 쉘 기록을 사용할 수 있습니다.

  1. 새 명령을 시작했습니다nvim foo.txt
  2. 이 명령을 백그라운드에 둡니다.
  3. [일반적인 bash 구성 사용] 을 누르면 Ctrlr foo표시되므로 실행 명령줄을 다시 nvim foo.txt누르면 Enter셸 기능이 호출되고 일시 중지된 vim 프로세스로 돌아갈 수 있습니다.

댓글에 대한 응답

Ctrl- z그런 식으로 작동하지 않습니다. 구성 가능한 쉘 기능을 할당하지 않습니다. bash모든 문자(및 기타 몇 가지 문자)를 확인할 수 있습니다 .

start cmd:> bind -p | grep -F '\C-a'
"\C-a": beginning-of-line

대부분은 셸(예: readline프롬프트 편집 구성 요소) 에 일부 구성이 있지만 Ctrl- 는 없습니다 z. 그 이유는 이것이 "더 높은 우선순위"로 다른 곳에서 정의되어 있으므로 쉘에 도달하지 않기 때문입니다.

start cmd:> stty -a
speed 38400 baud; rows 47; columns 210; line = 0;
intr = ^C; [...] kill = ^U; eof = ^D; [...] start = ^Q; stop = ^S; susp = ^Z;

터미널 에뮬레이터는 이 키 조합을 캡처하고 SIGTSTP(TERMINAL STOP) 신호를 전경 프로세스 그룹에 보냅니다.

start cmd:> strace -f -p 20171
strace: Process 20171 attached
restart_syscall(<... resuming interrupted read ...>) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
--- SIGTSTP {si_signo=SIGTSTP, si_code=SI_KERNEL} ---
--- stopped by SIGTSTP ---
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=3583, si_uid=1000} ---

이것이 커널 수준에서 일어나는 일입니다. 포그라운드 프로세스가 중지되고(신호를 포착하지 못했기 때문에) 쉘은 하위 프로세스가 커널로부터 신호를 수신하여 중지되었음을 알립니다. 실행 fg결과는 사용자 프로세스(셸)에서 보낸 계속 신호인 마지막 줄에 표시됩니다.

관련 정보