[unix] bash에서 vi 모드를 나타내도록 커서 모양 또는 색상을 변경하십시오.

명확히하기 위해 : 터미널 내에서 vim을 사용할 때 커서변경하는 방법을 묻지 않습니다 . Bash의 vi 모드에서 입력 모드와 명령 모드를 전환 할 때 커서를 변경하고 싶습니다.

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

zsh 에서 모드 변경시 커서 색상 변경을 가능하게하는 스크립트 를 찾았 지만이 기능에 대해서만 쉘을 변경하고 싶지 않습니다.

Bash 명령 줄에서 명령 모드와 삽입 모드 사이를 전환 할 때 커서가 gvim과 같이 모양을 바꾸는 방법이 있습니까?



답변

이 두 줄을 ~ / .inputrc에 추가하십시오 .

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2


답변

여기에서 복사- 명령 줄 편집 vim 스타일

bash4.3 에서 사용할 수 있어야합니다 .- 변경 로그를 참조하십시오 –

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash4.3은 현재 rc단계에 있습니다. 주 리포지토리에는 없지만 소스에서 컴파일하지 않고도 대부분의 배포판에 대한 패키지를 얻을 수 있습니다. 예 : 우분투 (AMD64) 여기 데비안 (실험의 repo) 여기 .


답변

나는 실제 해결책을 찾지 못했지만 아마도 이것은 당신 (또는 다른 사람)이 더 나은 해결책을 찾는 데 도움이 될 수 있습니다.

스크립트를 만들어야합니다 (예 : kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

PS1에 추가 한 후 다음과 같이하십시오.

export PS1="\u@\h \$(kmtest.sh)> "

그러나 내가 말했듯이, 그것은 당신이 원하는 것이 아니며, cr 후에 만 ​​커서 색을 변경시킵니다. 행운을 빕니다

gb


답변

해킹 readline을 통해 할 수있는 방법이있을 것 같습니다. 아마도 우리는 주류화를 추진할 수 있을까요?

여기에 https://stackoverflow.com/a/12201092/255961 에 대한 답변이 있습니다. 추가 정보를 얻으면 업데이트 할 것입니다.


답변

정확히 원하는 것은 아니지만 (커서 동적으로 커서 변경) bash 4.4 / readline 7.0 은 프롬프트를 동적으로 변경하는 기능을 추가합니다 . 당신은 (이는 현재 다른 삽입 / 명령 모드에 대한 사용자 정의 모드 표시 등을 지정할 수 있습니다 show-mode-in-prompt하드 코딩 옵션을 사용 +하고 :).

불행히도이 버전은 현재 베타 버전이며 아직 모든 버그가 해결되지 않은 것 같습니다. 프롬프트에서 모드 표시기를 표시 할 위치를 지정할 수있는 기능도 없습니다.

그동안 github 에 패치 된 bash 4.3 / readline 6.3 버전을 이 기능으로 게시했습니다 .


답변

Gvim에서 Console Vim으로 전환 할 때 AskUbuntu에서 다시 같은 질문을했습니다 .

내가받은 하나의 대답을 하지만 그놈 터미널 설정을 전환 참여, 이러한 설정이 단자에 적용했다. 따라서, 그놈 터미널 커서가 때때로 잘못된 상태로 고착 될 수있었습니다.

나는 여전히 만족스러운 솔루션을 얻는 지에 관심이 있지만 시간이 지남에 따라 커서의 모드 상태 정보가 부족하도록 조정되었습니다. 아마도 난 그냥 더 자주 탈출을 누릅니다 (예를 들어, esc내가 명령 모드 esc i에 있는지 확인하고 삽입 모드에 있는지 확인하기 위해); 화면 하단에 표시된 상태를 보았을 것입니다. 아마도 방금 모드를 내면화했을 것입니다.


답변