많은 사람들처럼 나도 다른 곳에서 복사한 몇 줄의 tmux 구성을 가지고 있습니다. 그 중 하나는 "VIM 창인지 감지"입니다. 아무리 많이 찾더라도 항상 동일한 줄과 정규식 세트를 찾습니다. 어느 날 갑자기 tmux는 내가 vim 창에 있다는 것을 더 이상 인식하지 못하고 프로그램에 올바른 키 입력을 보내지 않았습니다. 저는 디버깅하는 데 많은 시간을 보냈고 명령을 수동으로 실행하려면 tmux 창에 tty 정보를 추가해야 했습니다.
약간의 고통 끝에 원래 정규 표현식이 더 이상 올바른 출력과 일치하지 않는다는 사실을 발견하여 이를 수정했습니다.
예전에는 이랬었지
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
이걸 바꿔야 했어
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
보시다시피 을(를) 제거했습니다 ^[^TXZ ]+ +
. 명령의 출력이 더 이상 일치하지 않기 때문에 그 목적이 무엇인지, 특히 왜 날마다 바뀌는지 알 수 없습니다. 일치하려는 내용과 변경 이유를 이해하고 싶습니다.
참고로 일반 터미널에서 위 명령을 실행했을 때 나타나는 새로운 출력입니다.
Ss -zsh
S -zsh
S -zsh
S -zsh
S /Users/danielo/.cache/gitstatus/gitstatusd-darwin-arm64
S+ lvim
왜 이것이 변경되었을 수 있으며 이전 출력이 무엇인지는 여전히 나에게 미스터리입니다.
인사
답변1
lvim
현재는 , 대신 을 사용하고 있는 것 같습니다 vim
.
grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'
(이건 \\
버그일 수도 있습니다)
ps
이 출력과 일치하는 라인
^
공백( )을 제외한 하나 이상의 ( ) 문자로 시작하고+
그 뒤에 옵니다.T
X
Z
- 하나 이상의 공백 다음에
/
다음으로 끝나는 선택적인 공백이 아닌 시퀀스- 선택적
g
, orview
또는vi
선택적으로 앞에 and/orn
가 오고 그 뒤에 선택사항이 옵니다.m
x
diff
- 줄 끝(
$
).
따라서 S+ gviewdiff
예를 들어 or 와 일치 YY /path/to/vi
하지만 Z vim
(pause vim
), also 는 아닙니다 YY lvim
( YY /vim
그런데 둘 다 아닙니다).
grep -iqE '(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'
위에 표시된 대로 하나 이상의 문자 와 대체 철자 및 해당 변형의 선택적 시퀀스로 끝나는 줄의 모든 위치( ^
줄 시작 부분에 앵커 없음)와 일치합니다./
vim
정규식은 시작 부분에 고정되지 않고 중복 (\\S+\\/)?g?
되므로 정규식 n?
이 있든 없든 동일한 줄과 일치하므로 다음과 같습니다.
grep -iqE 'vi(ew|m?x?)(diff)?$'
ZZ whatever lvimdiff
그래서 그것은 일치하기 때문에 일치합니다 vimdiff
.
lvim
프로세스 상태를 동시에 확인 하려면 다음과 같은 것이 필요합니다.
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -ixqE '[^TXZ ]+ +(\\S*/)?[gl]?(view|n?vim?x?)(diff)?'"
( 및 앵커를 지정하고 allowed 로 바꿀 -x
필요가 없도록 이 옵션을 사용합니다 . 또한 allowed 로 변경할 수 있습니다 .^
$
\\S+
\\S*
/vi
.*
Ss /my cool apps/vi