![댓글에 대한 응답](https://linux55.com/image/219741/%EB%8C%93%EA%B8%80%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%9D%91%EB%8B%B5.png)
나는 많은 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
이름 및 현재 매개변수와 일치하는 백그라운드 작업을 확인하는 셸 함수를 작성할 수 있습니다 . 발견되면 다시 전경으로 돌아옵니다. 그렇지 않은 경우 새 명령줄을 실행하십시오.
전체 명령을 다시 입력하지 않고도 쉘 기록을 사용할 수 있습니다.
- 새 명령을 시작했습니다
nvim foo.txt
- 이 명령을 백그라운드에 둡니다.
- [일반적인 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
결과는 사용자 프로세스(셸)에서 보낸 계속 신호인 마지막 줄에 표시됩니다.