Bash와 함께 vi 모드 (set -o vi)를 사용할 때 현재 사용중인 모드 (삽입 또는 명령)에 따라 달라지는 프롬프트가 있으면 좋을 것입니다. 이 편집 모드를 어떻게 알 수 있습니까?
Btw, 이것은 ZSH 에서 가능한 것 같습니다 .
Bash와 함께 vi 모드 (set -o vi)를 사용할 때 현재 사용중인 모드 (삽입 또는 명령)에 따라 달라지는 프롬프트가 있으면 좋을 것입니다. 이 편집 모드를 어떻게 알 수 있습니까?
Btw, 이것은 ZSH 에서 가능한 것 같습니다 .
답변:
신선한 bash 4.3과 readline 6.3은 여러분을위한 무언가를 가지고 있습니다.
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.
그래서 퍼팅
set show-mode-in-prompt on
/ etc / inputrc 또는 ~ / .inputrc (thx stooj)로 들어가면 모든 readline 지원 프로그램에 영향을 미칩니다.)
Bash 4.4 / Readline 7.0 은 사용자 설정 가능 모드 문자열에 대한 지원을 추가합니다 .
베타 버전을 사용해 볼 수 있지만 현재로서는 약간 버그가있는 것 같습니다. 그들은 또한 프롬프트에서 모드 표시기를 발생시킬 위치를 지정하는 것을 아직 지원하지 않습니다 (제가 생각하기에 킬러 기능이라고 생각합니다).
기다리지 않고 약간의 컴파일을 두려워하지 않는다면,이 기능을 지원하는 bash 4.3 및 readline 6.3 패치 버전을 github에 게시했습니다.
패치 된 버전을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.
설치 방법을 포함한 자세한 내용은 https://github.com/calid/bash 에서 확인할 수 있습니다.
google을 검색하고 bash man 페이지를 살펴본 다음 bash 소스 코드 (lib / readline / vi_mode.c)를 살펴보면 삽입 모드에서 명령 모드로 이동할 때 프롬프트를 쉽게 변경할 수있는 방법이없는 것 같습니다. 소스에서 모드를 시작하고 중지하기위한 호출이 있기 때문에 누군가가 bash 소스를 패치 할 수있는 기회가있을 수 있습니다.
귀하의 게시물을 보았을 때 bash vi 모드 설정에 관심이 생겼습니다. 나는 vi를 좋아하고 왜 명령 줄에 있지 않을까요? 그러나 우리는 즉각적인 변경없이 삽입 모드에 있는지 추적해야 할 것 같습니다 (많은 포럼 게시물이 그렇습니다). ESC를 누르지 않는 한 항상 삽입 모드에있는 것이 가치있는 일입니다. 조금 더 쉽게 만들지 만 항상 직관적 인 것은 아닙니다.
나는 이것이 어디로 가는지보고 싶어서 귀하의 질문을 올리고 있습니다.
.inputrc
INPUTRC는 표시 할 수있는 옵션이 +
삽입과 :
추가하여, 정상 모드 set show-mode-in-prompt on
에 ~/.inputrc
eMPee584가 쓴, 그러나이 프롬프트 (배쉬와 readline에 이전 버전의) 여러 잘 작동하지 않습니다.
솔루션에는 한 줄 PS1
( >
)과 프롬프트 전에 무언가를 에코하는 함수가 있습니다. bash에 내장되어 있으며 PROMPT_COMMAND
.
function prompt {
PS1=' > '
echo -e "$(date +%R) $PWD"
}
PROMPT_COMMAND='prompt'
일반적인 프롬프트 문자열은 printf의 echo에서 사용할 수 없습니다. 는 -e
interprete 색상 코드로이며, 추가 할 필요가 없습니다 \[
또는 \]
어쨌든 작동하지 않는다.
삽입 모드 :
20:57 /home/sshbio/dotfiles/bash
+ > _
일반 모드 :
20:57 /home/sshbio/dotfiles/bash
: > _
Tab 키를 누르면 PS1 만 반복됩니다.
20:57 /home/sshbio/dotfiles/bash
+ > ls _
bashrc bash_profile inputrc
+ > ls _
나는 또한 BASH vi 모드에 대한 표시기를 얻으려고 노력하고 있으며, 여러분 모두는 그것이 간단하고 아직 할 방법이 없다는 것을 배웠습니다.
내 현재 접근 방식은 : 어떤 모드인지 확실하지 않을 때 'a'를 누르십시오. BASH PROMOT 후 'a'가 나타나면 'INSERT'모드임을 알 수 있습니다. 그런 다음 'RETURN'을 누르고 계속합니다. 이것은 제가 작은 성가심을 해결하는 쉬운 방법입니다.
그건 그렇고, 나는 'alias a ='cal ', 또는 빈 히트'a '에 약간의 유용성을 부여하는 다른 것입니다.
.inputrc
먼저 다음보다 높은 bash 버전을 실행하고 있는지 확인해야합니다 4.3
.
$ bash --version
GNU bash, version 4.4
그런 다음 다음 줄을 입력하십시오 ~/.inputrc
.
#################### VIM ####################
# FOR MORE INFORMATION CHECK:
# https://wiki.archlinux.org/index.php/Readline
# TURN ON VIM (E.G. FOR READLINE)
set editing-mode vi
# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)
set show-mode-in-prompt on
# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE
# FOR THE NUMBER AFTER `\e[`:
# 0: blinking block
# 1: blinking block (default)
# 2: steady block
# 3: blinking underline
# 4: steady underline
# 5: blinking bar (xterm)
# 6: steady bar (xterm)
set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2
명령 모드에서는 커서가 블록으로 표시됩니다.
삽입 모드에서는 커서가 세로 막대로 표시됩니다.
프롬프트 자체는 모드에 따라 다음과 같이 표시됩니다.
(cmd)$ ...
(ins)$ ...