122

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

顺便说一句,这在ZSH中似乎是可能的:

4

9 回答 9

72

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

于 2013-06-17T09:33:45.563 回答
25

Bash 4.4 / Readline 7.0将增加对用户可设置模式字符串的支持

您可以尝试测试版,但目前它们似乎有点错误。他们还不支持在提示中指定您希望模式指示器出现的位置(我认为这是杀手级功能)。

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

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

在此处输入图像描述

更多详细信息,包括如何安装,请访问https://github.com/calid/bash

于 2015-10-26T04:42:38.507 回答
19

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

看到您的帖子后,我对 bash vi 模式设置产生了兴趣。我喜欢 vi,为什么不在命令行上。然而,看起来我们将不得不跟踪我们是否处于插入模式而无需立即更改(许多论坛帖子都这么说)因为值得您始终处于插入模式,除非您按 ESC。使它更容易一些,但并不总是那么直观。

我正在提高你的问题,因为我有兴趣看看它的去向。

于 2010-01-22T14:52:19.657 回答
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,不用加\[or \],反正也不管用。

插入模式:

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 _

预习 (资源)

于 2016-01-31T20:19:40.987 回答
6

这就是我所拥有的~/.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它仅在终端仿真器上仅适用于颜色的含义。

于 2020-02-12T00:45:11.830 回答
6

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

在此处输入图像描述

于 2020-12-04T15:02:32.017 回答
6

不同的提示和光标样式通过.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)$ ...
于 2020-02-11T23:53:47.970 回答
2

对于像这张图片这样的多行提示

我的工作是这样的

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

希望这对你有帮助

于 2019-05-04T00:30:54.820 回答
0

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

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

顺便说一句,我'alias a='cal',或者别的东西给空的命中'a'一点用处。

于 2010-09-19T03:18:09.183 回答