小编Jos*_*ley的帖子

将 vi 模式字符串移动到 bash 提示符的末尾

我在 bash 中使用 vi 编辑模式。我在 ~/.inputrc 中将“show-mode-in-prompt”设置为“on”。

显示模式提示(关闭)

如果设置为 On,则在提示开头添加一个字符串,指示编辑模式:emacs、vi 命令或 vi 插入。模式字符串是用户可设置的(例如,emacs-mode-string)。

所以现在我可以在我的提示开头看到编辑模式。

i:$ # This is ins mode
c?$ # This is cmd mode
i:$ cat ~/.inputrc
set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string "\1\e[1;32m\2i:\1\e[0m\2"
set vi-cmd-mode-string "\1\e[1;31m\2c?\1\e[0m\2"
set colored-stats on
i:$ echo $PS1
$
Run Code Online (Sandbox Code Playgroud)

不过,我真的很喜欢在我的提示末尾添加这个,并在当前目录前面加上,即

/current/dir/here $ i:
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否可以实现。我的第一个想法是在 PS1 中使用回车,但不幸的是这会覆盖模式字符串。

i:$ PS1='\r\w $ '
~/projects $
Run Code Online (Sandbox Code Playgroud)

我的第二个想法是以某种方式获取模式字符串并将其插入 $PROMPT_COMMAND,而不是让 readline 将其写入提示。我可以通过以下方式获取当前模式:

i:$ bind -v | grep keymap | awk '{print $3}'
vi-insert
Run Code Online (Sandbox Code Playgroud)

但是 PROMPT_COMMAND 值仅在发出提示之前执行,因此我不会看到模式更改。

第 …

bash command-line prompt readline inputrc

4
推荐指数
1
解决办法
937
查看次数

标签 统计

bash ×1

command-line ×1

inputrc ×1

prompt ×1

readline ×1