当在Bash中使用vi模式(设置-o vi)时,根据您当前所处的模式(插入或命令)进行提示会很不错。如何找到这种编辑模式?
顺便说一句,这似乎在ZSH中是可能的:
当在Bash中使用vi模式(设置-o vi)时,根据您当前所处的模式(插入或命令)进行提示会很不错。如何找到这种编辑模式?
顺便说一句,这似乎在ZSH中是可能的:
Answers:
新鲜的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)应该会影响所有启用了readline的程序;)
Bash 4.4 / Readline 7.0 将添加对用户可设置模式字符串的支持。
您可以尝试使用Beta版本,但目前它们似乎有问题。他们还不支持在提示中指定希望模式指示器出现的位置(我认为这是杀手级功能)。
如果您不想等待,并且不怕稍作编译,那么我已将支持bash 4.3和readline 6.3的补丁版本发布到支持此功能的github。
使用补丁版本,您可以执行以下操作:
包括如何安装在内的更多详细信息,请参见https://github.com/calid/bash
搜索google之后,浏览bash手册页,然后浏览bash源代码(lib / readline / vi_mode.c),从插入模式转换为命令模式时,似乎没有简便的方法来更改提示。尽管有人呼吁启动和停止源代码中的模式,但似乎有人可能会在这里修补bash源代码。
看到您的帖子后,我对bash vi模式设置产生了兴趣。我喜欢vi,为什么不在命令行上呢?但是,看起来我们将不得不跟踪我们是否处于插入模式而无需及时更改(因此,许多论坛帖子都这么说了)。值得的是,除非您按ESC键,否则始终处于插入模式。使它更容易一些,但并不总是那么直观。
我正在提出您的问题,因为我有兴趣了解进展情况。
.inputrc
INPUTRC有一个选项,以显示一个+
用于插入和:
正常模式中,通过将set show-mode-in-prompt on
在~/.inputrc
作为eMPee584写道,但这并不能很好地多提示(与旧版本的bash和readline的)工作。
解决方案是使用单行PS1
(>
),以及在提示之前回显某些内容的函数。它内置于bash中并称为PROMPT_COMMAND
。
function prompt {
PS1=' > '
echo -e "$(date +%R) $PWD"
}
PROMPT_COMMAND='prompt'
通常的提示字符串在printf的回显中不可用。该-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 _
.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)$ ...