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


30

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

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

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

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


퍼티에 대한 SO의 동일한 질문, 대답은 없습니다 :(- stackoverflow.com/questions/2393383/…
studgeek

답변:


5

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

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

4
이 답변은 사용자가 수행하는 작업을 설명하고 일부 컨텍스트를 제공하는 경우 (예 : 설정에 사용자에게 특정 버전의 Readline이 있어야 함) 훨씬 유용합니다.
Anthony G-Monica에 대한 정의

:) 여기 수동 항목이 있습니다 : gnu.org/software/bash/manual/html_node/…
holytrousers

1
DECSCUSR을 이해하는 터미널 및 터미널 에뮬레이터에서만 작동합니다.
JdeBP

이 작업을 수행하기 위해 추가해야 set show-mode-in-prompt on했습니다 ~/.inputrc.
ronakg

4

여기에서 복사- 명령 줄 편집 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) 여기 .


참고 : 줄 바꿈 문자가 포함 된 사용자 정의 PS1을 사용하는 경우 프롬프트가 업데이트되지 않습니다. 발견 여기
pgericson

@pgericson bash 4.4.12에서 줄 바꿈이 포함 된 사용자 정의 PS1과 함께 작동하는 것 같습니다.
DuBistKomisch

2

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

스크립트를 만들어야합니다 (예 : 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


이것이 실제로 당신에게 효과가 있었습니까? 그것은 나를 위해 작동하지 않았다; 방금 커서를 빨간색으로 만들었습니다. 삽입 모드와 명령 모드를 전환 할 때마다 kmtest.sh가 실행되는 것으로 생각하지 않습니다. 프롬프트 작성시에만 실행되는 것 같습니다.
joecan

1

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

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


1

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

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

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


0

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

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

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


3
명확히하기 위해, 당신은 질문이 내 것과 동일 하지 않다는 것을. 콘솔의 Vim 내에서 커서를 변경하는 방법을 물었습니다. 이것은 Vim 위키 에 잘 정리되어 있습니다 . Bash의 vi-mode 에서이 작업을 수행하는 방법을 알고 싶습니다 .
joecan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.