2009-06-24 2 views
102

Bash와 함께 vi 모드 (set -o vi)를 사용하는 경우, 현재있는 모드 (삽입 또는 명령)에 따라 프롬프트를 갖는 것이 좋습니다. 이 편집 모드는 어떻게 알 수 있습니까?다른 vi 편집 모드에 대한 다른 bash 프롬프트?

, BTW이 ZSH 가능한 것 같다 :

+0

이것에 대해서도 궁금합니다. bash 문서를 통해 사냥을 해왔지만 아무것도 발견하지 못했습니다. –

답변

0

아닌 한 단계 솔루션, 하나 개의 방법이이 편집 모드와 프롬프트를 모두 변경하는 스크립트를 작성하는 것입니다 달성 할 수 있지만 동시에 & 사용했다 스크립트 독점적으로 모드를 변경할 때.

IE : (아직 말씀 드릴 수 없습니다) 나는 내가 조심스럽게 & 충분히 참조를 간과 질문을 읽어 보지 않았 같아요 참조 : "set -o vi; PS1='desired vi mode prompt';"


편집을 실행하는 스크립트라는 bash는-VI를 가지고 & 명령 모드를 삽입하십시오. 그것을 설정하는 방법도 확실하지 않습니다. 보통 간단한 조작을 위해서만 명령 모드를 사용하기 때문에 보통 나에게는 문제가되지 않는다 - 왜 이것이 유용 할 수 있는지 알 수있다.

+1

아니요, 토마스가 요구하는 것은 다릅니다. 'set -o vi'를 on으로 설정하면 을 누르면 눈에 띄게 다른 프롬프트가 표시되고 을 누르면 원래 프롬프트가 다시 나타납니다. – ephemient

19

bash 맨 페이지를보고 bash 소스 코드 (lib/readline/vi_mode.c)를 살펴보면 삽입 모드에서 다음 모드로 이동할 때 프롬프트를 쉽게 변경할 수없는 것처럼 보입니다. 명령 모드. 소스에 모드를 시작하고 중지하라는 요구가 있기 때문에 누군가가 bash 소스를 패치 할 수있는 기회가있을 것 같습니다.

게시물을 보았을 때 bash vi 모드 설정에 관심이있었습니다. 나는 vi를 좋아하고 커맨드 라인에 있지 않을까? 그러나 우리는 우리가 신속하게 변경하지 않고 삽입 모드에 있는지 추적해야합니다 (그래서 많은 포럼 게시물 sayeth) 당신이 ESC를 누르지 않는 한 당신은 항상 삽입 모드에있는 가치가 무엇을 위해. 조금 더 쉬워 보이지만 항상 직관적 인 것은 아닙니다.

내가 어디로 가고 있는지보고 싶어서 질문을 올리고 있습니다.

0

나는 BASH vi 모드에 대한 표시기를 얻으려고 노력하며, 여러분 모두는 소리가 간단하고 아직 그것을 할 방법이 없다는 것을 배웠다.

현재 접근 방식은 다음 중 어떤 모드인지 모르면 'a'를 누르십시오. BASH PROMOT 다음에 'a'가 표시되면 'INSERT'모드에 있음을 알 수 있습니다. 그 다음엔 'RETURN'을 누르고 계속합니다. 이것은 내가 작은 성가심을 해결하는 쉬운 방법입니다.

그건 그렇고, 나는 별칭 a = 'cal', 또는 빈 히트 'a'작은 유용성을주고 다른 뭔가.

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

그래서/등/INPUTRC 또는 ~/.inputrc (들으 stooj에

set show-mode-in-prompt on 

퍼팅 :

+2

"esc || c- ["가 아닌 "]을 누르는 것이 더 나을 것입니다. 그러면 어떤 모드인지 알 필요가 없습니다. 또는 제거해야하는 불필요한 문자를 삽입하십시오 (또는 리턴 키를 누르십시오) – wom

54

신선한 bash는 4.3의 readline 6.3은 변경 로그에서 너희들을 위해 뭔가 ..이)은 모든 사용자의 readline 지원 프로그램에 영향을 미쳐야합니다.)

+0

? 나는 이것을 (bash가 아니라 다른 readline 기반의 프롬프트에서) 사용하고있다. 나는 인터넷 검색을하고있어 다른 업데이트를 발견하지 못했다. (이것과 기사 [당신을 참조] (http://cnswww.cns.cwru.edu/php/chet/readline/CHANGES)를 제외하고) –

+3

그냥 추가 eMPee584 - bash 4.3 이상을 실행중인 경우, ~/.inputrc 파일에 다음을 추가하십시오. show-mode-in-prompt 이것은 편집 모드에 있으면 프롬프트의 맨 왼쪽에 +를 추가하고, : 명령 모드에있는 경우. – stooj

+3

이렇게 작동하는 동안; 이 vi 모드 문자가 프롬프트하는 int로 이동하는 방법이 있습니까? 여러 줄로 된 프롬프트 (사용자 지정)가있는 경우 잘 작동하지 않습니다. –

16

배시 4.4/Readline 7.0 will add support for user-settable mode strings.

베타 버전을 사용해 볼 수는 있지만 지금은 약간 버그가있는 것 같습니다. 그들은 또한 프롬프트에서 어디에서 모드 표시기를 사용할지 지정하는 것을 지원하지 않습니다 (필자가 생각하기에 킬러 기능이라고 생각합니다).

기다리고 싶지 않고 조금 컴파일하는 것을 두려워하지 않는다면이 기능을 지원하는 gashub에 패치 된 버전의 bash 4.3과 readline 6.3을 게시했습니다. 이 같은 물건을 할 수있는 패치 버전

:

enter image description here

자세한 내용, 설치하는 방법을 포함하여, https://github.com/calid/bash

6

여러 줄 프롬프트에서 사용할 수 있으며, .inputrc

INPUTRC이있다 삽입을 위해 +을 표시하고,에 set show-mode-in-prompt on을 추가하여 일반 모드에 대해 :을 표시하는 옵션 eMPee584가 작성한대로으로 작성되었지만 여러 줄로 된 프롬프트에서는 제대로 작동하지 않습니다.

솔루션에는 한 줄의 PS1 (>)과 프롬프트 앞에 무엇인가가 표시되는 기능이 있습니다. bash에 내장되어 PROMPT_COMMAND이라고합니다.

function prompt { 
    PS1=' > ' 
    echo -e "$(date +%R) $PWD" 
} 

PROMPT_COMMAND='prompt' 

일반적인 프롬프트 문자열은 printf의 반향에서 사용할 수 없습니다. -e은 컬러 코드를 보간하는 것이므로 \[ 또는 \]을 추가 할 필요가 없습니다. 어쨌든 작동하지 않습니다.

삽입 모드 :

20:57 /home/sshbio/dotfiles/bash 
+ > _ 

일반 모드 : 탭을 누르면

20:57 /home/sshbio/dotfiles/bash 
: > _ 

는 만 PS1 반복, 나에게 의미가 있습니다 :

20:57 /home/sshbio/dotfiles/bash 
+ > ls _ 
bashrc  bash_profile  inputrc 
+ > ls _ 

Preview (Source)

+0

'vi-cmd-mode-string' 또는'vi-ins-mode-string'에서 색상을 사용한다면, '\ 1'의 접두사와'\ 2'의 접미사가 붙습니다. [here] (https://www.gnu.org/software/bash/manual/bash.html#Readline-Init-File) ['와'\ ['는 여전히 출력되어야하지만 printf에는'\\ ['와'\\]'가 필요합니다. –

관련 문제