首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用vi编辑模式获取mksh中的多行命令的工作历史记录?

是否可以使用vi编辑模式获取mksh中的多行命令的工作历史记录?
EN

Unix & Linux用户
提问于 2015-05-01 00:41:14
回答 1查看 636关注 0票数 2

在我的Debian系统上,我一直使用pdksh作为我的交互式shell。最初,命令行历史行为类似于我在AIX和Solaris等平台上长大的行为。

最近,由于Debian上的pdksh现在由mksh实现,命令行历史不再像我手指所期望的那样工作了。我试图弄清楚我是否可以配置mksh来做我想做的事情,或者我是否需要找到另一个成语(或者另一个shell)。

我在vi-编辑模式下使用ksh (set -o viFCEDIT=vi)。通常,我会在命令提示符下立即编写短的多行命令,即

代码语言:javascript
复制
daystrom:/home/pronovic> for i in 1 2 3
> do
>    print $i
> done
1
2
3

这些工作正如在mksh中所期望的那样。然而,命令行历史并不是这样。

在我熟悉的所有kshell实现中(在此之前),这个脚本将作为一个条目保存在历史记录中。所以,我可以点击ESC-k,回到for线的前面。一旦我到了那里,我可以再次编辑脚本到位,或者我可以点击ESC-vvi中编辑脚本。

mksh中,脚本中的每一行( for行、do行、print行等)在我的历史上成为一个单独的条目。所以,ESC-k只是带我到done行,ESC-k再一次带我去print行,等等。

我正在寻找一种配置mksh的方法,所以ESC-k会带我进入脚本的开头,这样我就可以执行它或者再次编辑它。然而,我还没有找到办法来做到这一点。

我发现的唯一讨论是关于格曼的,这意味着可以以某种方式使用^O。然而,我不清楚这是如何相关的--或者,在vi编辑模式下,这可能与此无关。

有可能让这件事成功吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-05-01 05:56:59

这里的mksh维护者;-)虽然这不是通常的“支持论坛”…

在mksh中,这两个交互编辑(但不是ESC+v (vi) / ^Xe (emacs) )仅限于单行,历史也是如此,因为它在内部被换行符终止。即使在pdksh也是如此。

显然,Debian中的pdksh是以某种方式修补的,我看到它有^J换行符。这是一个特定于Debian的修改,我没有意识到。(我不使用vi编辑模式,所以我依赖用户请求东西,偶尔也会发送补丁;到目前为止,还没有人站出来维护它,所以目前它有点孤立无援,但我考虑重写整个edit.c以统一这两种模式的代码,以解决维护问题。)

^O仅为emacs模式。但是也许我们可以让它在vi模式…中工作。

要回答你的直接问题:不,目前在mksh是不可能的。但我可以看看Debian做了什么,并试图找出我们是否可以接受它。

编辑2015-07-05

我看了pdksh;这实际上是“简单”历史的一个特性,它不可能简单地(没有双关意)在“复杂”历史中克隆,而以前的pdksh Debian打包决定不启用它,不像许多其他OSes。

我今天已经完全重新实现了这个特性,将实际的历史记录写入推迟到命令完全编译之后,这意味着在罕见的错误条件下可能会丢失一些历史记录条目(我检查过了,语法错误不属于该类别),但是多行输入现在在Emacs和Vi模式中可以正常工作,包括ESC v / ^Xe和历史存储/加载。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/199766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档