programing

vi 편집 모드에 따라 다른 bash 프롬프트가 표시됩니까?

showcode 2023. 4. 20. 23:23
반응형

vi 편집 모드에 따라 다른 bash 프롬프트가 표시됩니까?

VI 모드(set -o vi)를 Bash와 함께 사용할 경우 현재 모드(insert 또는 명령)에 따라 프롬프트가 표시되는 것이 좋습니다.이 편집 모드는 어떻게 알 수 있을까요?

B.T.w. ZSH에서는 이것이 가능한 것 같습니다.

fresh bash 4.3과 readline 6.3이 여러분을 위해 준비한 것이 있습니다.Changelog에서:

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)로 변환합니다.

Bash 4.4 / Readline 7.0 에서는, 유저 설정 가능한 모드 문자열의 서포트가 추가됩니다.

베타 버전을 시험해 볼 수는 있지만, 지금으로서는 조금 버그가 있는 것 같습니다.또한 프롬프트에서 모드 표시기를 발생시킬 위치를 지정하는 것도 지원하지 않습니다(이 기능이 킬러 기능이라고 생각합니다).

만약 당신이 기다리고 싶지 않고 약간의 컴파일이 두렵지 않다면, 저는 이 기능을 지원하는 bash 4.3과 readline 6.3의 패치된 버전을 github에 게시했습니다.

패치가 적용된 버전에서는 다음과 같은 작업을 수행할 수 있습니다.

여기에 이미지 설명 입력

인스톨 방법등의 상세한 것에 대하여는, https://github.com/calid/bash 를 참조해 주세요.

구글 검색 후 bash man 페이지를 살펴보고 bash 소스 코드(lib/readline/vi_mode.c)를 살펴본 후 삽입 모드에서 명령 모드로 이행할 때 프롬프트를 쉽게 변경할 수 없을 것 같습니다.소스에서 모드를 시작 및 중지해야 하는 호출이 있기 때문에 누군가가 bash 소스를 패치할 가능성이 있는 것 같습니다.

당신의 글을 보고 bash vi 모드 설정에 관심이 생겼습니다.나는 vi를 좋아하고 왜 명령줄을 사용하지 않는가.단, 프롬프트 변경 없이 삽입 모드인지 여부를 추적해야 할 것 같습니다(많은 포럼 투고). ESC 키를 누르지 않는 한 삽입 모드입니다.조금 더 쉽게 만들 수 있지만 항상 직관적이지는 않습니다.

이게 어떻게 될지 궁금해서 질문 올려드릴게요.

있는 입니다.~/.inputrc

set show-mode-in-prompt on
set vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2
set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2

삽입 모드는 파란색입니다.

└──[ins]

명령어 모드는 노란색입니다.

└──[cmd]

단점으로는, 이 기능이 에 표시되지 않는다는 것입니다.tty터미널 에뮬레이터에서만 작동한다는 뜻입니다.

여러 줄 프롬프트 및.inputrc

Inputrc에는 다음 항목을 표시하는 옵션이 있습니다.+삽입 및:일반 모드의 경우 추가set show-mode-in-prompt on에서~/.inputrceMPE 584가 기술한 대로이지만, 이것은 멀티 라인 프롬프트(이전 버전의 bash 및 readline)에서는 잘 동작하지 않습니다.

솔루션은 단일 라인입니다.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 _

프리뷰 (출처)

다른 프롬프트 및 커서 스타일:.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)$ ...

Spacesmac 스타일 컬러 커서

이 설정은 Spacemacs 커서와 일치합니다.dotspacemacs-colorize-cursor-according-to-state로 설정하다.t.

set editing-mode vi

set vi-ins-mode-string \1\e[5 q\e]12;green\a\2
set vi-cmd-mode-string \1\e[1 q\e]12;orange\a\2

set show-mode-in-prompt on

여기에 이미지 설명 입력

이미지와 같은 여러 줄 프롬프트의 경우

내 일은 이렇다.

나의 bash 프롬프트

export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "

.inputrc

set show-mode-in-prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"

이게 도움이 됐길 바래

BASH vi 모드의 인디케이터도 취득하려고 합니다만, 모두 심플하고, 아직 할 수 있는 방법이 없다는 것을 알게 되었습니다.

현재 방법은 어떤 모드가 될지 모를 때 'a'를 누르는 것입니다.BASH 프로모션 후에 'a'가 표시되면 'INSERT' 모드임을 알 수 있습니다.'RETURN'을 눌러서 계속 진행합니다.이것은 나에게 작은 귀찮음을 해결하는 쉬운 방법이다.

덧붙여서, 「a=」cal」또는 「a」라고 하는 빈 히트를 조금 유용하게 하기 위해서입니다.

언급URL : https://stackoverflow.com/questions/1039713/different-bash-prompt-for-different-vi-editing-mode

반응형