일반/삽입 모드를 나타내기 위해 zsh에서 커서 색상을 사용하려고 하는데 일반 모드에서는 커서 색상이 삽입 모드의 기본 색상으로 재설정되지 않습니다.
출처는 다음과 같습니다.
# color cursor
zle-keymap-select () {
if [ $KEYMAP = vicmd ]; then
echo -ne "\033]12;Cyan\e[2 q\033[m"
else
echo -ne "\e[2 q\033[m"
zle -K viins
fi
}
zle -N zle-keymap-select
zle-line-init () {
zle -K viins
echo -ne "\e[2 q\033[m"
}
zle -N zle-line-init
_fix_cursor() {
echo -ne "\e[2 q\033[m"
}
precmd_functions+=(_fix_cursor)
내가 사용하는 터미널 에뮬레이터는 민첩성입니다.
tmux 내부에서 zsh를 사용하면 그에 따라 색상이 변경되지만 tmux 외부에서는 커서 색상이 변경되지 않습니다.
답변1
어떤 터미널 에뮬레이터를 사용하고 있는지 모르겠지만 xterm
비슷한 터미널에서 텍스트 커서 색상을 설정하는 순서는 다음과 같습니다.\e]12;Cyan\a
.
기본값으로 재설정하는 방법은 다음과 같습니다.\e]112\a
\e[2 q
모양을 설정하는 것입니다.안정화 블록.
\e[m
모든 텍스트 렌더링 속성(굵게, 밑줄, 강조, 전경색, 배경색...)을 기본값으로 재설정합니다. 적절한 프롬프트 문자열 정의가 있으면 필요하지 않습니다.
편집하다, alacritty
(현재 사용중인 단말기임을 확인하셨습니다)\e]12;color\a
이스케이프 시퀀스가 실제로 지원됩니다#XXX
, 이름만 사용 #XXXXXX
하거나 rgb:XX/XX/XX
형식(자체 제한을 사용하는 형식) 으로 색상을 지정하는 것은 지원하지 않습니다.xparse_color
XParseColor()
, 크로스 플랫폼이기 때문에 X11을 호출할 수 없는 것 같으니 , 또는 거기 Cyan
로 바꿔야 합니다 (호출 터미널도 이를 지원해야 합니다 ).#0ff
#00ffff
rbg:0/ff/ff
XParseColor()
작동하는 이유 tmux
(최신 버전만 해당)는 실제로 호스트 터미널로 tmux
변환하고 , 예를 들어 다음을 사용하여 출력을 캡처하면 호스트 터미널을 관찰할 수 있다는 것입니다 .\e]12;Cyan\a
\e]12;rgb:00/ff/ff\a
script
그래서:
_reset_cursor_color() printf '\e]112\a'
zle-keymap-select() {
if [[ $KEYMAP = vicmd ]]; then
printf '\e]12;#0ff\a'
else
_reset_cursor_color
fi
}
zle -N zle-keymap-select
zle-line-init() zle -K viins
zle -N zle-line-init
precmd_functions+=(_reset_cursor_color)