컬러 커서는 zsh의 vi 모드를 나타내지만 색상을 재설정할 수는 없습니다.

컬러 커서는 zsh의 vi 모드를 나타내지만 색상을 재설정할 수는 없습니다.

일반/삽입 모드를 나타내기 위해 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_colorXParseColor(), 크로스 플랫폼이기 때문에 X11을 호출할 수 없는 것 같으니 , 또는 거기 Cyan로 바꿔야 합니다 (호출 터미널도 이를 지원해야 합니다 ).#0ff#00ffffrbg:0/ff/ffXParseColor()

작동하는 이유 tmux(최신 버전만 해당)는 실제로 호스트 터미널로 tmux변환하고 , 예를 들어 다음을 사용하여 출력을 캡처하면 호스트 터미널을 관찰할 수 있다는 것입니다 .\e]12;Cyan\a\e]12;rgb:00/ff/ff\ascript

그래서:

_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)

관련 정보