Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Vi命令行编辑中命令模式和插入模式的区分方法_Bash_Vi_Command Line Interface - Fatal编程技术网

Bash Vi命令行编辑中命令模式和插入模式的区分方法

Bash Vi命令行编辑中命令模式和插入模式的区分方法,bash,vi,command-line-interface,Bash,Vi,Command Line Interface,当bash在vi模式下切换到insert模式时,我总是有点困惑,因为它没有给出任何关于使用模式命令或编辑的提示。 有没有办法区分mods?可能是光标颜色的自动改变或类似的东西?在korn shell中使用vi模式多年后,我基本上训练自己在键入任何命令之前只需轻触ESC几次,然后按ESC开始键入 基本前提是,如果您刚刚按下ESC键,您就可以准确地知道自己处于什么模式。在/etc/inputrc或~/.inputrc中添加以下内容: set show-mode-in-prompt on 在bash

当bash在vi模式下切换到insert模式时,我总是有点困惑,因为它没有给出任何关于使用模式命令或编辑的提示。
有没有办法区分mods?可能是光标颜色的自动改变或类似的东西?

在korn shell中使用vi模式多年后,我基本上训练自己在键入任何命令之前只需轻触ESC几次,然后按ESC开始键入


基本前提是,如果您刚刚按下ESC键,您就可以准确地知道自己处于什么模式。

在/etc/inputrc或~/.inputrc中添加以下内容:

set show-mode-in-prompt on
在bash4.3中,当处于插入模式时,这将在提示符前面加上+和:当处于命令模式时

编辑: 在最新版本的bash4.4中,默认情况下会出现一个前缀为ins或cmd的提示符。但是,你可以改变这一点:

set vi-ins-mode-string "+"
set vi-cmd-mode-string ":"
此外,您还可以使用诸如“\e[1;31m”之类的颜色代码,但在它们周围加上“\1”和“\2”以使readline满意:

set vi-cmd-mode-string "\1\e[1;31m\2:\1\e[0m\2"

基于@Isaac Hanson的答案,您可以通过在.inputrc中设置这些选项来设置光标样式以反映模式,就像在VIM中一样:

这将为您提供插入模式下的梁光标或正常模式下的块光标

其他选项替换\e[]之后的数字:


您的终端必须支持诸如xterm、urxvt、iTerm2之类的decscurs。如果您在TMUX外部设置TERM=xterm-256color,TMUX也支持这些。挑剔:您的意思是它是在正常模式还是在插入模式下,因为没有编辑模式,bash也没有实现命令模式OK,根据一些名称,它们被命名为命令模式和插入模式。所以我和你的观点都是半真半假。如果切换到zsh是一个选项,这是受支持的。看。哦,哇。事实上,我几天前才切换到zsh。你的建议出现得很及时:关于术语,使用术语插入模式和命令模式。四年了。从哪一个版本开始可用?从Readline中的4.3新功能开始j.是否可以同时设置光标和前缀?@MartianTomatoes是的,只需将其附加到字符串值您有到源的链接吗?@winklerrr:一个正确的参考是:-按最后一个字符排序。查找标题CSI Ps SP q大约向下一半的部分。这会导致相当简洁的阅读。警告您!@bloody-在插入模式下按enter键时,它首先切换到命令模式\e=ESC,在运行命令之前更新光标
set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2

# optionally:
# switch to block cursor before executing a command
set keymap vi-insert
RETURN: "\e\n"
        Ps = 0  -> blinking block.
        Ps = 1  -> blinking block (default).
        Ps = 2  -> steady block.
        Ps = 3  -> blinking underline.
        Ps = 4  -> steady underline.
        Ps = 5  -> blinking bar (xterm).
        Ps = 6  -> steady bar (xterm).