我在tcsh shell中使用了vi键绑定。
现在,我不知道我处于哪种vi模式(insert
模式或command
模式),这会导致很多挫败感。
有人知道在shell中显示当前vi模式的方法吗?(通过在提示中包含内容)
我在tcsh shell中使用了vi键绑定。
现在,我不知道我处于哪种vi模式(insert
模式或command
模式),这会导致很多挫败感。
有人知道在shell中显示当前vi模式的方法吗?(通过在提示中包含内容)
Answers:
我不相信有任何方法可以直观地确定您所处的模式,但是如果您稍微改变一下行为就没有关系了。
如果要进入命令模式,请在键入命令之前按ESC。
如果要进入插入模式,请在键入内容之前按ESC和i。
您最终将需要频繁按ESC,但是我遇到的每个vi用户仍然会这样做。
我浏览了文档,不得不说我找不到任何检测和显示当前vi模式的方法。我确实希望您有一个令人惊喜的惊喜,并且有人提出了解决方案,但是我当然找不到解决您要求的方法。
我认为有办法做到这一点,但是对于一个小小的烦恼来说,这是巨大的矫kill过正,而且我不认为这是您提出这个问题时想到的。如果属实,请立即停止阅读并享受生活。
太太,如果这真的是您的宠儿,并且让您发疯,并且您确实绝对希望解决这个问题,以下是我的解决方法:
简而言之,Unix将终端I / O实现为设备驱动程序和用户进程之间的全双工I / O流,可以将模块插入其中。它以堆栈形式组织,因此您可以根据需要分层任意数量的流。注入流的总和将创建您的终端I / O行为。
输入字符后,第一个模块将对其进行检查并将其继续传递(如果需要)。当响应以相反的方向到达时,它又有机会检查并继续传递。这是Ctrl-C在比普通字符键更高的级别上得到处理的方式。
您可以创建一个实现流模块的二进制文件,该流模块在被调用时会在前台静默运行,检查并传递所有击键,并对您关心的击键执行首选操作。出于所有目的和目的,它看起来就像您在使用Shell一样。哦 您可以在.tcshrc的最后一行(或第一行或任何行)上调用此二进制文件,甚至不知道它在那里。
有一个很好的入门这里,但我无法找到很多关于这个话题,可能是因为它是过去它的首要。
对于任何有这个确切问题的人(例如我自己):我在stackoverflow找到了一个解决方案。显然,readline中对此提供了本机支持,因此您可以将以下内容添加到您的~/.inputrc
:
set show-mode-in-prompt on
并自定义实际角色使用:
set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"
基于两种最常用的文本编辑器Emacs和vi,有两种主要的命令行编辑模式。使用vi绑定,必须在插入和命令模式之间切换;
在每种模式下,不同的命令很有用。vi模式有两个子模式, insert模式和 command模式。
- 默认模式是insert。
- 您可以通过按在模式之间切换
Esc
。- 或者,在命令模式下,
键入“ a”(附加)或“ i”(插入)将使您返回插入模式。
上面已链接的tcsh
自定义页面上的更多注释。
我遇到了同样的问题,偶然发现了解决方案。尽管此线程很旧,但是我找不到其他提供解决方案的网站,因此我认为在此线程上发布是可以的。
只需重置终端程序或外壳程序的设置即可。我当前正在使用PuTTY,我只是删除了已保存的连接的已保存设置,并重新创建了已保存的会话。像魅力一样工作。
希望这可以帮助!