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
에서~/.inputrc
eMPE 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
'programing' 카테고리의 다른 글
Objective-C에서 난수 생성 (0) | 2023.04.20 |
---|---|
스위프트에서 할당 해제 (0) | 2023.04.20 |
Swift에서 NS_OPTIONS 스타일의 비트 마스크 열거를 만드는 방법은 무엇입니까? (0) | 2023.04.20 |
SQL Server 2008의 "WHERE" 절에 있는 "CASE" 문 (0) | 2023.04.20 |
WPF 사용자 인터페이스를 테스트하는 방법 (0) | 2023.04.20 |