KornShell(ksh)环绕

时间:2008-09-26 20:31:26

标签: shell unix command-line ksh editing

好的,我确信这很简单,但它让我疯了。我最近去了一个程序,我不得不退后一点并使用Redhat 9.当我在运行KornShell(ksh)的标准xterm的命令行上输入时,我到达了结束时屏幕右侧滑动(切断命令的左侧),而不是将文本环绕到新行。这让我很难,因为我无法直接从命令行复制和粘贴上一个命令。我必须查看历史记录并从那里粘贴命令。如果你想知道,我做了很多命令行awk脚本,导致行很长。

有没有办法强制命令行换行而不是将可见性转移到我正在键入的命令的右侧?

我通过手册页选项没有运气。

我正在跑步:

  • XFree86 4.2.99.903(174)
  • KSH 5.2.14。

感谢。

6 个答案:

答案 0 :(得分:6)

你做过man ksh吗?

您想要set -o multiline

摘录自man ksh

  

多行:

     
    

内置编辑器将在屏幕上使用多行     长于屏幕宽度的线条。这可能不是     为所有航站楼工作​​。

  

答案 1 :(得分:4)

eval $(调整大小)应该这样做。

答案 2 :(得分:2)

如果可能,尝试通过添加\来将命令分解为多行 即:

$ mycommand -a foo \
  -f bar \
  -c dif

答案 3 :(得分:1)

简单的答案是:

$ set -o multiline
早于5.12的ksh,就像NetBSD 6.1附带的ksh一样,没有这个选项。您必须关闭当前的交互式输入行编辑模式,通常是emacs:

$ set +o emacs

这完全关闭了许多功能,例如制表符完成或使用“向上箭头”键来回滚上一个命令。

如果您决定以某种方式习惯emacs模式,请记住^ a进入行的开头(“Home”键不会工作)并且^ e将结束。

答案 4 :(得分:0)

我不知道强迫shell换行的方法,但我会问你为什么要写那么长的行。使用awk脚本,我只需将脚本包装在单引号中,然后打破我想要的行。如果你需要脚本中的单引号,它就变得棘手了 - 如果你需要单引号和双引号,那就是恶魔般的。实际上,规则很简单:使用单引号来包装整个脚本,当您想在脚本中使用单引号时,请编写'\''。第一个引号终止前一个单引号字符串;反斜杠单引号产生单引号;并且最后一个单引号开始一个新的单引号字符串。如果你需要为eval或类似的东西逃脱这些角色,它真的会变得毛茸茸。

另一个问题是 - 为什么不进入编辑器。因为我是一个顽固的vim nutcase(好吧 - 我已经使用vi超过20年,所以它比我更容易替代),我将Korn shell设置为vi模式(set -o vi),并且可以使用escape-v来启动我输入的任何内容的编辑器。

答案 5 :(得分:0)

这是一种务实的答案,但是当我遇到这个问题时,我通常会这样做:

strings ~/.history | grep COMMAND

strings ~/.history | tail

(历史文件中包含一点二进制数据,因此'字符串')