不同的bash提示符为不同的vi编辑模式?

时间:2009-06-24 17:13:10

标签: bash prompt

当使用vi模式(set -o vi)和Bash时,最好有一个取决于你当前所处模式的提示(插入或命令)。如何找到这种编辑模式?

B.t.w,这似乎可以在ZSH中找到:

9 个答案:

答案 0 :(得分:60)

Fresh 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的程序;)

答案 1 :(得分:19)

搜索谷歌后,查看bash手册页然后查看bash源代码(lib / readline / vi_mode.c),看起来没有简单的方法来改变从插入模式转换到命令时的提示模式。看起来有人可能有机会修补bash源,因为有人要求启动和停止源中的模式。

看到你的帖子后,它让我对bash vi模式设置感兴趣。我爱vi,为什么不在命令行上。然而,看起来我们将不得不跟踪我们是否处于插入模式而没有立即更改(所以说许多论坛帖子)。值得一提的是你总是处于插入模式,除非你点击ESC。使它更容易一些,但并不总是那么直观。

我正在提高你的问题,因为我有兴趣了解这一点。

答案 2 :(得分:18)

Bash 4.4 / Readline 7.0 will add support for user-settable mode strings

您可以试用测试版,但目前它们看起来有点儿麻烦。他们还不支持在提示符中指定您希望模式指示符出现的位置(我认为这是杀手级功能)。

如果您不想等待,并且不想进行一点编译,我已经发布了补丁版本的bash 4.3和readline 6.3到支持此功能的github。

使用修补版本,您可以执行以下操作:

enter image description here

https://github.com/calid/bash

提供了更多详细信息,包括如何安装

答案 3 :(得分:7)

多行提示和.inputrc

Inputrc可以通过在+中添加:作为eMPee584写入,在正常模式下显示set show-mode-in-prompt on~/.inputrc,但这不起作用以及多行提示(使用旧版本的bash和readline)。

解决方案有一行PS1>),以及在提示之前回显某些内容的函数。它内置于bash中并称为PROMPT_COMMAND

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

PROMPT_COMMAND='prompt' 

通常的提示字符串在printf的echo中不可用。 -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)

答案 4 :(得分:2)

通过.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)$ ...

答案 5 :(得分:2)

这就是我在~/.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上,这意味着它只能在终端仿真器上仅显示颜色。

答案 6 :(得分:0)

我也尝试获得BASH vi模式的指示器,你们都知道这听起来很简单,但还没办法。

我目前的做法是:当我不确定哪种模式时,点击'a'。如果'a'出现在BASH PROMOT之后,我知道我处于'INSERT'模式。然后,我点击'返回'并继续。这对我来说是解决小烦恼的一种简单方法。

顺便说一下,我'别名a ='cal'或其他东西给空击“一点点”。

答案 7 :(得分:0)

对于这样的多行提示 image

我的工作环境是这样的

我的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):"

希望这对您有帮助

答案 8 :(得分:0)

Spacemacs样式的彩色光标

此设置将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

enter image description here